コード例 #1
0
ファイル: views.py プロジェクト: kabirh/riotvine
def register(request, template='registration/registration_form.html', redirect_field_name='next'):
    if request.user.is_authenticated():
        prof = request.user_profile
        u = prof.user
        if prof.is_sso and prof.twitter_profile:
            # populate current open profile into session
            t = prof.twitter_profile
            # get profile image URL from Twitter
            profile_image = ''
            try:
                tw = TwitterAPI()
                twitter_profile = tw.get_profile(t.access_token)
                tw.close()
                if twitter_profile:
                    p = simplejson.loads(twitter_profile)
                    profile_image = p.get('profile_image_url', '')
                    if '/images/default_profile' in profile_image:
                        profile_image = ''
            except Exception, e:
                _log.exception(e)
                # continue without profile image
            open_profile = dict(
                profile_type=u'twitter',
                screen_name=t.screen_name,
                first_name=u.first_name,
                last_name=u.last_name,
                appuser_id=t.appuser_id,
                profile_image_url=profile_image,
                access_token=t.access_token
            )
            # logout(request)
            # request.user_profile = None
            request.session['OPEN_PROFILE'] = open_profile
        else:
            return HttpResponseRedirect(reverse('account'))
コード例 #2
0
def callback(request):
    """This is where Twitter will redirect the user after this app has been authorized."""
    try:
        unauthed_token = request.session.get('TWITTER_UNAUTH_TOKEN', None)
        oauth_verifier = request.GET.get('oauth_verifier', None)
        try:
            if unauthed_token:
                del request.session['TWITTER_UNAUTH_TOKEN']
        except KeyError:
            pass
        if not unauthed_token:
            _log.debug("Unauthenticated token not found in session")
            return _denied_response(request)
        token = oauth.OAuthToken.from_string(unauthed_token)
        oauth_token = request.GET.get('oauth_token', None)
        if token.key != oauth_token:
            _log.debug("Tokens did not match %s - %s", token.key, oauth_token)
            return _denied_response(request)
        tw = TwitterAPI()
        try:
            access_token = tw.exchange_request_token_for_access_token(token, oauth_verifier)
        except KeyError:
            tw.close()
            return _denied_response(request)
        twitter_profile = tw.get_profile(access_token)
        tw.close()
        if twitter_profile:
            _log.debug("Twitter profile downloaded:\n%s", twitter_profile)
            try:
                p = simplejson.loads(twitter_profile)
            except Exception, e:
                # try one more time
                try:
                    tw = TwitterAPI()
                    twitter_profile = tw.get_profile(access_token)
                    tw.close()
                    _log.debug("Twitter profile downloaded on retry:\n%s", twitter_profile)
                    if not twitter_profile:
                        raise Exception("OAuth error: retry failed on get_profile")
                    p = simplejson.loads(twitter_profile)
                except Exception, e:
                    _log.warn("Twitter profile could not be JSON decoded.\n%s", twitter_profile)
                    _log.exception(e)
                    add_message(request, u"We are unable to connect to Twitter at the moment. Please try again in a few minutes.")
                    return _denied_response(request)
            _log.debug(p)
            screen_name = p.get('screen_name')
            full_name = p.get('name', p['screen_name'])
            # Split full_name into first name and last name
            x = full_name.split(' ', 1)
            first_name, last_name = u'', u''
            if len(x) > 1:
                first_name, last_name = x[0], x[1]
            elif len(x) == 1:
                first_name, last_name = u'', x[0]
            profile_image = p.get('profile_image_url', '')
            if '/images/default_profile' in profile_image:
                profile_image = ''
            profile = dict(
                profile_type=u'twitter',
                screen_name=screen_name,
                first_name=first_name,
                last_name=last_name,
                appuser_id=p['id'],
                profile_image_url=profile_image,
                access_token=access_token.to_string()
            )
            if request.user.is_authenticated():
                user = request.user
                p = save_open_profile(user, profile)
                add_message(request, u"You've connected your Twitter account successfully.")
                # user.message_set.create(message=_(u"Thank you for authorizing us to update your Twitter status!"))
            else:
                request.session['OPEN_PROFILE'] = profile