示例#1
0
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)
示例#2
0
    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
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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)
示例#7
0
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))
示例#8
0
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)
示例#9
0
文件: views.py 项目: crodjer/mirosubs
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)
示例#10
0
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))
示例#11
0
    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
示例#12
0
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)
示例#13
0
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')