]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
notifications: fix notification expiry when no user is associated
authorJeremy Kerr <jk@ozlabs.org>
Sat, 27 Apr 2019 11:12:16 +0000 (19:12 +0800)
committerDaniel Axtens <dja@axtens.net>
Tue, 30 Apr 2019 04:49:45 +0000 (14:49 +1000)
It's possible that an EmailConfirmation object will have no associated
user (eg, for email opt-out, which does not require a user object). In
this case, we will see a NULL value for EmailConfirmation.user_id.

However, having a NULL value appear in a SQL 'IN' clause will match
every value. This means that once one of these null-user
EmailConfirmations is present, we will never expire any non-active user
accounts.

This change adds a filter for a valid user_id when we query for active
EmailConfirmation objects. This means we'll have a valid values set to
use in the pending_confs set.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
[dja: fix pep8 issue]
Signed-off-by: Daniel Axtens <dja@axtens.net>
patchwork/notifications.py

index 7be30f0a0652adcd35499c4ecfc643dce0e51181..111feb2dc415b900b7a9a37729a417504e9b5577 100644 (file)
@@ -96,7 +96,8 @@ def expire_notifications():
     EmailConfirmation.objects.filter(q).delete()
 
     # remove inactive users with no pending confirmation
-    pending_confs = EmailConfirmation.objects.values('user')
+    pending_confs = (EmailConfirmation.objects
+                     .filter(user__isnull=False).values('user'))
     users = User.objects.filter(is_active=False).exclude(id__in=pending_confs)
 
     # delete users