소스 검색

12468 disallow double underscores in custom field names (#12523)

* 12468 disallow double underscores in custom field names

* 12468 disallow double underscores in custom field names

* 12468 review changes

* 12468 correct migration

* 12468 use inverse match

* 12468 use inverse match

* Add test for invalid custom field names

---------

Co-authored-by: jeremystretch <jstretch@netboxlabs.com>
Arthur Hanson 2 년 전
부모
커밋
21f4761335
3개의 변경된 파일34개의 추가작업 그리고 1개의 파일을 삭제
  1. 17 1
      netbox/extras/migrations/0066_customfield_name_validation.py
  2. 6 0
      netbox/extras/models/customfields.py
  3. 11 0
      netbox/extras/tests/test_customfields.py

+ 17 - 1
netbox/extras/migrations/0066_customfield_name_validation.py

@@ -13,6 +13,22 @@ class Migration(migrations.Migration):
         migrations.AlterField(
             model_name='customfield',
             name='name',
-            field=models.CharField(max_length=50, unique=True, validators=[django.core.validators.RegexValidator(flags=re.RegexFlag['IGNORECASE'], message='Only alphanumeric characters and underscores are allowed.', regex='^[a-z0-9_]+$')]),
+            field=models.CharField(
+                max_length=50,
+                unique=True,
+                validators=[
+                    django.core.validators.RegexValidator(
+                        flags=re.RegexFlag['IGNORECASE'],
+                        message='Only alphanumeric characters and underscores are allowed.',
+                        regex='^[a-z0-9_]+$',
+                    ),
+                    django.core.validators.RegexValidator(
+                        flags=re.RegexFlag['IGNORECASE'],
+                        inverse_match=True,
+                        message='Double underscores are not permitted in custom field names.',
+                        regex=r'__',
+                    ),
+                ],
+            ),
         ),
     ]

+ 6 - 0
netbox/extras/models/customfields.py

@@ -85,6 +85,12 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
                 message="Only alphanumeric characters and underscores are allowed.",
                 flags=re.IGNORECASE
             ),
+            RegexValidator(
+                regex=r'__',
+                message="Double underscores are not permitted in custom field names.",
+                flags=re.IGNORECASE,
+                inverse_match=True
+            ),
         )
     )
     label = models.CharField(

+ 11 - 0
netbox/extras/tests/test_customfields.py

@@ -29,6 +29,17 @@ class CustomFieldTest(TestCase):
 
         cls.object_type = ContentType.objects.get_for_model(Site)
 
+    def test_invalid_name(self):
+        """
+        Try creating a CustomField with an invalid name.
+        """
+        with self.assertRaises(ValidationError):
+            # Invalid character
+            CustomField(name='?', type=CustomFieldTypeChoices.TYPE_TEXT).full_clean()
+        with self.assertRaises(ValidationError):
+            # Double underscores not permitted
+            CustomField(name='foo__bar', type=CustomFieldTypeChoices.TYPE_TEXT).full_clean()
+
     def test_text_field(self):
         value = 'Foobar!'