1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# -*- coding: utf-8 -*-
from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
import hashlib, random, sys, os, time
__all__ = ['Nonce', 'Association', 'UserAssociation',
'UserPasswordQueueManager', 'UserPasswordQueue']
class Nonce(models.Model):
""" openid nonce """
server_url = models.CharField(max_length=255)
timestamp = models.IntegerField()
salt = models.CharField(max_length=40)
def __unicode__(self):
return u"Nonce: %s" % self.id
class Association(models.Model):
""" association openid url and lifetime """
server_url = models.TextField(max_length=2047)
handle = models.CharField(max_length=255)
secret = models.TextField(max_length=255) # Stored base64 encoded
issued = models.IntegerField()
lifetime = models.IntegerField()
assoc_type = models.TextField(max_length=64)
def __unicode__(self):
return u"Association: %s, %s" % (self.server_url, self.handle)
class UserAssociation(models.Model):
"""
model to manage association between openid and user
"""
openid_url = models.CharField(blank=False, max_length=255)
user = models.ForeignKey(User, unique=True)
def __unicode__(self):
return "Openid %s with user %s" % (self.openid_url, self.user)
class UserPasswordQueueManager(models.Manager):
""" manager for UserPasswordQueue object """
def get_new_confirm_key(self):
"Returns key that isn't being used."
# The random module is seeded when this Apache child is created.
# Use SECRET_KEY as added salt.
while 1:
confirm_key = hashlib.md5("%s%s%s%s" % (
random.randint(0, sys.maxint - 1), os.getpid(),
time.time(), settings.SECRET_KEY)).hexdigest()
try:
self.get(confirm_key=confirm_key)
except self.model.DoesNotExist:
break
return confirm_key
class UserPasswordQueue(models.Model):
"""
model for new password queue.
"""
user = models.ForeignKey(User, unique=True)
new_password = models.CharField(max_length=30)
confirm_key = models.CharField(max_length=40)
objects = UserPasswordQueueManager()
def __unicode__(self):
return self.user.username
class ExternalLoginData(models.Model):
external_username = models.CharField(max_length=40, unique=True, null=False)
external_session_data = models.TextField()
user = models.ForeignKey(User, null=True)
|