@@ -1058,14 +1058,20 @@ def save_user(self, user):
10581058 OrganizationUser = swapper .load_model ("openwisp_users" , "OrganizationUser" )
10591059 RegisteredUser = swapper .load_model ("openwisp_radius" , "RegisteredUser" )
10601060 user .save ()
1061- registered_user = RegisteredUser (
1061+ registered_user , created = RegisteredUser . get_or_create_for_user_and_org (
10621062 user = user ,
1063- method = "manual" ,
10641063 organization = self .organization ,
1064+ defaults = {
1065+ "method" : "manual" ,
1066+ "is_verified" : self .organization .radius_settings .needs_identity_verification ,
1067+ },
10651068 )
1066- if self .organization .radius_settings .needs_identity_verification :
1069+ if (
1070+ not created
1071+ and self .organization .radius_settings .needs_identity_verification
1072+ ):
10671073 registered_user .is_verified = True
1068- registered_user .save ()
1074+ registered_user .save ()
10691075 self .users .add (user )
10701076 if OrganizationUser .objects .filter (
10711077 user = user , organization = self .organization
@@ -1563,26 +1569,35 @@ def send_token(self):
15631569 )
15641570 sms_message .send (meta_data = org_radius_settings .sms_meta_data )
15651571
1566- def is_valid (self , token ):
1572+ def is_valid (self , token , organization = None ):
15671573 self .attempts += 1
15681574 try :
1569- self .verified = self .__check (token )
1575+ self .verified = self .__check (token , organization = organization )
15701576 except exceptions .PhoneTokenException as phone_error :
15711577 self .save ()
15721578 raise phone_error
15731579 self .save ()
15741580 return self .verified
15751581
1576- def _validate_already_verified (self ):
1582+ def _validate_already_verified (self , organization = None ):
15771583 RegisteredUser = swapper .load_model ("openwisp_radius" , "RegisteredUser" )
1578- if RegisteredUser .objects .filter (user = self .user , is_verified = True ).exists ():
1584+ if organization is not None :
1585+ reg_user = RegisteredUser .get_global_or_org_specific (
1586+ self .user , organization
1587+ )
1588+ is_verified = reg_user is not None and reg_user .is_verified
1589+ else :
1590+ is_verified = RegisteredUser .objects .filter (
1591+ user = self .user , is_verified = True
1592+ ).exists ()
1593+ if is_verified :
15791594 logger .warning (f"User { self .user .pk } is already verified" )
15801595 raise exceptions .UserAlreadyVerified (
15811596 _ ("This user has been already verified." )
15821597 )
15831598
1584- def __check (self , token ):
1585- self ._validate_already_verified ()
1599+ def __check (self , token , organization = None ):
1600+ self ._validate_already_verified (organization = organization )
15861601 if self .attempts > app_settings .SMS_TOKEN_MAX_ATTEMPTS :
15871602 logger .warning (
15881603 f"User { self .user } has reached the max "
@@ -1613,6 +1628,7 @@ class AbstractRegisteredUser(UUIDModel):
16131628 organization = models .ForeignKey (
16141629 swapper .get_model_name ("openwisp_users" , "Organization" ),
16151630 on_delete = models .CASCADE ,
1631+ related_name = "registered_users" ,
16161632 null = True ,
16171633 blank = True ,
16181634 verbose_name = _ ("organization" ),
@@ -1684,13 +1700,6 @@ def clean(self):
16841700 _ ("A registration record already exists for this user/organization." )
16851701 )
16861702
1687- @classmethod
1688- def get_for_user_and_org (cls , user , organization ):
1689- try :
1690- return cls .objects .get (user = user , organization = organization )
1691- except cls .DoesNotExist :
1692- return None
1693-
16941703 @classmethod
16951704 def get_or_create_for_user_and_org (cls , user , organization , defaults = None ):
16961705 defaults = defaults or {}
0 commit comments