from django.db.utils import IntegrityError
from social_auth.utils import setting
-from social_auth.models import UserSocialAuth
+from social_auth.models import create_social_auth
+from social_auth.models import get_social_auth
from social_auth.backends.pipeline import warn_setting
from social_auth.backends.exceptions import AuthException
from django.utils.translation import ugettext
Raise AuthException if UserSocialAuth entry belongs to another user.
"""
- try:
- social_user = UserSocialAuth.select_related()\
- .get(provider=backend.name,
- uid=uid)
- except UserSocialAuth.DoesNotExist:
- social_user = None
-
+ social_user = get_social_auth(backend.name, uid)
if social_user:
if user and social_user.user != user:
raise AuthException(backend,
return None
try:
- if type(uid) is not str:
- uid = str(uid)
- social = UserSocialAuth.objects.create(user=user, uid=uid,
- provider=backend.name)
+ social = create_social_auth(user, uid, backend.name)
except IntegrityError:
# Protect for possible race condition, those bastard with FTL
# clicking capabilities, check issue #131:
return User.objects.get(pk=user_or_id)
+def get_social_auth(provider, uid):
+ try:
+ return UserSocialAuth.objects.select_related('user').get(
+ provider=provider, uid=uid)
+ except UserSocialAuth.DoesNotExist:
+ return None
+
+
def get_social_auth_for_user(user):
return user.social_auth.all()
+def create_social_auth(user, uid, provider):
+ return UserSocialAuth.objects.create(user=user, uid=uid, provider=provider)
+
+
class UserSocialAuth(models.Model):
"""Social Auth association model"""
user = models.ForeignKey(User, related_name='social_auth')
pass
return None
- @classmethod
- def select_related(cls):
- return cls.objects.select_related('user')
-
class Nonce(models.Model):
"""One use numbers"""
return User.objects.get(pk=user_or_id)
+def get_social_auth(provider, uid):
+ try:
+ return UserSocialAuth.objects.get(provider=provider, uid=uid)
+ except UserSocialAuth.DoesNotExist:
+ return None
+
+
def get_social_auth_for_user(user):
return UserSocialAuth.objects(user=user)
+def create_social_auth(user, uid, provider):
+ if type(uid) is not str:
+ uid = str(uid)
+ return UserSocialAuth.objects.create(user=user, uid=uid, provider=provider)
+
+
class UserSocialAuth(Document):
"""Social Auth association model"""
user = ReferenceField(User)
"""Return associated user unicode representation"""
return u'%s - %s' % (unicode(self.user), self.provider)
- @classmethod
- def select_related(cls):
- return cls.objects #.select_related() No 'user', only provie a depth parameter
-
@property
def tokens(self):
"""Return access_token stored in extra_data or None"""