]> git.parisson.com Git - django-social-auth.git/commitdiff
Refactor repeated code. Refs gh-102
authorMatías Aguirre <matiasaguirre@gmail.com>
Thu, 14 Jul 2011 05:26:52 +0000 (02:26 -0300)
committerMatías Aguirre <matiasaguirre@gmail.com>
Thu, 14 Jul 2011 05:26:52 +0000 (02:26 -0300)
social_auth/backends/__init__.py
social_auth/views.py

index 865c2d94498486c48e1b743da0eb6c341738235e..4b8fefc39c5f14cd7a85a354e4628c81bf17137c 100644 (file)
@@ -103,10 +103,11 @@ class SocialAuthBackend(ModelBackend):
         details = self.get_user_details(response)
         uid = self.get_user_id(details, response)
         is_new = False
+        user = kwargs.get('user')
+
         try:
             social_user = self.get_social_auth_user(uid)
         except UserSocialAuth.DoesNotExist:
-            user = kwargs.get('user')
             if user is None:  # new user
                 if not CREATE_USERS:
                     return None
@@ -134,7 +135,7 @@ class SocialAuthBackend(ModelBackend):
             # at this moment, merging account is not an option because that
             # would imply update user references on other apps, that's too
             # much intrusive
-            if 'user' in kwargs and kwargs['user'] != social_user.user:
+            if user and user != social_user.user:
                 raise ValueError('Account already in use.', social_user)
             user = social_user.user
 
index 4526545a530bf543725f2b500a7a3931f78a2bcf..c90410cd5f231726e0cb1343d8c8ebc9f771436d 100644 (file)
@@ -42,17 +42,7 @@ def complete(request, backend):
 
 def complete_process(request, backend):
     """Authentication complete process"""
-    backend = get_backend(backend, request, request.path)
-    if not backend:
-        return HttpResponseServerError('Incorrect authentication service')
-
-    try:
-        user = backend.auth_complete()
-    except ValueError, e:  # some Authentication error ocurred
-        user = None
-        error_key = getattr(settings, 'SOCIAL_AUTH_ERROR_KEY', None)
-        if error_key:  # store error in session
-            request.session[error_key] = str(e)
+    user = auth_complete(request, backend)
 
     if user and getattr(user, 'is_active', True):
         login(request, user)
@@ -67,14 +57,15 @@ def complete_process(request, backend):
             if social_user.expiration_delta():
                 request.session.set_expiry(social_user.expiration_delta())
 
-        # Remove URL possible redirect from session, if this is a new account,
-        # send him to the new-users-page if any.
-        url = request.session.pop(REDIRECT_FIELD_NAME, '') or DEFAULT_REDIRECT
-        if NEW_USER_REDIRECT and getattr(user, 'is_new', False):
-            url = NEW_USER_REDIRECT
-
         # store last login backend name in session
         request.session[SOCIAL_AUTH_LAST_LOGIN] = social_user.provider
+
+        # Remove possible redirect URL from session, if this is a new account,
+        # send him to the new-users-page if defined.
+        url = NEW_USER_REDIRECT if NEW_USER_REDIRECT and \
+                                   getattr(user, 'is_new', False) else \
+              request.session.pop(REDIRECT_FIELD_NAME, '') or \
+              DEFAULT_REDIRECT
     else:
         url = LOGIN_ERROR_URL
     return HttpResponseRedirect(url)
@@ -89,21 +80,12 @@ def associate(request, backend):
 @login_required
 def associate_complete(request, backend):
     """Authentication complete process"""
-    backend = get_backend(backend, request, request.path)
-    if not backend:
-        return HttpResponseServerError('Incorrect authentication service')
-        
-    try:
-        backend.auth_complete(user=request.user)
-    except ValueError, e:  # some Authentication error ocurred
-        user = None
-        error_key = getattr(settings, 'SOCIAL_AUTH_ERROR_KEY', None)
-        if error_key:  # store error in session
-            request.session[error_key] = str(e)
-    
-    url = request.session.pop(REDIRECT_FIELD_NAME, '') or DEFAULT_REDIRECT
-    if NEW_ASSOCIATION_REDIRECT:
-        url = NEW_ASSOCIATION_REDIRECT
+    if auth_complete(request, backend):
+        url = NEW_ASSOCIATION_REDIRECT if NEW_ASSOCIATION_REDIRECT else \
+              request.session.pop(REDIRECT_FIELD_NAME, '') or \
+              DEFAULT_REDIRECT
+    else:
+        url = LOGIN_ERROR_URL
 
     return HttpResponseRedirect(url)
 
@@ -142,3 +124,20 @@ def auth_process(request, backend, complete_url_name):
     else:
         return HttpResponse(backend.auth_html(),
                             content_type='text/html;charset=UTF-8')
+
+
+def auth_complete(request, backend):
+    """Complete auth process. Return authenticated user or None."""
+    backend = get_backend(backend, request, request.path)
+    if not backend:
+        return HttpResponseServerError('Incorrect authentication service')
+
+    user = request.user if request.user.is_authenticated() else None
+
+    try:
+        user = backend.auth_complete(user=user)
+    except ValueError, e:  # some Authentication error ocurred
+        error_key = getattr(settings, 'SOCIAL_AUTH_ERROR_KEY', None)
+        if error_key:  # store error in session
+            request.session[error_key] = str(e)
+    return user