diff --git a/api/src/backend/api/models.py b/api/src/backend/api/models.py index 61e8eb22a2..3b85d2208f 100644 --- a/api/src/backend/api/models.py +++ b/api/src/backend/api/models.py @@ -218,7 +218,11 @@ class Provider(RowLevelSecurityProtectedModel): @staticmethod def validate_m365_uid(value): - if not re.match(r"^[a-zA-Z0-9-]+\.com$", value): + if not re.match( + r"""^(?!-)[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.(?!-)[A-Za-z0-9]""" + r"""(?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*\.[A-Za-z]{2,}$""", + value, + ): raise ModelValidationError( detail="M365 domain ID must be a valid domain.", code="m365-uid", @@ -426,6 +430,7 @@ class Scan(RowLevelSecurityProtectedModel): PeriodicTask, on_delete=models.CASCADE, null=True, blank=True ) output_location = models.CharField(blank=True, null=True, max_length=200) + # TODO: mutelist foreign key class Meta(RowLevelSecurityProtectedModel.Meta): diff --git a/api/src/backend/api/tests/test_views.py b/api/src/backend/api/tests/test_views.py index a82348fe87..80ab44b946 100644 --- a/api/src/backend/api/tests/test_views.py +++ b/api/src/backend/api/tests/test_views.py @@ -918,6 +918,26 @@ class TestProviderViewSet: "uid": "8851db6b-42e5-4533-aa9e-30a32d67e875", "alias": "test", }, + { + "provider": "m365", + "uid": "TestingPro.onMirosoft.com", + "alias": "test", + }, + { + "provider": "m365", + "uid": "subdomain.domain.es", + "alias": "test", + }, + { + "provider": "m365", + "uid": "microsoft.net", + "alias": "test", + }, + { + "provider": "m365", + "uid": "subdomain1.subdomain2.subdomain3.subdomain4.domain.net", + "alias": "test", + }, ] ), ) @@ -986,6 +1006,51 @@ class TestProviderViewSet: "invalid_choice", "provider", ), + ( + { + "provider": "m365", + "uid": "https://test.com", + "alias": "test", + }, + "m365-uid", + "uid", + ), + ( + { + "provider": "m365", + "uid": "thisisnotadomain", + "alias": "test", + }, + "m365-uid", + "uid", + ), + ( + { + "provider": "m365", + "uid": "http://test.com", + "alias": "test", + }, + "m365-uid", + "uid", + ), + ( + { + "provider": "m365", + "uid": f"{'a' * 64}.domain.com", + "alias": "test", + }, + "m365-uid", + "uid", + ), + ( + { + "provider": "m365", + "uid": f"subdomain.{'a' * 64}.com", + "alias": "test", + }, + "m365-uid", + "uid", + ), ] ), )