Skip to content

Commit b3e7355

Browse files
committed
Merge branch 'hotfix/24.08.1' into develop
2 parents 9394a0f + 78bc9e8 commit b3e7355

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

osf/models/user.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -1227,12 +1227,12 @@ def update_guessed_names(self):
12271227
self.family_name = parsed['family']
12281228
self.suffix = parsed['suffix']
12291229

1230-
def add_unconfirmed_email(self, email, expiration=None, external_identity=None):
1230+
def add_unconfirmed_email(self, email, expiration=None, external_identity=None, force=False):
12311231
"""
12321232
Add an email verification token for a given email.
12331233
12341234
:param email: the email to confirm
1235-
:param email: overwrite default expiration time
1235+
:param expiration: overwrite default expiration time
12361236
:param external_identity: the user's external identity
12371237
:return: a token
12381238
:raises: ValueError if email already confirmed, except for login through external idp.
@@ -1249,7 +1249,8 @@ def add_unconfirmed_email(self, email, expiration=None, external_identity=None):
12491249
validate_email(email)
12501250

12511251
if not external_identity and self.emails.filter(address=email).exists():
1252-
raise ValueError('Email already confirmed to this user.')
1252+
if not force or self.is_confirmed:
1253+
raise ValueError('Email already confirmed to this user.')
12531254

12541255
# If the unconfirmed email is already present, refresh the token
12551256
if email in self.unconfirmed_emails:
@@ -1304,14 +1305,14 @@ def get_confirmation_token(self, email, force=False, renew=False):
13041305
# assume the token is expired
13051306
expiration = info.get('expiration')
13061307
if renew:
1307-
new_token = self.add_unconfirmed_email(email)
1308+
new_token = self.add_unconfirmed_email(email, force=force)
13081309
self.save()
13091310
return new_token
13101311
if not expiration or (expiration and expiration < timezone.now()):
13111312
if not force:
13121313
raise ExpiredTokenError(f'Token for email "{email}" is expired')
13131314
else:
1314-
new_token = self.add_unconfirmed_email(email)
1315+
new_token = self.add_unconfirmed_email(email, force=force)
13151316
self.save()
13161317
return new_token
13171318
return token
@@ -1355,7 +1356,7 @@ def get_or_create_confirmation_url(self, email, force=False, renew=False):
13551356
try:
13561357
self.get_confirmation_token(email, force=force, renew=renew)
13571358
except KeyError:
1358-
self.add_unconfirmed_email(email)
1359+
self.add_unconfirmed_email(email, force=force)
13591360
self.save()
13601361
return self.get_confirmation_url(email)
13611362

0 commit comments

Comments
 (0)