From d97dae15b3ab8c352337b48aa16df8f0ccbc7e5e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mat=C3=ADas=20Aguirre?= Date: Thu, 14 Jul 2011 13:26:52 +0800 Subject: [PATCH] Refactor repeated code. Refs gh-102 --- social_auth/backends/__init__.py | 5 ++- social_auth/views.py | 63 ++++++++++++++++---------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/social_auth/backends/__init__.py b/social_auth/backends/__init__.py index 138c692..c59a03b 100644 --- a/social_auth/backends/__init__.py +++ b/social_auth/backends/__init__.py @@ -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 diff --git a/social_auth/views.py b/social_auth/views.py index 4526545..c90410c 100644 --- a/social_auth/views.py +++ b/social_auth/views.py @@ -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 -- 2.39.5