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 | ||
---|---|---|
138 | 138 |
assert len(mailoutbox) == 2 |
139 | 139 | |
140 | 140 | |
141 |
def test_clean_unused_account_keepalive(app, db, simple_user, mailoutbox, freezer): |
|
142 |
freezer.move_to('2018-01-01') |
|
143 |
simple_user.ou.clean_unused_accounts_alert = 2 |
|
144 |
simple_user.ou.clean_unused_accounts_deletion = 3 |
|
145 |
simple_user.ou.save() |
|
146 | ||
147 |
simple_user.last_login = now() - datetime.timedelta(days=2) |
|
148 |
simple_user.keepalive = now() |
|
149 |
simple_user.save() |
|
150 | ||
151 |
call_command('clean-unused-accounts') |
|
152 |
assert len(mailoutbox) == 0 |
|
153 | ||
154 | ||
155 |
def test_clean_unused_account_keepalive_after_alert(app, db, simple_user, mailoutbox, freezer): |
|
156 |
freezer.move_to('2018-01-01') |
|
157 |
simple_user.ou.clean_unused_accounts_alert = 2 |
|
158 |
simple_user.ou.clean_unused_accounts_deletion = 3 |
|
159 |
simple_user.ou.save() |
|
160 | ||
161 |
simple_user.last_login = now() - datetime.timedelta(days=2) |
|
162 |
simple_user.save() |
|
163 | ||
164 |
call_command('clean-unused-accounts') |
|
165 |
assert len(mailoutbox) == 1 |
|
166 | ||
167 |
login(app, simple_user) |
|
168 | ||
169 |
# the day of deletion, nothing happens |
|
170 |
freezer.move_to('2018-01-02') |
|
171 |
assert len(mailoutbox) == 1 |
|
172 | ||
173 |
freezer.move_to('2018-01-03') |
|
174 |
# set keepalive |
|
175 |
simple_user.keepalive = now() |
|
176 |
simple_user.save() |
|
177 | ||
178 |
# when new alert delay is reached, no mail is sent and last_account_deletion_alert is reset |
|
179 |
freezer.move_to('2018-01-04') |
|
180 |
call_command('clean-unused-accounts') |
|
181 |
assert len(mailoutbox) == 1 |
|
182 |
simple_user.refresh_from_db() |
|
183 |
assert simple_user.last_account_deletion_alert is None |
|
184 | ||
185 | ||
141 | 186 |
def test_clean_unused_account_disabled_by_default(db, simple_user, mailoutbox): |
142 | 187 |
simple_user.last_login = now() - datetime.timedelta(days=2) |
143 | 188 |
simple_user.save() |
144 |
- |