Partial commit

This commit is contained in:
nikolark committed 2014-01-26 17:00:31 +01:00
1 parent 6ee8b13f04
commit 3600df6f16
3 files changed
+83 -42

No files matched your search

+2 -2
View File
@@ -28,8 +28,8 @@ class DuskenApi(object):
def authenticate(self, username='', password=''):
try:
self.oauth2_access_token = self.get_access_token(username, password, scope='write')
self.access_token = self.oauth2_access_token['access_token']
self.oauth2_access_token = self.get_access_token(username, password, scope='read+write')
self.access_token = self.oauth2_access_token
except requests.exceptions.HTTPError as e:
logging.error("Could not authenticate with API. Correct client_id, client_secret, username and password?\n{0}".format(e))
return None
+78 -39
View File
@@ -11,6 +11,8 @@ from models import DuskenAccessToken
class DuskenBackend(object):
"""
Django Authentication Backend
TODO: permission methods: get_group_permissions(), get_all_permissions(), has_perm(), and has_module_perms()
"""
def __init__(self):
@@ -29,6 +31,25 @@ class DuskenBackend(object):
except ValidationError as e:
return False
def _get_or_create_local_user(self, username):
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# if user does not exist, create a local user
user = User(username=username)
user.set_unusable_password()
user.save()
return user
def _refresh_access_token(self, user, access_token):
print "lol"
try:
d = DuskenAccessToken(user=user, **access_token)
d.save()
except Exception as e:
print e
def _sync_user_detail(self, user):
me = self._api.members.me()['objects'][0]
attrs = ['email', 'first_name', 'last_name']
@@ -36,48 +57,66 @@ class DuskenBackend(object):
user.save()
def authenticate(self, username=None, password=None):
# TODO you are here
# Check the username/password and return a User. Username can be an email
is_using_email = self._is_using_email(username)
try:
if is_using_email:
access_token = self._api.authenticate(email=username, password=password)
else:
access_token = self._api.authenticate(username=username, password=password)
if not access_token:
return None
try:
if is_using_email:
user = User.objects.get(email=username)
else:
user = User.objects.get(username=username)
try:
# Try refreshing access token
if user.duskenaccesstoken.access_token != access_token:
user.duskenaccesstoken.access_token = access_token=access_token
user.save()
except:
# ..create if not
d = DuskenAccessToken(access_token=access_token, user=user)
d.save()
except User.DoesNotExist:
# if user does not exist, create a local user
user = User(username=username)
user.set_unusable_password()
user.save()
DuskenAccessToken.objects.create(access_token=access_token['access_token'], user=user)
self._sync_user_detail(user)
return user
access_token = self._api.authenticate(username=username, password=password)
except HTTPError as e:
# Did not authenticate
pass
return None
return None
if not access_token:
return None
user = self._get_or_create_local_user(username)
self._refresh_access_token(user, access_token)
self._sync_user_detail(user)
return user
#def authenticate(self, username=None, password=None):
# # TODO you are here
# # Check the username/password and return a User. Username can be an email
# is_using_email = self._is_using_email(username)
# try:
# if is_using_email:
# access_token = self._api.authenticate(email=username, password=password)
# else:
# access_token = self._api.authenticate(username=username, password=password)
# if not access_token:
# return None
# try:
# if is_using_email:
# user = User.objects.get(email=username)
# else:
# user = User.objects.get(username=username)
# try:
# # Try refreshing access token
# if user.duskenaccesstoken.access_token != access_token:
# user.duskenaccesstoken.access_token = access_token=access_token
# user.save()
# except:
# # ..create if not
# d = DuskenAccessToken(access_token=access_token, user=user)
# d.save()
# except User.DoesNotExist:
# # if user does not exist, create a local user
# user = User(username=username)
# user.set_unusable_password()
# user.save()
# DuskenAccessToken.objects.create(access_token=access_token['access_token'], user=user)
# self._sync_user_detail(user)
# return user
# except HTTPError as e:
# # Did not authenticate
# pass
# return None
def get_user(self, user_id):
try:
+3 -1
View File
@@ -2,8 +2,10 @@ from django.db import models
from django.contrib.auth.models import User
class DuskenAccessToken(models.Model):
# TODO add refresh_token and expires
access_token = models.CharField(max_length=255)
refresh_token = models.CharField(max_length=255)
expires_in = models.IntegerField()
scope = models.CharField(max_length=255)
user = models.OneToOneField(User)
def __unicode__(self):