From: Jeremy Kerr Date: Sat, 27 Apr 2019 11:12:16 +0000 (+0800) Subject: notifications: fix notification expiry when no user is associated X-Git-Tag: v2.2.0-rc1~127 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d0b79d9dee04aee13c8d64a193a7818f72eeca3b;p=thirdparty%2Fpatchwork.git notifications: fix notification expiry when no user is associated 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 [dja: fix pep8 issue] Signed-off-by: Daniel Axtens --- diff --git a/patchwork/notifications.py b/patchwork/notifications.py index 7be30f0a..111feb2d 100644 --- a/patchwork/notifications.py +++ b/patchwork/notifications.py @@ -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