0002-misc-adapt-clean-unused-account-for-keepalive-67901.patch
src/authentic2/management/commands/clean-unused-accounts.py | ||
---|---|---|
23 | 23 |
from django.contrib.auth import get_user_model |
24 | 24 |
from django.core.management.base import BaseCommand |
25 | 25 |
from django.db import transaction |
26 |
from django.db.models import F |
|
26 |
from django.db.models import F, Q
|
|
27 | 27 |
from django.utils import timezone, translation |
28 | 28 | |
29 | 29 |
from authentic2 import app_settings |
... | ... | |
87 | 87 |
ou_users = self.user_qs.filter(ou=ou) |
88 | 88 | |
89 | 89 |
# reset last_account_deletion_alert for users which connected since last alert |
90 |
active_users = ou_users.filter(last_login__gte=F('last_account_deletion_alert')) |
|
90 |
active_users = ou_users.filter( |
|
91 |
Q(last_login__gte=F('last_account_deletion_alert')) |
|
92 |
| Q(keepalive__gte=F('last_account_deletion_alert')) |
|
93 |
) |
|
91 | 94 |
active_users.update(last_account_deletion_alert=None) |
92 | 95 | |
93 |
inactive_users = ou_users.filter(last_login__lte=self.now - alert_delay) |
|
96 |
inactive_users = ou_users.filter( |
|
97 |
Q(last_login__lte=self.now - alert_delay) |
|
98 |
& (Q(keepalive__isnull=True) | Q(keepalive__lte=self.now - alert_delay)) |
|
99 |
) |
|
94 | 100 | |
95 | 101 |
# send first alert |
96 | 102 |
inactive_users_first_alert = inactive_users.filter(last_account_deletion_alert__isnull=True) |
tests/test_commands.py | ||
---|---|---|
131 | 131 |
assert len(mailoutbox) == 2 |
132 | 132 | |
133 | 133 | |
134 |
def test_clean_unused_account_keepalive(app, db, simple_user, mailoutbox, freezer): |
|
135 |
freezer.move_to('2018-01-01') |
|
136 |
simple_user.ou.clean_unused_accounts_alert = 2 |
|
137 |
simple_user.ou.clean_unused_accounts_deletion = 3 |
|
138 |
simple_user.ou.save() |
|
139 | ||
140 |
simple_user.last_login = now() - datetime.timedelta(days=2) |
|
141 |
simple_user.keepalive = now() |
|
142 |
simple_user.save() |
|
143 | ||
144 |
call_command('clean-unused-accounts') |
|
145 |
assert len(mailoutbox) == 0 |
|
146 | ||
147 | ||
148 |
def test_clean_unused_account_keepalive_after_alert(app, db, simple_user, mailoutbox, freezer): |
|
149 |
freezer.move_to('2018-01-01') |
|
150 |
simple_user.ou.clean_unused_accounts_alert = 2 |
|
151 |
simple_user.ou.clean_unused_accounts_deletion = 3 |
|
152 |
simple_user.ou.save() |
|
153 | ||
154 |
simple_user.last_login = now() - datetime.timedelta(days=2) |
|
155 |
simple_user.save() |
|
156 | ||
157 |
call_command('clean-unused-accounts') |
|
158 |
assert len(mailoutbox) == 1 |
|
159 | ||
160 |
login(app, simple_user) |
|
161 | ||
162 |
# the day of deletion, nothing happens |
|
163 |
freezer.move_to('2018-01-02') |
|
164 |
assert len(mailoutbox) == 1 |
|
165 | ||
166 |
freezer.move_to('2018-01-03') |
|
167 |
# set keepalive |
|
168 |
simple_user.keepalive = now() |
|
169 |
simple_user.save() |
|
170 | ||
171 |
# when new alert delay is reached, no mail is sent and last_account_deletion_alert is reset |
|
172 |
freezer.move_to('2018-01-04') |
|
173 |
call_command('clean-unused-accounts') |
|
174 |
assert len(mailoutbox) == 1 |
|
175 |
simple_user.refresh_from_db() |
|
176 |
assert simple_user.last_account_deletion_alert is None |
|
177 | ||
178 | ||
134 | 179 |
def test_clean_unused_account_disabled_by_default(db, simple_user, mailoutbox): |
135 | 180 |
simple_user.last_login = now() - datetime.timedelta(days=2) |
136 | 181 |
simple_user.save() |
137 |
- |