Simplfy the authentication code

This commit is contained in:
2012-10-20 00:45:12 +01:00
parent 26a0a1ec4a
commit 8b7684ddee

View File

@@ -1,10 +1,9 @@
from string import lower
import django.utils.simplejson as json
import urllib
import urllib2
from hashlib import sha1
from django.conf import settings
from django.contrib.auth.models import User, check_password, Group
from django.contrib.auth.models import User, Group
class TESTAuthBackend:
@@ -13,49 +12,36 @@ class TESTAuthBackend:
"""
def authenticate(self, username=None, password=None):
valid = False
if username and password:
# Call the webservice
api_url = getattr(settings, 'TEST_AUTH_LOGIN_URL', 'https://auth.pleaseignore.com/api/1.0/login/')
params = { 'user': username, 'pass': sha1(password).hexdigest() }
params = {'user': username, 'pass': sha1(password).hexdigest()}
try:
raw = urllib2.urlopen('%s?%s' % (api_url, urllib.urlencode(params)))
except urllib2.HTTPError:
pass
return
else:
obj = json.loads(raw.read())
if 'auth' in obj and obj['auth'] == 'ok':
email = obj['email']
groups = obj['groups']
name = None
if obj.has_key('primarycharacter'):
name = obj['primarycharacter']['name']
valid = True
user, created = User.objects.get_or_create(username=username.lower())
if created:
user.set_unusable_password()
if 'email' in obj and obj['email'] != '':
user.email = obj['email']
if 'primarycharacter' in obj and 'name' in obj['primarycharacter']:
user.first_name = obj['primarycharacter']['name']
user.save()
if valid:
user, created = User.objects.get_or_create(username=username.lower())
if created:
user.set_unusable_password() # disable login through Model backend
if email:
user.email = email
if name:
user.first_name = name
user.save()
if getattr(settings, 'TEST_AUTH_CREATE_GROUPS', False):
user.groups.clear()
for g in obj['groups']:
group, created = Group.objects.get_or_create(name=g['name'])
user.groups.add(group)
if getattr(settings, 'TEST_AUTH_CREATE_GROUPS', False):
user.groups.clear()
for g in groups:
group, created = Group.objects.get_or_create(name=g['name'])
user.groups.add(group)
return user
return None
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
return