Skip to content

Commit 17d5f04

Browse files
committed
fix Restore password for archived users
also refuse to activate archived users automatically
1 parent 7df5439 commit 17d5f04

2 files changed

Lines changed: 21 additions & 3 deletions

File tree

mygpo/users/views/registration.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
import re
23

34
from django import forms
@@ -18,6 +19,9 @@
1819
from mygpo.users.models import UserProxy
1920

2021

22+
logger = logging.getLogger(__name__)
23+
24+
2125
USERNAME_MAXLEN = get_user_model()._meta.get_field("username").max_length
2226

2327

@@ -144,14 +148,21 @@ def get(self, request, activation_key):
144148
user = UserProxy.objects.get(
145149
profile__activation_key=activation_key,
146150
is_active=False,
147-
profile__archived_date__isnull=True,
148151
)
149152
except UserProxy.DoesNotExist:
150153
messages.error(
151154
request,
152-
_("The activation link is either not " "valid or has already expired."),
155+
_("The activation link is either not valid or has already expired."),
153156
)
154157
return super(ActivationView, self).get(request, activation_key)
158+
if user.profile.archived_date:
159+
logger.warning("Strange attempt to activate from archived user %s", user.id)
160+
messages.error(
161+
request,
162+
_("Your account has been archived. It can't be re-activated automatically. Please see https://github.com/gpodder/mygpo/issues/866"),
163+
)
164+
return super(ActivationView, self).get(request, activation_key)
165+
155166

156167
user.activate()
157168
messages.success(

mygpo/users/views/user.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,14 @@ def restore_password(request):
139139
messages.error(request, _("User does not exist."))
140140
return render(request, "password_reset_failed.html")
141141

142-
if not user.is_active:
142+
# Archived users don't have an activation key. Indeed we don't want them to
143+
# reactivate unintentionally.
144+
if not user.is_active and not user.profile.archived_date:
145+
# reset activation key, or we send links to /activate/None !
146+
if not user.profile.activation_key:
147+
logger.warning("user %s had an empty activation key", user.id)
148+
user.profile.activation_key = random_token()
149+
user.profile.save()
143150
send_activation_email(user, request)
144151
messages.error(
145152
request,

0 commit comments

Comments
 (0)