Add new deleted user model, Add command to list deletable users
This commit is contained in:
parent
809c1d5f3e
commit
62ffd04fbd
0
src/account_helper/management/__init__.py
Normal file
0
src/account_helper/management/__init__.py
Normal file
0
src/account_helper/management/commands/__init__.py
Normal file
0
src/account_helper/management/commands/__init__.py
Normal file
38
src/account_helper/management/commands/deletable.py
Normal file
38
src/account_helper/management/commands/deletable.py
Normal 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))
|
||||||
@ -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}'
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -222,7 +222,7 @@ LOGGING = {
|
|||||||
},
|
},
|
||||||
'django': {
|
'django': {
|
||||||
'handlers': ['console'],
|
'handlers': ['console'],
|
||||||
'level': 'DEBUG',
|
'level': 'WARNING',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user