From b86b9e223f728b074ac8a1c476e46bbf9011198c Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Mon, 7 Jun 2010 17:58:09 +0100 Subject: [PATCH] Initial commit --- __init__.py | 0 auth.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 __init__.py create mode 100644 auth.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/auth.py b/auth.py new file mode 100644 index 0000000..1ac2f30 --- /dev/null +++ b/auth.py @@ -0,0 +1,45 @@ +import hashlib +from string import lower +import simplejson as json +from django.contrib.auth.models import User, check_password +import settings + +class DredditAuthBackend: + """ + Django authentication backend for authenticating against Dreddit's Auth System. + """ + def authenticate(self, username=None, password=None): + + valid = False + + if username and password: + # Call the webservice + api_url = 'https://auth.dredd.it/api/user/' + import urllib + import urllib2 + + params = { 'user': username } + raw = urllib2.urlopen('%s?%s' % (api_url, urllib.urlencode(params))) + + obj = json.loads(raw.read()) + + 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) + if created: + user.set_unusable_password() # disable login through Model backend + user.save() + if not email is None: + user.email = email + return user + return None + + def get_user(self, user_id): + try: + return User.objects.get(pk=user_id) + except User.DoesNotExist: + return None +