def twitter_login_done(request): request_token = request.session.get('request_token', None) verifier = request.GET.get('oauth_verifier', None) denied = request.GET.get('denied', None) if denied: return render_error(request, 'Access denied') if not request_token: return render_error(request, 'No request token in session') token = oauth.OAuthToken.from_string(request_token) if token.key != request.GET.get('oauth_token', 'no-token'): del_dict_key(request.session, 'request_token') return render_error(request, 'Invalid request token') try: twitter = oauthtwitter.TwitterOAuthClient( settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) access_token = twitter.fetch_access_token(token, verifier) request.session['access_token'] = access_token.to_string() user = authenticate(twitter_access_token=access_token, request=request, user=request.user) login(request, user) except Exception, e: raise del_dict_key(request.session, 'access_token') del_dict_key(request.session, 'request_token') return render_error(request, 'System error: %s' % e)
def authenticate(self, twitter_access_token, user=None): '''authenticates the token by requesting user information from twitter''' # twitter = oauthtwitter.OAuthApi(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, twitter_access_token) twitter = oauthtwitter.TwitterOAuthClient( settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) try: userinfo = twitter.get_user_info(twitter_access_token) except: # If we cannot get the user information, user cannot be authenticated raise screen_name = userinfo.screen_name twitter_id = userinfo.id try: user_profile = TwitterUserProfile.objects.get( screen_name=screen_name) # Update Twitter Profile user_profile.url = userinfo.url user_profile.location = userinfo.location user_profile.description = userinfo.description user_profile.profile_image_url = userinfo.profile_image_url user_profile.save() user = user_profile.user return user except TwitterUserProfile.DoesNotExist: # Create new user if not user: same_name_count = User.objects.filter( username__startswith=screen_name).count() if same_name_count: username = '******' % (screen_name, same_name_count + 1) else: username = screen_name user = User(username=username) name_data = userinfo.name.split() try: first_name, last_name = name_data[0], ' '.join( name_data[1:]) except: first_name, last_name = screen_name, '' user.first_name, user.last_name = first_name, last_name #user.email = screen_name + "@socialauth" #user.email = '*****@*****.**'%(userinfo.screen_name) user.save() user_profile = TwitterUserProfile(user=user, screen_name=screen_name) user_profile.access_token = twitter_access_token user_profile.url = userinfo.url user_profile.location = userinfo.location user_profile.description = userinfo.description user_profile.profile_image_url = userinfo.profile_image_url user_profile.save() auth_meta = AuthMeta(user=user, provider='Twitter').save() return user
def twitter_login(request): twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) request_token = twitter.fetch_request_token() request.session['request_token'] = request_token.to_string() signin_url = twitter.authorize_token_url(request_token) return HttpResponseRedirect(signin_url)
def twitter_login(request): set_next(request) twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) request_token = twitter.fetch_request_token( callback=request.build_absolute_uri( reverse('socialauth_twitter_login_done'))) request.session['request_token'] = request_token.to_string() signin_url = twitter.authorize_token_url(request_token) return HttpResponseRedirect(signin_url)
def twitter_login_done(request): request_token = request.session.get('request_token', None) verifier = request.GET.get('oauth_verifier', None) denied = request.GET.get('denied', None) # If we've been denied, put them back to the signin page # They probably meant to sign in with facebook >:D if denied: return HttpResponseRedirect(reverse("socialauth_login_page")) # If there is no request_token for session, # Means we didn't redirect user to twitter if not request_token: # Redirect the user to the login page, return HttpResponseRedirect(reverse("socialauth_login_page")) token = oauth.OAuthToken.from_string(request_token) # If the token from session and token from twitter does not match # means something bad happened to tokens if token.key != request.GET.get('oauth_token', 'no-token'): del_dict_key(request.session, 'request_token') # Redirect the user to the login page return HttpResponseRedirect(reverse("socialauth_login_page")) try: twitter = oauthtwitter.TwitterOAuthClient( settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) access_token = twitter.fetch_access_token(token, verifier) request.session['access_token'] = access_token.to_string() user = authenticate(twitter_access_token=access_token) except: user = None # if user is authenticated then login user if user: login(request, user) update_passenger(request, user) else: # We were not able to authenticate user # Redirect to login page del_dict_key(request.session, 'access_token') del_dict_key(request.session, 'request_token') return HttpResponseRedirect(reverse('socialauth_login_page')) # authentication was successful, use is now logged in next = request.session.get('twitter_login_next', None) if next: del_dict_key(request.session, 'twitter_login_next') return HttpResponseRedirect(next) else: return HttpResponseRedirect(LOGIN_REDIRECT_URL)
def twitter_login(request, next=None): callback_url = None if next is not None: callback_url = '%s%s?next=%s' % \ (get_url_host(request), reverse("socialauth_twitter_login_done"), urlquote(next)) twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) request_token = twitter.fetch_request_token(callback_url) request.session['request_token'] = request_token.to_string() signin_url = twitter.authorize_token_url(request_token) return HttpResponseRedirect(signin_url)
def twitter_login_done(request): request_token = request.session.get('request_token', None) oauth_verifier = request.GET.get("oauth_verifier", None) # If there is no request_token for session, # Means we didn't redirect user to twitter if not request_token: # Redirect the user to the login page, # So the user can click on the sign-in with twitter button return HttpResponse("We didn't redirect you to twitter...") token = oauth.OAuthToken.from_string(request_token) # If the token from session and token from twitter does not match # means something bad happened to tokens if token.key != request.GET.get('oauth_token', 'no-token'): del request.session['request_token'] if request.GET.get('denied', None) is not None: messages.info(request, "Twitter authorization cancelled.") return redirect('profiles:account') messages.error(request, "Something wrong! Tokens do not match...") # Redirect the user to the login page return redirect('auth:login') twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) try: access_token = twitter.fetch_access_token(token, oauth_verifier) except URLError: messages.error(request, 'Problem connecting to Twitter. Try again.') return redirect('auth:login') request.session['access_token'] = access_token.to_string() user = authenticate(access_token=access_token) # if user is authenticated then login user if user: auth_login(request, user) else: # We were not able to authenticate user # Redirect to login page del request.session['access_token'] del request.session['request_token'] return HttpResponseRedirect(reverse('auth:login')) # authentication was successful, use is now logged in return HttpResponseRedirect( request.GET.get('next', settings.LOGIN_REDIRECT_URL))
def twitter_login_done(request): request_token = request.session.get('request_token', None) # If there is no request_token for session, # Means we didn't redirect user to twitter if not request_token: # Redirect the user to the login page, # So the user can click on the sign-in with twitter button return _show_login_page_and_add_error_message( request, "We didn't to comunicate to twitter. Please try again later.") token = oauth.OAuthToken.from_string(request_token) # If the token from session and token from twitter does not match # means something bad happened to tokens if token.key != request.GET.get('oauth_token', 'no-token'): del request.session['request_token'] # Redirect the user to the login page return _show_login_page_and_add_error_message( request, "Something wrong! Tokens do not match...") twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) access_token = twitter.fetch_access_token(token) request.session['access_token'] = access_token.to_string() user = authenticate(access_token=access_token) # if user is authenticated then login user if user: login(request, user) else: # We were not able to authenticate user # Redirect to login page del request.session['access_token'] del request.session['request_token'] return HttpResponseRedirect(reverse('socialauth_login_page')) # authentication was successful, use is now logged in if 'openid_next' in request.session: openid_next = request.session.get('openid_next') if len(openid_next.strip()) > 0: return HttpResponseRedirect(openid_next) return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
def twitter_login(request, next=None): callback_url = None next = request.GET.get('next', next) if next is not None: callback_url = '%s%s?next=%s' % \ (get_url_host(request), reverse("auth:twitter_login_done"), urlquote(next)) twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) try: request_token = twitter.fetch_request_token(callback_url) except URLError: messages.error(request, 'Problem with connect to Twitter. Try again.') return redirect('auth:login') request.session['request_token'] = request_token.to_string() signin_url = twitter.authorize_token_url(request_token) return HttpResponseRedirect(signin_url)
def twitter_login_done(request): request_token = request.session.get('request_token', None) oauth_verifier = request.GET.get("oauth_verifier", None) # If there is no request_token for session, # Means we didn't redirect user to twitter if not request_token: # Redirect the user to the login page, # So the user can click on the sign-in with twitter button return HttpResponse("We didn't redirect you to twitter...") token = oauth.OAuthToken.from_string(request_token) # If the token from session and token from twitter does not match # means something bad happened to tokens if token.key != request.GET.get('oauth_token', 'no-token'): del request.session['request_token'] # Redirect the user to the login page return HttpResponse("Something wrong! Tokens do not match...") twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) access_token = twitter.fetch_access_token(token, oauth_verifier) request.session['access_token'] = access_token.to_string() user = authenticate(access_token=access_token) # if user is authenticated then login user if user: if not user.userlanguage_set.exists(): langs = get_user_languages_from_cookie(request) for l in langs: UserLanguage.objects.get_or_create(user=user, language=l) login(request, user) else: # We were not able to authenticate user # Redirect to login page del request.session['access_token'] del request.session['request_token'] return HttpResponseRedirect(reverse('socialauth_login_page')) # authentication was successful, use is now logged in return HttpResponseRedirect( request.GET.get('next', settings.LOGIN_REDIRECT_URL))
def authenticate(self, twitter_access_token, request, user=None): twitter = oauthtwitter.TwitterOAuthClient( settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) try: userinfo = twitter.get_user_info(twitter_access_token) except: raise data = ProfileData() name_data = userinfo.name.split() data.username = userinfo.screen_name data.token = twitter_access_token try: data.first_name, data.last_name = name_data[0], ' '.join( name_data[1:]) except: data.first_name, data.last_name = data.username, '' return update_profile(request, "Twitter", userinfo.id, data).user
def twitter_login(request, next=None, confirmed=True, email=''): callback_url = None next = request.GET.get('next', next) if next is not None: callback_view = "thirdpartyaccounts:twitter_login_done" if not confirmed: callback_view += "_confirm" callback_url = '%s%s?next=%s&email=%s' % \ (get_url_host(request), reverse(callback_view), urlquote(next), urlquote(email)) twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) try: request_token = twitter.fetch_request_token(callback_url) except URLError: messages.error(request, 'Problem connecting to Twitter. Try again.') return redirect('auth:login') request.session['request_token'] = request_token.to_string() signin_url = twitter.authorize_token_url(request_token) return HttpResponseRedirect(signin_url)
def twitter_login_done(request): request_token = request.session.get('request_token', None) oauth_verifier = request.GET.get("oauth_verifier", None) # If there is no request_token for session, # Means we didn't redirect user to twitter if not request_token: # Redirect the user to the login page, # So the user can click on the sign-in with twitter button return HttpResponse("We didn't redirect you to twitter...") token = oauth.OAuthToken.from_string(request_token) # If the token from session and token from twitter does not match # means something bad happened to tokens if token.key != request.GET.get('oauth_token', 'no-token'): del request.session['request_token'] if request.GET.get('denied', None) is not None: messages.info(request, "Twitter authorization cancelled.") return redirect('profiles:account') messages.error(request, "Something wrong! Tokens do not match...") # Redirect the user to the login page return redirect('auth:login') twitter = oauthtwitter.TwitterOAuthClient(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) access_token = twitter.fetch_access_token(token, oauth_verifier) request.session['access_token'] = access_token.to_string() if request.session.get('no-login', False): # The user is trying to link a Twitter account to their Amara account. if not request.user.is_authenticated(): messages.error(request, 'You must be logged in.') return redirect('auth:login') try: from socialauth.lib.oauthtwitter import OAuthApi twitter = OAuthApi(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, access_token) userinfo = twitter.GetUserInfo() except Exception, e: # TODO: Raise something more useful here raise e username = userinfo.screen_name try: account = TwitterAccount.objects.get(username=username) if request.user.pk != account.user.pk: messages.error(request, 'Account already linked') return redirect('profiles:account') except TwitterAccount.DoesNotExist: TwitterAccount.objects.create( user=request.user, username=username, access_token=access_token.to_string()) del request.session['no-login'] messages.info(request, 'Successfully linked a Twitter account') return redirect('profiles:account')