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