Add new deleted user model, Add command to list deletable users

This commit is contained in:
Götz 2019-05-15 17:40:55 +02:00
parent 809c1d5f3e
commit 62ffd04fbd
6 changed files with 57 additions and 8 deletions

View File

@ -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))

View File

@ -1,5 +1,6 @@
from django.contrib.auth.models import Group, User from django.contrib.auth.models import Group, User
from django.db import models from django.db import models
from django.utils import timezone
# Create your models here. # Create your models here.
@ -14,9 +15,15 @@ class Realm(models.Model):
return f'{self.name} - {self.ldap_base_dn}' return f'{self.name} - {self.ldap_base_dn}'
def get_deletion_time():
return timezone.now() + timezone.timedelta(+14)
class DeletedUser(models.Model): 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) 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): 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}'

View File

@ -7,6 +7,7 @@ from django.contrib.auth.models import User
from django.contrib.auth.views import PasswordResetConfirmView, PasswordChangeView from django.contrib.auth.views import PasswordResetConfirmView, PasswordChangeView
from django.contrib.sites.shortcuts import get_current_site from django.contrib.sites.shortcuts import get_current_site
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.db import IntegrityError
from django.http import HttpRequest from django.http import HttpRequest
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.utils.translation import gettext as _ 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): def user_delete_controller(ldap_user, realm):
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}' LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
user_groups = LdapGroup.objects.filter(members__contains=ldap_user.dn) # user_groups = LdapGroup.objects.filter(members__contains=ldap_user.dn)
ldap_remove_user_from_groups(ldap_user.dn, user_groups) # ldap_remove_user_from_groups(ldap_user.dn, user_groups)
ldap_user.delete() # ldap_user.delete()
try: try:
django_user = User.objects.get(username=ldap_user.username) django_user = User.objects.get(username=ldap_user.username)
django_user.delete() # django_user.delete()
# TODO user deletion cron # 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: except ObjectDoesNotExist:
pass pass

View File

@ -222,7 +222,7 @@ LOGGING = {
}, },
'django': { 'django': {
'handlers': ['console'], 'handlers': ['console'],
'level': 'DEBUG', 'level': 'WARNING',
} }
}, },
} }