1616 DomainVerificationService ,
1717 SSOProviderService ,
1818)
19+ from ee .src .services import db_manager_ee
1920from ee .src .utils .permissions import check_user_org_access
2021from ee .src .services .selectors import get_user_org_and_workspace_id
2122
@@ -35,6 +36,36 @@ async def verify_user_org_access(user_id: str, organization_id: str) -> None:
3536 )
3637
3738
39+ async def require_email_or_social_or_root_enabled (organization_id : str ) -> None :
40+ """Block domain/provider changes when SSO is the only allowed method."""
41+ organization = await db_manager_ee .get_organization (organization_id )
42+ flags = organization .flags or {}
43+ allow_email = flags .get ("allow_email" , False )
44+ allow_social = flags .get ("allow_social" , False )
45+ allow_root = flags .get ("allow_root" , False )
46+ if not (allow_email or allow_social or allow_root ):
47+ raise HTTPException (
48+ status_code = 400 ,
49+ detail = (
50+ "To modify domains or SSO providers, enable email or social authentication "
51+ "for this organization, or enable root access for owners."
52+ ),
53+ )
54+
55+
56+ async def require_domains_and_auto_join_disabled (organization_id : str ) -> None :
57+ """Block edits to verified domains when domains-only or auto-join is enabled."""
58+ organization = await db_manager_ee .get_organization (organization_id )
59+ flags = organization .flags or {}
60+ if flags .get ("domains_only" ) or flags .get ("auto_join" ):
61+ raise HTTPException (
62+ status_code = 400 ,
63+ detail = (
64+ "Disable domains-only and auto-join before modifying verified domains."
65+ ),
66+ )
67+
68+
3869# Domain Verification Endpoints
3970
4071
@@ -81,6 +112,7 @@ async def verify_domain(
81112 user_id = request .state .user_id
82113
83114 await verify_user_org_access (user_id , organization_id )
115+ await require_domains_and_auto_join_disabled (organization_id )
84116
85117 return await domain_service .verify_domain (
86118 organization_id , payload .domain_id , user_id
@@ -115,6 +147,7 @@ async def refresh_domain_token(
115147 user_id = request .state .user_id
116148
117149 await verify_user_org_access (user_id , organization_id )
150+ await require_domains_and_auto_join_disabled (organization_id )
118151
119152 return await domain_service .refresh_token (organization_id , domain_id , user_id )
120153
@@ -134,6 +167,7 @@ async def reset_domain(
134167 user_id = request .state .user_id
135168
136169 await verify_user_org_access (user_id , organization_id )
170+ await require_domains_and_auto_join_disabled (organization_id )
137171
138172 return await domain_service .reset_domain (organization_id , domain_id , user_id )
139173
@@ -148,6 +182,7 @@ async def delete_domain(
148182 user_id = request .state .user_id
149183
150184 await verify_user_org_access (user_id , organization_id )
185+ await require_domains_and_auto_join_disabled (organization_id )
151186
152187 await domain_service .delete_domain (organization_id , domain_id , user_id )
153188 return Response (status_code = 204 )
@@ -172,6 +207,7 @@ async def create_provider(
172207 user_id = request .state .user_id
173208
174209 await verify_user_org_access (user_id , organization_id )
210+ await require_email_or_social_or_root_enabled (organization_id )
175211
176212 return await provider_service .create_provider (organization_id , payload , user_id )
177213
@@ -187,6 +223,7 @@ async def update_provider(
187223 user_id = request .state .user_id
188224
189225 await verify_user_org_access (user_id , organization_id )
226+ await require_email_or_social_or_root_enabled (organization_id )
190227
191228 return await provider_service .update_provider (
192229 organization_id , provider_id , payload , user_id
@@ -225,6 +262,7 @@ async def test_provider(
225262 user_id = request .state .user_id
226263
227264 await verify_user_org_access (user_id , organization_id )
265+ await require_email_or_social_or_root_enabled (organization_id )
228266
229267 return await provider_service .test_provider (organization_id , provider_id , user_id )
230268
@@ -239,6 +277,7 @@ async def delete_provider(
239277 user_id = request .state .user_id
240278
241279 await verify_user_org_access (user_id , organization_id )
280+ await require_email_or_social_or_root_enabled (organization_id )
242281
243282 await provider_service .delete_provider (organization_id , provider_id , user_id )
244283 return Response (status_code = 204 )
0 commit comments