diff --git a/main/models.py b/main/models.py index 4b291ae..b247c25 100644 --- a/main/models.py +++ b/main/models.py @@ -6,11 +6,11 @@ class TempUserLog(models.Model): description = models.TextField(max_length=255) expires = models.DateTimeField() count = models.IntegerField() - deleted = models.BooleanField(default=False) created = models.DateTimeField(auto_now_add=True) class UserPass(models.Model): - username = models.CharField(max_length=50) + username = models.CharField(max_length=50, unique=True) password = models.CharField(max_length=50) + radcheck_id = models.PositiveIntegerField(unique=True, null=False) log = models.ForeignKey(TempUserLog) diff --git a/main/views.py b/main/views.py index 4987cb1..a7f7682 100644 --- a/main/views.py +++ b/main/views.py @@ -44,20 +44,28 @@ def new(request): if form.is_valid(): duration = datetime.timedelta(days=form.cleaned_data['duration']) expires = datetime.datetime.now() + duration - log = TempUserLog( + log = TempUserLog.objects.create( description=form.cleaned_data['description'], expires=expires, issued_by=request.user, count=form.cleaned_data['count']) - log.save() for i in range(form.cleaned_data['count']): - up = UserPass.objects.create( - username=utils.generate_username(), - password=utils.generate_password(), + username = utils.generate_username() + raw_password = utils.generate_password() + # Store in Radius + rc = Radcheck.objects.create( + username=username, + attribute='NT-Password', + op=':=', + value=utils.ntpass_hash(raw_password)) + # store raw_password + UserPass.objects.create( + username=username, + password=raw_password, + radcheck_id=rc.id, log=log) messages.success(request, log.id) # Store the id in session, since we are redirecting - - messages.success(request, save_to_radius(log)) # Store in Radius + messages.success(request, 'Successfully created user(s) in radius database.') return HttpResponseRedirect( reverse('main.views.new_created') ) else: form = TempUserForm(request.POST) @@ -93,13 +101,3 @@ def download_pdf(request, tempuserlog_id=-1): 'log': log, } ) - -def save_to_radius(log): - for up in log.userpass_set.all(): - Radcheck.objects.create( - username=up.username, - attribute='NT-Password', - op=':=', - value=utils.ntpass_hash(up.password)) - return 'Successfully created user(s) in radius database.' - diff --git a/radius/models.py b/radius/models.py index ca4cc3d..61d4dd2 100644 --- a/radius/models.py +++ b/radius/models.py @@ -103,15 +103,3 @@ class Radusergroup(models.Model): class Meta: db_table = u'radusergroup' - -class TempUser(models.Model): - connection_name = 'radius' - - # TODO : date? who? why? - radcheckId = models.ForeignKey(Radcheck) - created = models.DateTimeField(auto_now_add=True, null=True) - deleteOn = models.DateTimeField( null=True) - - class Meta: - db_table = u'radusergroup' - diff --git a/scripts/delete_expired.py b/scripts/delete_expired.py index 7965908..f5d807a 100755 --- a/scripts/delete_expired.py +++ b/scripts/delete_expired.py @@ -16,10 +16,5 @@ setup_environ(settings) from main.models import * from radius.models import * -logs = TempUserLog.objects.filter(expires__lt=datetime.now(), deleted=False) - -for log in logs: - for up in log.userpass_set.all(): - Radcheck.objects.filter(username=up.username).delete() - log.deleted = True - log.save() +up_ids = UserPass.objects.filter(log__expires__lte=datetime.now()).values_list('radcheck_id', flat=True) +Radcheck.objects.filter(id__in=list(up_ids)).delete()