@@ -206,6 +206,88 @@ def test_authorize_unverified_user(self):
206206 self .assertEqual (response .status_code , 200 )
207207 self .assertIsNone (response .data )
208208
209+ def test_authorize_verified_user (self ):
210+ org_user = self ._get_org_user ()
211+ user = org_user .user
212+ org_settings = OrganizationRadiusSettings .objects .get (
213+ organization = self ._get_org ()
214+ )
215+ org_settings .needs_identity_verification = True
216+ org_settings .save ()
217+
218+ with self .subTest ("org-specific verified record passes authorization" ):
219+ RegisteredUser .objects .create (
220+ user = user , organization = self ._get_org (), is_verified = True
221+ )
222+ response = self ._authorize_user (auth_header = self .auth_header )
223+ self .assertEqual (response .status_code , 200 )
224+ self .assertEqual (response .data , {"control:Auth-Type" : "Accept" })
225+
226+ with self .subTest ("global verified record passes authorization (fallback)" ):
227+ RegisteredUser .objects .filter (user = user ).delete ()
228+ RegisteredUser .objects .create (
229+ user = user , organization = None , is_verified = True
230+ )
231+ response = self ._authorize_user (auth_header = self .auth_header )
232+ self .assertEqual (response .status_code , 200 )
233+ self .assertEqual (response .data , {"control:Auth-Type" : "Accept" })
234+
235+ def test_multi_org_user_different_verification_states (self ):
236+ org1 = self ._get_org ()
237+ org_settings = OrganizationRadiusSettings .objects .get (organization = org1 )
238+ org_settings .needs_identity_verification = True
239+ org_settings .save ()
240+ org2 = self ._create_org (name = "org2" , slug = "org2" )
241+ org2_settings = OrganizationRadiusSettings .objects .get_or_create (
242+ organization = org2
243+ )[0 ]
244+ org2_settings .needs_identity_verification = True
245+ org2_settings .full_clean ()
246+ org2_settings .save ()
247+ user = self ._get_user_with_org ()
248+ self ._create_org_user (organization = org2 , user = user )
249+ RegisteredUser .objects .create (user = user , organization = org1 , is_verified = True )
250+ auth_header_org1 = f"Bearer { org1 .pk } { org1 .radius_settings .token } "
251+ response = self ._authorize_user (
252+ username = user .username , auth_header = auth_header_org1
253+ )
254+ self .assertEqual (response .data ["control:Auth-Type" ], "Accept" )
255+
256+ auth_header_org2 = f"Bearer { org2 .pk } { org2 .radius_settings .token } "
257+ response = self ._authorize_user (
258+ username = user .username , auth_header = auth_header_org2
259+ )
260+ self .assertIsNone (response .data )
261+
262+ def test_global_fallback_for_orgs_without_specific_records (self ):
263+ org1 = self ._get_org ()
264+ org2 = self ._create_org (name = "org2" , slug = "org2" )
265+ org2_settings = OrganizationRadiusSettings .objects .get_or_create (
266+ organization = org2
267+ )[0 ]
268+ org2_settings .needs_identity_verification = True
269+ org2_settings .full_clean ()
270+ org2_settings .save ()
271+ user = self ._get_user_with_org ()
272+ self ._create_org_user (organization = org2 , user = user )
273+ RegisteredUser .objects .create (user = user , organization = None , is_verified = True )
274+ org_settings = OrganizationRadiusSettings .objects .get (organization = org1 )
275+ org_settings .needs_identity_verification = True
276+ org_settings .save ()
277+ user .registered_users .exclude (organization = None ).delete ()
278+
279+ auth_header_org1 = f"Bearer { org1 .pk } { org1 .radius_settings .token } "
280+ response = self ._authorize_user (
281+ username = user .username , auth_header = auth_header_org1
282+ )
283+ self .assertEqual (response .data ["control:Auth-Type" ], "Accept" )
284+
285+ auth_header_org2 = f"Bearer { org2 .pk } { org2 .radius_settings .token } "
286+ response = self ._authorize_user (
287+ username = user .username , auth_header = auth_header_org2
288+ )
289+ self .assertEqual (response .data ["control:Auth-Type" ], "Accept" )
290+
209291 def test_authorize_radius_token_unverified_user (self ):
210292 user = self ._get_org_user ()
211293 org_settings = OrganizationRadiusSettings .objects .get (
@@ -258,7 +340,7 @@ def test_postauth_radius_token_accept_201(self):
258340 def test_postauth_accept_201_querystring (self ):
259341 self .assertEqual (RadiusPostAuth .objects .all ().count (), 0 )
260342 params = self ._get_postauth_params ()
261- post_url = f' { reverse (" radius:postauth" )} { self .token_querystring } '
343+ post_url = f" { reverse (' radius:postauth' )} { self .token_querystring } "
262344 response = self .client .post (post_url , params )
263345 params ["password" ] = ""
264346 self .assertEqual (RadiusPostAuth .objects .filter (** params ).count (), 1 )
@@ -2442,7 +2524,7 @@ def test_cache(self):
24422524 )
24432525 self ._get_org_user ()
24442526 token_querystring = f"?token={ rad .token } &uuid={ str (self .org .pk )} "
2445- post_url = f' { reverse (" radius:authorize" )} { token_querystring } '
2527+ post_url = f" { reverse (' radius:authorize' )} { token_querystring } "
24462528 # Clear cache before sending request
24472529 cache .clear ()
24482530 self .client .post (post_url , {"username" : "tester" , "password" : "tester" })
0 commit comments