Bläddra i källkod

Merge pull request #22724 from netbox-community/22719-rest-api-returns-500-instead-of-a-validation-error-for

Fixes #22719: Correct malformed IP value validation
bctiemann 1 vecka sedan
förälder
incheckning
e232ec00e3
2 ändrade filer med 28 tillägg och 2 borttagningar
  1. 2 2
      netbox/ipam/api/field_serializers.py
  2. 26 0
      netbox/ipam/tests/test_api.py

+ 2 - 2
netbox/ipam/api/field_serializers.py

@@ -20,7 +20,7 @@ class IPAddressField(serializers.CharField):
         try:
             return IPNetwork(data)
         except AddrFormatError:
-            raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data))
+            raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data=data))
         except (TypeError, ValueError) as e:
             raise serializers.ValidationError(e)
 
@@ -40,7 +40,7 @@ class IPNetworkField(serializers.CharField):
         try:
             return IPNetwork(data)
         except AddrFormatError:
-            raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data))
+            raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data=data))
         except (TypeError, ValueError) as e:
             raise serializers.ValidationError(e)
 

+ 26 - 0
netbox/ipam/tests/test_api.py

@@ -452,6 +452,19 @@ class PrefixTestCase(APIViewTestCases.APIViewTestCase):
         )
         Prefix.objects.bulk_create(prefixes)
 
+    @tag('regression')
+    def test_create_with_invalid_prefix(self):
+        """
+        POST of a malformed prefix value returns a 400 validation error.
+        """
+        self.add_permissions('ipam.add_prefix')
+        url = reverse('ipam-api:prefix-list')
+
+        response = self.client.post(url, {'prefix': 'invalid'}, format='json', **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
+        self.assertEqual(response.data['prefix'][0], 'Invalid IP prefix format: invalid')
+
     @tag('regression')
     def test_clean_validates_scope(self):
         prefix = Prefix.objects.first()
@@ -858,6 +871,19 @@ class IPAddressTestCase(APIViewTestCases.APIViewTestCase):
         )
         IPAddress.objects.bulk_create(ip_addresses)
 
+    @tag('regression')
+    def test_create_with_invalid_address(self):
+        """
+        POST of a malformed address value returns a 400 validation error.
+        """
+        self.add_permissions('ipam.add_ipaddress')
+        url = reverse('ipam-api:ipaddress-list')
+
+        response = self.client.post(url, {'address': 'invalid'}, format='json', **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
+        self.assertEqual(response.data['address'][0], 'Invalid IP address format: invalid')
+
     def test_assign_object(self):
         """
         Test the creation of available IP addresses within a parent IP range.