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'] user, created = User.objects.get_or_create(username=username.lower())
groups = obj['groups'] if created:
name = None user.set_unusable_password()
if obj.has_key('primarycharacter'): if 'email' in obj and obj['email'] != '':
name = obj['primarycharacter']['name'] user.email = obj['email']
valid = True if 'primarycharacter' in obj and 'name' in obj['primarycharacter']:
user.first_name = obj['primarycharacter']['name']
user.save()
if valid: if getattr(settings, 'TEST_AUTH_CREATE_GROUPS', False):
user, created = User.objects.get_or_create(username=username.lower()) user.groups.clear()
if created: for g in obj['groups']:
user.set_unusable_password() # disable login through Model backend group, created = Group.objects.get_or_create(name=g['name'])
if email: user.groups.add(group)
user.email = email
if name:
user.first_name = name
user.save()
if getattr(settings, 'TEST_AUTH_CREATE_GROUPS', False): return user
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
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