1 |
1 |
# authentic2 - versatile identity manager
|
2 |
|
# Copyright (C) 2010-2019 Entr'ouvert
|
|
2 |
# Copyright (C) 2010-2020 Entr'ouvert
|
3 |
3 |
#
|
4 |
4 |
# This program is free software: you can redistribute it and/or modify it
|
5 |
5 |
# under the terms of the GNU Affero General Public License as published
|
... | ... | |
16 |
16 |
|
17 |
17 |
from __future__ import print_function
|
18 |
18 |
|
19 |
|
import json
|
20 |
19 |
import logging
|
21 |
20 |
import smtplib
|
22 |
21 |
|
23 |
22 |
from datetime import timedelta
|
24 |
23 |
from django.contrib.auth import get_user_model
|
25 |
|
from django.core.management.base import BaseCommand, CommandError
|
|
24 |
from django.core.management.base import BaseCommand
|
26 |
25 |
from django.utils import timezone
|
27 |
26 |
from django.utils.six.moves.urllib import parse as urlparse
|
28 |
|
from django.template.loader import render_to_string
|
29 |
27 |
from django_rbac.utils import get_ou_model
|
30 |
28 |
|
31 |
29 |
from authentic2.models import DeletedUser
|
... | ... | |
38 |
36 |
User = get_user_model()
|
39 |
37 |
|
40 |
38 |
|
41 |
|
def print_table(table):
|
42 |
|
col_width = [max(len(x) for x in col) for col in zip(*table)]
|
43 |
|
for line in table:
|
44 |
|
line = u"| " + u" | ".join(u"{0:>{1}}".format(x, col_width[i]) for i, x in enumerate(line)) + u" |"
|
45 |
|
print(line)
|
46 |
|
|
47 |
|
|
48 |
39 |
class Command(BaseCommand):
|
49 |
40 |
help = '''Clean unused accounts'''
|
50 |
41 |
|
... | ... | |
72 |
63 |
for ou in get_ou_model().objects.filter(clean_unused_accounts_alert__isnull=False):
|
73 |
64 |
alert_delay = timedelta(days=ou.clean_unused_accounts_alert)
|
74 |
65 |
deletion_delay = timedelta(days=ou.clean_unused_accounts_deletion)
|
75 |
|
users = User.objects.filter(ou=ou, last_login__lte=now-alert_delay)
|
|
66 |
users = User.objects.filter(ou=ou, last_login__lte=now - alert_delay)
|
76 |
67 |
|
77 |
68 |
for user in users.filter(last_account_deletion_alert__isnull=True):
|
78 |
|
logger.info('%s last login %d days ago, sending alert', user,
|
79 |
|
ou.clean_unused_accounts_alert)
|
|
69 |
logger.info('%s last login %d days ago, sending alert', user, ou.clean_unused_accounts_alert)
|
80 |
70 |
self.send_alert(user)
|
81 |
71 |
|
82 |
72 |
to_delete = users.filter(
|
... | ... | |
85 |
75 |
last_account_deletion_alert__lte=now - (deletion_delay - alert_delay)
|
86 |
76 |
)
|
87 |
77 |
for user in to_delete:
|
88 |
|
logger.info('%s last login more than %d days ago, deleting user',
|
89 |
|
user, ou.clean_unused_accounts_deletion)
|
|
78 |
logger.info(
|
|
79 |
'%s last login more than %d days ago, deleting user', user,
|
|
80 |
ou.clean_unused_accounts_deletion)
|
90 |
81 |
self.delete_user(user)
|
91 |
82 |
|
92 |
83 |
def send_alert(self, user):
|
93 |
|
-
|