Mercurial > public > sg101
diff gpp/accounts/models.py @ 1:dbd703f7d63a
Initial import of sg101 stuff from private repository.
author | gremmie |
---|---|
date | Mon, 06 Apr 2009 02:43:12 +0000 |
parents | |
children | 75ea1a8be7f2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gpp/accounts/models.py Mon Apr 06 02:43:12 2009 +0000 @@ -0,0 +1,90 @@ +"""Contains models for the accounts application""" + +import datetime +import random +import string +import hashlib +import base64 + +from django.db import models +from django.contrib import auth +from django.conf import settings + + +class IllegalUsername(models.Model): + """model to represent the list of illegal usernames""" + username = models.CharField(max_length = 30, db_index = True) + + def __unicode__(self): + return self.username + + class Meta: + ordering = ('username', ) + + +class IllegalEmail(models.Model): + """model to represent the list of illegal/restricted email addresses""" + email = models.EmailField(db_index = True) + + def __unicode__(self): + return self.email + + class Meta: + ordering = ('email', ) + + +class PendingUserManager(models.Manager): + """user manager for PendingUser model""" + + create_count = 0 + + def create_pending_user(self, username, email, password): + '''creates a new pending user and saves it to the database''' + + temp_user = auth.models.User() + temp_user.set_password(password) + + now = datetime.datetime.now() + pending_user = self.model(None, + username, + email, + temp_user.password, + now, + self._make_key()) + + pending_user.save() + self.create_count += 1 + return pending_user + + + def purge_expired(self): + expire_time = datetime.datetime.now() - datetime.timedelta(days = 1) + expired_pending_users = self.filter(date_joined__lt = expire_time) + expired_pending_users.delete() + + + def _make_key(self): + s = ''.join(random.sample(string.printable, 8)) + delta = datetime.date.today() - datetime.date(1846, 12, 28) + days = base64.urlsafe_b64encode(str(delta * 10)) + key = hashlib.sha1(settings.SECRET_KEY + + unicode(self.create_count) + + unicode(s) + + unicode(days)).hexdigest()[::2] + return key + + +class PendingUser(models.Model): + """model for holding users while they go through the email registration cycle""" + + username = models.CharField(max_length = 30, db_index = True) + email = models.EmailField() + password = models.CharField(max_length = 128) + date_joined = models.DateTimeField(default = datetime.datetime.now, db_index = True) + key = models.CharField(max_length = 20, editable = True) + + objects = PendingUserManager() + + def __unicode__(self): + return self.username +