annotate gpp/accounts/models.py @ 207:8bbefaa3e408

Fix #79; user should get security pin when reporting profiles.
author Brian Neal <bgneal@gmail.com>
date Mon, 03 May 2010 02:59:48 +0000
parents dbd703f7d63a
children 75ea1a8be7f2
rev   line source
gremmie@1 1 """Contains models for the accounts application"""
gremmie@1 2
gremmie@1 3 import datetime
gremmie@1 4 import random
gremmie@1 5 import string
gremmie@1 6 import hashlib
gremmie@1 7 import base64
gremmie@1 8
gremmie@1 9 from django.db import models
gremmie@1 10 from django.contrib import auth
gremmie@1 11 from django.conf import settings
gremmie@1 12
gremmie@1 13
gremmie@1 14 class IllegalUsername(models.Model):
gremmie@1 15 """model to represent the list of illegal usernames"""
gremmie@1 16 username = models.CharField(max_length = 30, db_index = True)
gremmie@1 17
gremmie@1 18 def __unicode__(self):
gremmie@1 19 return self.username
gremmie@1 20
gremmie@1 21 class Meta:
gremmie@1 22 ordering = ('username', )
gremmie@1 23
gremmie@1 24
gremmie@1 25 class IllegalEmail(models.Model):
gremmie@1 26 """model to represent the list of illegal/restricted email addresses"""
gremmie@1 27 email = models.EmailField(db_index = True)
gremmie@1 28
gremmie@1 29 def __unicode__(self):
gremmie@1 30 return self.email
gremmie@1 31
gremmie@1 32 class Meta:
gremmie@1 33 ordering = ('email', )
gremmie@1 34
gremmie@1 35
gremmie@1 36 class PendingUserManager(models.Manager):
gremmie@1 37 """user manager for PendingUser model"""
gremmie@1 38
gremmie@1 39 create_count = 0
gremmie@1 40
gremmie@1 41 def create_pending_user(self, username, email, password):
gremmie@1 42 '''creates a new pending user and saves it to the database'''
gremmie@1 43
gremmie@1 44 temp_user = auth.models.User()
gremmie@1 45 temp_user.set_password(password)
gremmie@1 46
gremmie@1 47 now = datetime.datetime.now()
gremmie@1 48 pending_user = self.model(None,
gremmie@1 49 username,
gremmie@1 50 email,
gremmie@1 51 temp_user.password,
gremmie@1 52 now,
gremmie@1 53 self._make_key())
gremmie@1 54
gremmie@1 55 pending_user.save()
gremmie@1 56 self.create_count += 1
gremmie@1 57 return pending_user
gremmie@1 58
gremmie@1 59
gremmie@1 60 def purge_expired(self):
gremmie@1 61 expire_time = datetime.datetime.now() - datetime.timedelta(days = 1)
gremmie@1 62 expired_pending_users = self.filter(date_joined__lt = expire_time)
gremmie@1 63 expired_pending_users.delete()
gremmie@1 64
gremmie@1 65
gremmie@1 66 def _make_key(self):
gremmie@1 67 s = ''.join(random.sample(string.printable, 8))
gremmie@1 68 delta = datetime.date.today() - datetime.date(1846, 12, 28)
gremmie@1 69 days = base64.urlsafe_b64encode(str(delta * 10))
gremmie@1 70 key = hashlib.sha1(settings.SECRET_KEY +
gremmie@1 71 unicode(self.create_count) +
gremmie@1 72 unicode(s) +
gremmie@1 73 unicode(days)).hexdigest()[::2]
gremmie@1 74 return key
gremmie@1 75
gremmie@1 76
gremmie@1 77 class PendingUser(models.Model):
gremmie@1 78 """model for holding users while they go through the email registration cycle"""
gremmie@1 79
gremmie@1 80 username = models.CharField(max_length = 30, db_index = True)
gremmie@1 81 email = models.EmailField()
gremmie@1 82 password = models.CharField(max_length = 128)
gremmie@1 83 date_joined = models.DateTimeField(default = datetime.datetime.now, db_index = True)
gremmie@1 84 key = models.CharField(max_length = 20, editable = True)
gremmie@1 85
gremmie@1 86 objects = PendingUserManager()
gremmie@1 87
gremmie@1 88 def __unicode__(self):
gremmie@1 89 return self.username
gremmie@1 90