From 254d4a2cd66593ec3024656bb754874dfce9d4bd Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Tue, 8 Jun 2010 00:55:23 +0100 Subject: [PATCH] Various small fixes and also some basic tests for the auth framework --- auth.py | 32 +++++++++++++++++++++----------- tests.py | 10 ++++++++++ 2 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 tests.py diff --git a/auth.py b/auth.py index 1ac2f30..acfaf0b 100644 --- a/auth.py +++ b/auth.py @@ -1,8 +1,10 @@ import hashlib from string import lower import simplejson as json +import urllib +import urllib2 from django.contrib.auth.models import User, check_password -import settings +from settings import * class DredditAuthBackend: """ @@ -15,24 +17,32 @@ class DredditAuthBackend: if username and password: # Call the webservice api_url = 'https://auth.dredd.it/api/user/' - import urllib - import urllib2 + auth_handler = urllib2.HTTPBasicAuthHandler() + auth_handler.add_password(realm='dredditauth', + uri=api_url, + user=DREDDIT_API_USERNAME, + passwd=DREDDIT_API_PASSWORD) + opener = urllib2.build_opener(auth_handler) + urllib2.install_opener(opener) params = { 'user': username } - raw = urllib2.urlopen('%s?%s' % (api_url, urllib.urlencode(params))) + try: + raw = urllib2.urlopen('%s?%s' % (api_url, urllib.urlencode(params))) + except urllib2.HTTPError: + pass + else: + obj = json.loads(raw.read()) - obj = json.loads(raw.read()) - - if 'password' in obj and check_password(password, obj['password']): - email = obj['email'] - valid = True + if 'password' in obj and check_password(password, obj['password']): + email = obj['email'] + valid = True if valid: - user, created = User.objects.get_or_create(username=username) + user, created = User.objects.get_or_create(username=username.lower()) if created: user.set_unusable_password() # disable login through Model backend user.save() - if not email is None: + if email: user.email = email return user return None diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..50ea58f --- /dev/null +++ b/tests.py @@ -0,0 +1,10 @@ +from auth import DredditAuthBackend +import unittest + +class AuthLogin(unittest.TestCase): + def setUp(self): + self.auth = DredditAuthBackend() + + def testLogin(self): + self.assertEquals(self.auth.authenticate(username='invaliduser', password='asdasd'), None) + self.assertTrue(self.auth.authenticate(username='testuser', password='testtest'))