misc: adapt clean-unused-account for keepalive (#67901)
This commit is contained in:
parent
fa52e3739c
commit
ff581d6617
|
@ -23,7 +23,7 @@ from django.conf import settings
|
|||
from django.contrib.auth import get_user_model
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.db import transaction
|
||||
from django.db.models import F
|
||||
from django.db.models import F, Q
|
||||
from django.utils import timezone, translation
|
||||
|
||||
from authentic2 import app_settings
|
||||
|
@ -87,10 +87,16 @@ class Command(BaseCommand):
|
|||
ou_users = self.user_qs.filter(ou=ou)
|
||||
|
||||
# reset last_account_deletion_alert for users which connected since last alert
|
||||
active_users = ou_users.filter(last_login__gte=F('last_account_deletion_alert'))
|
||||
active_users = ou_users.filter(
|
||||
Q(last_login__gte=F('last_account_deletion_alert'))
|
||||
| Q(keepalive__gte=F('last_account_deletion_alert'))
|
||||
)
|
||||
active_users.update(last_account_deletion_alert=None)
|
||||
|
||||
inactive_users = ou_users.filter(last_login__lte=self.now - alert_delay)
|
||||
inactive_users = ou_users.filter(
|
||||
Q(last_login__lte=self.now - alert_delay)
|
||||
& (Q(keepalive__isnull=True) | Q(keepalive__lte=self.now - alert_delay))
|
||||
)
|
||||
|
||||
# send first alert
|
||||
inactive_users_first_alert = inactive_users.filter(last_account_deletion_alert__isnull=True)
|
||||
|
|
|
@ -137,6 +137,51 @@ def test_clean_unused_account_user_logs_in(app, db, simple_user, mailoutbox, fre
|
|||
assert len(mailoutbox) == 2
|
||||
|
||||
|
||||
def test_clean_unused_account_keepalive(app, db, simple_user, mailoutbox, freezer):
|
||||
freezer.move_to('2018-01-01')
|
||||
simple_user.ou.clean_unused_accounts_alert = 2
|
||||
simple_user.ou.clean_unused_accounts_deletion = 3
|
||||
simple_user.ou.save()
|
||||
|
||||
simple_user.last_login = now() - datetime.timedelta(days=2)
|
||||
simple_user.keepalive = now()
|
||||
simple_user.save()
|
||||
|
||||
call_command('clean-unused-accounts')
|
||||
assert len(mailoutbox) == 0
|
||||
|
||||
|
||||
def test_clean_unused_account_keepalive_after_alert(app, db, simple_user, mailoutbox, freezer):
|
||||
freezer.move_to('2018-01-01')
|
||||
simple_user.ou.clean_unused_accounts_alert = 2
|
||||
simple_user.ou.clean_unused_accounts_deletion = 3
|
||||
simple_user.ou.save()
|
||||
|
||||
simple_user.last_login = now() - datetime.timedelta(days=2)
|
||||
simple_user.save()
|
||||
|
||||
call_command('clean-unused-accounts')
|
||||
assert len(mailoutbox) == 1
|
||||
|
||||
login(app, simple_user)
|
||||
|
||||
# the day of deletion, nothing happens
|
||||
freezer.move_to('2018-01-02')
|
||||
assert len(mailoutbox) == 1
|
||||
|
||||
freezer.move_to('2018-01-03')
|
||||
# set keepalive
|
||||
simple_user.keepalive = now()
|
||||
simple_user.save()
|
||||
|
||||
# when new alert delay is reached, no mail is sent and last_account_deletion_alert is reset
|
||||
freezer.move_to('2018-01-04')
|
||||
call_command('clean-unused-accounts')
|
||||
assert len(mailoutbox) == 1
|
||||
simple_user.refresh_from_db()
|
||||
assert simple_user.last_account_deletion_alert is None
|
||||
|
||||
|
||||
def test_clean_unused_account_disabled_by_default(db, simple_user, mailoutbox):
|
||||
simple_user.last_login = now() - datetime.timedelta(days=2)
|
||||
simple_user.save()
|
||||
|
|
Loading…
Reference in New Issue