]> git.parisson.com Git - django-social-auth.git/commitdiff
Pipeline call cleanups
authorMatías Aguirre <matiasaguirre@gmail.com>
Fri, 30 Dec 2011 17:56:53 +0000 (15:56 -0200)
committerMatías Aguirre <matiasaguirre@gmail.com>
Fri, 30 Dec 2011 17:56:53 +0000 (15:56 -0200)
social_auth/backends/__init__.py
social_auth/views.py

index 83713ca4eaf353d4da4f713958132a54a632acc3..50083885bb2a26ec097fad39bbf1254f46eed1b4 100644 (file)
@@ -105,46 +105,46 @@ class SocialAuthBackend(ModelBackend):
         response = kwargs.get('response')
         details = self.get_user_details(response)
         uid = self.get_user_id(details, response)
-        user = kwargs.get('user')
-        request = kwargs.get('request')
-
-        # Pipeline:
-        #   Arguments:
-        #       request, backend, social_user, uid, response, details
-        #       user, is_new, args, kwargs
-        kwargs = kwargs.copy()
-        kwargs.update({
-            'backend': self,
-            'request': request,
-            'uid': uid,
-            'user': user,
-            'social_user': None,
-            'response': response,
-            'details': details,
-            'is_new': False,
-        })
-        for name in PIPELINE:
+
+        out = self.pipeline(PIPELINE, backend=self, uid=uid,
+                            social_user=None, details=details,
+                            is_new=False, *args, **kwargs)
+        if not isinstance(out, dict):
+            return out
+
+        social_user = out.get('social_user')
+        if social_user:
+            # define user.social_user attribute to track current social
+            # account
+            user = social_user.user
+            user.social_user = social_user
+            user.is_new = kwargs.get('is_new')
+            return user
+
+    def pipeline(self, pipeline, request, *args, **kwargs):
+        """Pipeline"""
+        out = kwargs.copy()
+
+        for name in pipeline:
             mod_name, func_name = name.rsplit('.', 1)
             try:
                 mod = import_module(mod_name)
             except ImportError:
                 logger.exception('Error importing pipeline %s', name)
             else:
-                pipeline = getattr(mod, func_name, None)
-                if callable(pipeline):
+                func = getattr(mod, func_name, None)
+
+                if callable(func):
                     try:
-                        kwargs.update(pipeline(*args, **kwargs) or {})
+                        result = func(*args, **out) or {}
                     except StopPipeline:
                         break
 
-        social_user = kwargs.get('social_user')
-        if social_user:
-            # define user.social_user attribute to track current social
-            # account
-            user = social_user.user
-            user.social_user = social_user
-            user.is_new = kwargs.get('is_new')
-            return user
+                    if isinstance(result, dict):
+                        out.update(result)
+                    else:
+                        return result
+        return out
 
     def extra_data(self, user, uid, response, details):
         """Return default blank user extra data"""
index d1f049eea40c180d40e75c453744c012b1715f97..6367f1404e7e47ea6f6ea026f517b96f49d9ac25 100644 (file)
@@ -107,12 +107,16 @@ def associate(request, backend):
 @dsa_view()
 def associate_complete(request, backend, *args, **kwargs):
     """Authentication complete process"""
-    if auth_complete(request, backend, request.user, *args, **kwargs):
+    user = auth_complete(request, backend, request.user, *args, **kwargs)
+
+    if not user:
+        url = LOGIN_ERROR_URL
+    elif isinstance(user, HttpResponse):
+        return user
+    else:
         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)
 
 
@@ -191,5 +195,4 @@ def auth_complete(request, backend, user=None, *args, **kwargs):
     """Complete auth process. Return authenticated user or None."""
     if user and not user.is_authenticated():
         user = None
-    kwargs.update({'user': user, 'request': request})
-    return backend.auth_complete(*args, **kwargs)
+    return backend.auth_complete(user=user, request=request, *args, **kwargs)