mirror of
https://github.com/nikdoof/django-testauth.git
synced 2025-12-15 13:42:15 +00:00
Simplfy the authentication code
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user