Esempio n. 1
0
def facebook_callback(request):
    """
    Una vez el usuario permise o no el acceso a su cuenta de Facebook esta vista revisa si concedio permisos o no
    En caso afirmativo busca a un usuario con ese id de Facebook para crear la sesion, de no existir crea al usuario
    """
    code = None if 'code' not in request.GET else request.GET['code']
    retorno = HttpResponseRedirect('/?error_facebook')
    try:
        if code is not None:
            args = dict(client_id=FACEBOOK["KEY"],
                        redirect_uri=FACEBOOK["CALLBACK"],
                        client_secret=FACEBOOK["SECRET"],
                        code=code)
            response = urlparse.parse_qs(
                urllib.urlopen(
                    "https://graph.facebook.com/oauth/access_token?%s" %
                    urllib.urlencode(args)).read())

            access_token = response["access_token"][-1]

            if access_token is not None:
                fb_user = json.load(
                    urllib.urlopen(
                        "https://graph.facebook.com/me?%s" %
                        urllib.urlencode(dict(access_token=access_token))))
                if 'id' in fb_user:
                    try:
                        cliente = Cliente.objects.get(
                            facebook_id=fb_user['id'])
                        cliente.login(request)
                    except Cliente.DoesNotExist:
                        cliente = Cliente(nombre_usuario="%s_fb" %
                                          (fb_user['username'] if 'username'
                                           in fb_user else fb_user['id']),
                                          facebook_id=fb_user['id'],
                                          facebook_accesstoken=access_token,
                                          facebook_code=code)
                        cliente.save()
                        cliente.login(request)
                        request.session['tipo'] = 'cliente'
                    retorno = HttpResponseRedirect('/app/')
    except:
        pass
    return retorno
Esempio n. 2
0
def twitter_callback(request):
    """
    Una vez el usuario permise o no el acceso a su cuenta de Twitter esta vista revisa si concedio permisos o no
    En caso afirmativo busca a un usuario con ese id de Twitter para crear la sesion, de no existir crea al usuario
    """
    retorno = HttpResponseRedirect('/')
    try:
        s = request.session['tw_rt']
        tokens = s.split('::')
        request_token = tokens[0]
        request_secret = tokens[1]

        if 'oauth_token' in request.GET and 'oauth_verifier' in request.GET:
            oauth_verifier = request.GET['oauth_verifier']
            oauth = tweepy.OAuthHandler(TWITTER['KEY'], TWITTER['SECRET'])
            oauth.set_request_token(request_token, request_secret)
            oauth.get_access_token(oauth_verifier)
            api = tweepy.API(oauth)
            tw_user = api.verify_credentials()
            try:
                cliente = Cliente.objects.get(twitter_id=tw_user.id)
                cliente.login(request)
            except Cliente.DoesNotExist:
                accesstoken = oauth.access_token.key
                secret = oauth.access_token.secret
                cliente = Cliente(nombre_usuario="%s_tc" % tw_user.screen_name,
                                  twitter_id=tw_user.id,
                                  twitter_accesstoken=accesstoken,
                                  twitter_secrettoken=secret)
                cliente.save()
                cliente.login(request)
            retorno = HttpResponseRedirect('/app/')
    except:
        retorno = HttpResponseRedirect('/?error_twitter')
    del request.session['tw_rt']
    return retorno