diff mbox series

notifications: fix notification expiry when no user is associated

Message ID 20190427111216.1704-1-jk@ozlabs.org
State Accepted
Headers show
Series notifications: fix notification expiry when no user is associated | expand

Commit Message

Jeremy Kerr April 27, 2019, 11:12 a.m. UTC
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>
---
 patchwork/notifications.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Daniel Axtens April 30, 2019, 5:21 a.m. UTC | #1
Applied, thank you.

I fixed up a small pep8 issue along the way.

Regards,
Daniel

Jeremy Kerr <jk@ozlabs.org> writes:

> 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>
> ---
>  patchwork/notifications.py | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/patchwork/notifications.py b/patchwork/notifications.py
> index a5f6423..571cff7 100644
> --- a/patchwork/notifications.py
> +++ b/patchwork/notifications.py
> @@ -109,7 +109,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
> -- 
> 2.17.1
>
> _______________________________________________
> Patchwork mailing list
> Patchwork@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
diff mbox series

Patch

diff --git a/patchwork/notifications.py b/patchwork/notifications.py
index a5f6423..571cff7 100644
--- a/patchwork/notifications.py
+++ b/patchwork/notifications.py
@@ -109,7 +109,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