2012-04-07 12:08:56 +00:00
|
|
|
import datetime
|
|
|
|
import urllib
|
|
|
|
|
2012-04-11 11:48:20 +00:00
|
|
|
import auth
|
2012-04-07 12:08:56 +00:00
|
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
|
|
from django.db import models
|
|
|
|
from django.db.models.manager import EmptyManager
|
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from django.utils.encoding import smart_str
|
|
|
|
from django.utils.hashcompat import md5_constructor, sha_constructor
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
|
|
|
|
|
|
|
|
UNUSABLE_PASSWORD = '!' # This will never be a valid hash
|
|
|
|
|
|
|
|
def get_hexdigest(algorithm, salt, raw_password):
|
|
|
|
"""
|
|
|
|
Returns a string of the hexdigest of the given plaintext password and salt
|
|
|
|
using the given algorithm ('md5', 'sha1' or 'crypt').
|
|
|
|
"""
|
|
|
|
raw_password, salt = smart_str(raw_password), smart_str(salt)
|
|
|
|
if algorithm == 'crypt':
|
|
|
|
try:
|
|
|
|
import crypt
|
|
|
|
except ImportError:
|
|
|
|
raise ValueError('"crypt" password algorithm not supported in this environment')
|
|
|
|
return crypt.crypt(raw_password, salt)
|
|
|
|
|
|
|
|
if algorithm == 'md5':
|
|
|
|
return md5_constructor(salt + raw_password).hexdigest()
|
|
|
|
elif algorithm == 'sha1':
|
|
|
|
return sha_constructor(salt + raw_password).hexdigest()
|
|
|
|
raise ValueError("Got unknown password algorithm type in password.")
|
|
|
|
|
|
|
|
def check_password(raw_password, enc_password):
|
|
|
|
"""
|
|
|
|
Returns a boolean of whether the raw_password was correct. Handles
|
|
|
|
encryption formats behind the scenes.
|
|
|
|
"""
|
|
|
|
algo, salt, hsh = enc_password.split('$')
|
|
|
|
return hsh == get_hexdigest(algo, salt, raw_password)
|
|
|
|
|
|
|
|
class SiteProfileNotAvailable(Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class AnonymousUser(object):
|
|
|
|
id = None
|
|
|
|
username = ''
|
|
|
|
is_staff = False
|
|
|
|
is_active = False
|
|
|
|
is_superuser = False
|
|
|
|
_groups = EmptyManager()
|
|
|
|
_user_permissions = EmptyManager()
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def __unicode__(self):
|
|
|
|
return 'AnonymousUser'
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return unicode(self).encode('utf-8')
|
|
|
|
|
|
|
|
def __eq__(self, other):
|
|
|
|
return isinstance(other, self.__class__)
|
|
|
|
|
|
|
|
def __ne__(self, other):
|
|
|
|
return not self.__eq__(other)
|
|
|
|
|
|
|
|
def __hash__(self):
|
|
|
|
return 1 # instances always return the same hash value
|
|
|
|
|
|
|
|
def save(self):
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
def delete(self):
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
def set_password(self, raw_password):
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
def check_password(self, raw_password):
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
def _get_groups(self):
|
|
|
|
return self._groups
|
|
|
|
groups = property(_get_groups)
|
|
|
|
|
|
|
|
def _get_user_permissions(self):
|
|
|
|
return self._user_permissions
|
|
|
|
user_permissions = property(_get_user_permissions)
|
|
|
|
|
|
|
|
def get_group_permissions(self, obj=None):
|
|
|
|
return set()
|
|
|
|
|
|
|
|
def get_all_permissions(self, obj=None):
|
|
|
|
return _user_get_all_permissions(self, obj=obj)
|
|
|
|
|
|
|
|
def has_perm(self, perm, obj=None):
|
|
|
|
return _user_has_perm(self, perm, obj=obj)
|
|
|
|
|
|
|
|
def has_perms(self, perm_list, obj=None):
|
|
|
|
for perm in perm_list:
|
|
|
|
if not self.has_perm(perm, obj):
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
def has_module_perms(self, module):
|
|
|
|
return _user_has_module_perms(self, module)
|
|
|
|
|
|
|
|
def get_and_delete_messages(self):
|
|
|
|
return []
|
|
|
|
|
|
|
|
def is_anonymous(self):
|
|
|
|
return True
|
|
|
|
|
|
|
|
def is_authenticated(self):
|
|
|
|
return False
|