gremmie@1: """Contains models for the accounts application""" gremmie@1: gremmie@1: import datetime gremmie@1: import random gremmie@1: import string gremmie@1: import hashlib gremmie@1: import base64 gremmie@1: gremmie@1: from django.db import models bgneal@259: from django.contrib.auth.models import User gremmie@1: from django.conf import settings gremmie@1: gremmie@1: gremmie@1: class IllegalUsername(models.Model): gremmie@1: """model to represent the list of illegal usernames""" bgneal@259: username = models.CharField(max_length=30, db_index=True) gremmie@1: gremmie@1: def __unicode__(self): gremmie@1: return self.username gremmie@1: gremmie@1: class Meta: gremmie@1: ordering = ('username', ) gremmie@1: gremmie@1: gremmie@1: class IllegalEmail(models.Model): gremmie@1: """model to represent the list of illegal/restricted email addresses""" bgneal@259: email = models.EmailField(db_index=True) gremmie@1: gremmie@1: def __unicode__(self): gremmie@1: return self.email gremmie@1: gremmie@1: class Meta: gremmie@1: ordering = ('email', ) gremmie@1: gremmie@1: gremmie@1: class PendingUserManager(models.Manager): gremmie@1: """user manager for PendingUser model""" gremmie@1: gremmie@1: create_count = 0 gremmie@1: gremmie@1: def create_pending_user(self, username, email, password): gremmie@1: '''creates a new pending user and saves it to the database''' gremmie@1: bgneal@259: temp_user = User() gremmie@1: temp_user.set_password(password) gremmie@1: gremmie@1: now = datetime.datetime.now() gremmie@1: pending_user = self.model(None, gremmie@1: username, gremmie@1: email, gremmie@1: temp_user.password, gremmie@1: now, gremmie@1: self._make_key()) gremmie@1: gremmie@1: pending_user.save() gremmie@1: self.create_count += 1 gremmie@1: return pending_user gremmie@1: gremmie@1: gremmie@1: def purge_expired(self): bgneal@259: expire_time = datetime.datetime.now() - datetime.timedelta(days=1) bgneal@259: expired_pending_users = self.filter(date_joined__lt=expire_time) gremmie@1: expired_pending_users.delete() gremmie@1: gremmie@1: gremmie@1: def _make_key(self): gremmie@1: s = ''.join(random.sample(string.printable, 8)) gremmie@1: delta = datetime.date.today() - datetime.date(1846, 12, 28) gremmie@1: days = base64.urlsafe_b64encode(str(delta * 10)) gremmie@1: key = hashlib.sha1(settings.SECRET_KEY + gremmie@1: unicode(self.create_count) + gremmie@1: unicode(s) + gremmie@1: unicode(days)).hexdigest()[::2] gremmie@1: return key gremmie@1: gremmie@1: gremmie@1: class PendingUser(models.Model): gremmie@1: """model for holding users while they go through the email registration cycle""" gremmie@1: bgneal@259: username = models.CharField(max_length=30, db_index=True) gremmie@1: email = models.EmailField() bgneal@259: password = models.CharField(max_length=128) bgneal@259: date_joined = models.DateTimeField(default=datetime.datetime.now, db_index=True) bgneal@259: key = models.CharField(max_length=20, editable=True) gremmie@1: gremmie@1: objects = PendingUserManager() gremmie@1: gremmie@1: def __unicode__(self): gremmie@1: return self.username gremmie@1: