diff --git a/src/account_helper/management/__init__.py b/src/account_helper/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/account_helper/management/commands/__init__.py b/src/account_helper/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/account_helper/management/commands/deletable.py b/src/account_helper/management/commands/deletable.py new file mode 100644 index 0000000..679506a --- /dev/null +++ b/src/account_helper/management/commands/deletable.py @@ -0,0 +1,38 @@ +from django.core.management.base import BaseCommand, CommandError +from account_helper.models import DeletedUser +from django.utils import timezone +from django.core import serializers +import json + + +class Command(BaseCommand): + help = 'Get and delete the deleted marked users' + + def add_arguments(self, parser): + parser.add_argument( + '--delete', + action='store_true', + help='Delete poll instead of closing it', + ) + parser.add_argument( + '--json', + action='store_true', + help='Return an json encoded String', + ) + + def handle(self, *args, **options): + deletables = DeletedUser.objects.filter(deletion_date__lte=timezone.now() + timezone.timedelta(+16)) + output = "" + if options['json']: + django_serialized = serializers.serialize('json', deletables) + output = json.dumps({'deletables': json.loads(django_serialized)}) + else: + for user in deletables: + output += f'{user}\n' + + if options['delete']: + for user in deletables: + pass + if not options['json']: + output += '\nSuccessfully deleted all listed users' + self.stdout.write(self.style.SUCCESS(output)) diff --git a/src/account_helper/models.py b/src/account_helper/models.py index bc55b2b..f363f52 100644 --- a/src/account_helper/models.py +++ b/src/account_helper/models.py @@ -1,5 +1,6 @@ from django.contrib.auth.models import Group, User from django.db import models +from django.utils import timezone # Create your models here. @@ -14,9 +15,15 @@ class Realm(models.Model): return f'{self.name} - {self.ldap_base_dn}' +def get_deletion_time(): + return timezone.now() + timezone.timedelta(+14) + + class DeletedUser(models.Model): - deletion_date = models.DateField(auto_now=True) + deletion_marker_date = models.DateField(auto_now_add=True) user = models.ForeignKey(User, on_delete=models.CASCADE) + ldap_dn = models.CharField(max_length=512, unique=True) + deletion_date = models.DateField(default=get_deletion_time) def __str__(self): - return f'{self.user.username} - {self.deletion_date}' + return f'{self.user.username} - {self.deletion_marker_date} - {self.deletion_date} - {self.ldap_dn}' diff --git a/src/account_manager/views/user_views.py b/src/account_manager/views/user_views.py index fa7b068..fdf16fb 100644 --- a/src/account_manager/views/user_views.py +++ b/src/account_manager/views/user_views.py @@ -7,6 +7,7 @@ from django.contrib.auth.models import User from django.contrib.auth.views import PasswordResetConfirmView, PasswordChangeView from django.contrib.sites.shortcuts import get_current_site from django.core.exceptions import ObjectDoesNotExist +from django.db import IntegrityError from django.http import HttpRequest from django.shortcuts import render, redirect from django.utils.translation import gettext as _ @@ -454,14 +455,17 @@ def user_update_controller(request, realm, ldap_user, redirect_name, update_view def user_delete_controller(ldap_user, realm): LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' - user_groups = LdapGroup.objects.filter(members__contains=ldap_user.dn) - ldap_remove_user_from_groups(ldap_user.dn, user_groups) - ldap_user.delete() + # user_groups = LdapGroup.objects.filter(members__contains=ldap_user.dn) + # ldap_remove_user_from_groups(ldap_user.dn, user_groups) + # ldap_user.delete() try: django_user = User.objects.get(username=ldap_user.username) - django_user.delete() + # django_user.delete() # TODO user deletion cron - # DeletedUser.objects.create(user=django_user) + try: + DeletedUser.objects.create(user=django_user, ldap_dn=ldap_user.dn) + except IntegrityError as err: + pass except ObjectDoesNotExist: pass diff --git a/src/core/docker_settings.py b/src/core/docker_settings.py index 766defc..4fb276c 100644 --- a/src/core/docker_settings.py +++ b/src/core/docker_settings.py @@ -222,7 +222,7 @@ LOGGING = { }, 'django': { 'handlers': ['console'], - 'level': 'DEBUG', + 'level': 'WARNING', } }, }