Ejemplo n.º 1
0
def connect_callback(provider):
    code = request.args.get("code")

    d = config.APIKEY_DICT.get(provider)
    login_service = None
    if provider == config.OPENID_DOUBAN:
        openid_type = config.OPENID_TYPE_DICT[config.OPENID_DOUBAN]
        login_service = DoubanLogin(d["key"], d["secret"], d["redirect_uri"])
    elif provider == config.OPENID_SINA:
        openid_type = config.OPENID_TYPE_DICT[config.OPENID_SINA]
        login_service = SinaLogin(d["key"], d["secret"], d["redirect_uri"])
    else:
        ## 处理以oauth1的方式授权的
        if provider == config.OPENID_QQ:
            user = _qqweibo_callback(request)

        elif provider == config.OPENID_TWITTER:
            user = _twitter_callback(request)

        if user:
            _add_sync_task_and_push_queue(provider, user)
            return redirect(url_for("index"))
        else:
            return "connect to %s fail" % provider

    try:
        token_dict = login_service.get_access_token(code)
    except OAuthLoginError, e:
        abort(401, e.msg)
Ejemplo n.º 2
0
    def get(self, url, extra_dict=None):
        uri = urlparse.urljoin(self.api_host, url)
        if extra_dict is None:
            extra_dict = {}
        extra_dict["alt"] = "json"

        if extra_dict:
            qs = urllib.urlencode(extra_dict)
            if "?" in uri:
                uri = "%s&%s" % (uri, qs)
            else:
                uri = "%s?%s" % (uri, qs)
        headers = {"Authorization": "Bearer %s" % self.access_token}     
        log.info('getting %s...' % uri)
        resp, content = httplib2_request(uri, "GET", headers=headers)
        if resp.status == 200:
            return content
        else:
            #TODO: 在这里如果access_token过期了需要refresh
            log.warn("get %s fail, status code=%s, msg=%s. go to refresh token" \
                    % (uri, resp.status, content))
            d = config.APIKEY_DICT.get(config.OPENID_DOUBAN)
            login_service = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
            try:
                login_service.update_tokens(self.refresh_token)
            except OAuthLoginError, e:
                log.warn("refresh token fail: %s" % e)
Ejemplo n.º 3
0
def connect_callback(provider):
    code = request.args.get("code")

    d = config.APIKEY_DICT.get(provider)
    login_service = None
    user = None

    if provider in [config.OPENID_DOUBAN, config.OPENID_SINA,]:
        if provider == config.OPENID_DOUBAN:
            openid_type = config.OPENID_TYPE_DICT[config.OPENID_DOUBAN]
            login_service = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
        elif provider == config.OPENID_SINA:
            openid_type = config.OPENID_TYPE_DICT[config.OPENID_SINA]
            login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])

        ## oauth2方式授权处理
        try:
            token_dict = login_service.get_access_token(code)
        except OAuthLoginError, e:
            abort(401, e.msg)

        if not ( token_dict and token_dict.get("access_token") ):
            abort(401, "no_access_token")
        try:
            user_info = login_service.get_user_info(
                token_dict.get("access_token"), token_dict.get("uid"))
        except OAuthLoginError, e:
            abort(401, e.msg)
Ejemplo n.º 4
0
    def get(self, url, extra_dict=None):
        uri = urlparse.urljoin(self.api_host, url)
        if extra_dict is None:
            extra_dict = {}
        extra_dict["alt"] = "json"

        if extra_dict:
            qs = urllib.urlencode(extra_dict)
            if "?" in uri:
                uri = "%s&%s" % (uri, qs)
            else:
                uri = "%s?%s" % (uri, qs)
        headers = {"Authorization": "Bearer %s" % self.access_token}
        log.info('getting %s...' % uri)
        resp, content = httplib2_request(uri, "GET", headers=headers)
        if resp.status == 200:
            return content
        else:
            #TODO: 在这里如果access_token过期了需要refresh
            log.warn("get %s fail, status code=%s, msg=%s. go to refresh token" \
                    % (uri, resp.status, content))
            d = config.APIKEY_DICT.get(config.OPENID_DOUBAN)
            login_service = DoubanLogin(d['key'], d['secret'],
                                        d['redirect_uri'])
            try:
                login_service.update_tokens(self.refresh_token)
            except OAuthLoginError, e:
                log.warn("refresh token fail: %s" % e)
Ejemplo n.º 5
0
def connect_callback(provider):
    code = request.args.get("code")

    d = config.APIKEY_DICT.get(provider)
    login_service = None
    user = None

    openid_type = config.OPENID_TYPE_DICT.get(provider)
    if not openid_type:
        abort(404, "not support such provider")

    if provider in [
            config.OPENID_DOUBAN,
            config.OPENID_SINA,
    ]:
        if provider == config.OPENID_DOUBAN:
            login_service = DoubanLogin(d['key'], d['secret'],
                                        d['redirect_uri'])
        elif provider == config.OPENID_SINA:
            login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])

        ## oauth2方式授权处理
        try:
            token_dict = login_service.get_access_token(code)
        except OAuthLoginError, e:
            abort(401, e.msg)

        if not (token_dict and token_dict.get("access_token")):
            abort(401, "no_access_token")
        try:
            user_info = login_service.get_user_info(
                token_dict.get("access_token"), token_dict.get("uid"))
        except OAuthLoginError, e:
            abort(401, e.msg)
Ejemplo n.º 6
0
def connect(provider):
    d = config.APIKEY_DICT.get(provider)
    login_service = None
    if provider == config.OPENID_DOUBAN:
        login_service = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_SINA:
        login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_TWITTER:
        login_service = TwitterOAuthLogin(d['key'], d['secret'], d['redirect_uri'])
    try:
        login_uri = login_service.get_login_uri()
    except OAuthLoginError, e:
        return "auth error:%s" % e
Ejemplo n.º 7
0
def connect(provider):
    #return "thepast.me 正在升级硬件,暂时不提供登录、注册功能,请谅解,有问题请邮件到 [email protected]"
    d = config.APIKEY_DICT.get(provider)
    login_service = None
    if provider == config.OPENID_DOUBAN:
        login_service = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_SINA:
        login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_QQ:
        login_service = QQOAuth1Login(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_TWITTER:
        login_service = TwitterOAuthLogin(d['key'], d['secret'], d['redirect_uri'])
    try:
        login_uri = login_service.get_login_uri()
    except OAuthLoginError, e:
        return "auth error:%s" % e
Ejemplo n.º 8
0
def connect(provider):
    #return "thepast.me 正在升级硬件,暂时不提供登录、注册功能,请谅解,有问题请邮件到 [email protected]"
    d = config.APIKEY_DICT.get(provider)
    login_service = None
    if provider == config.OPENID_DOUBAN:
        login_service = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_SINA:
        login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_QQ:
        login_service = QQOAuth1Login(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_TWITTER:
        login_service = TwitterOAuthLogin(d['key'], d['secret'],
                                          d['redirect_uri'])
    try:
        login_uri = login_service.get_login_uri()
    except OAuthLoginError, e:
        return "auth error:%s" % e
Ejemplo n.º 9
0
def connect_callback(provider):
    code = request.args.get("code")

    d = config.APIKEY_DICT.get(provider)
    login_service = None
    if provider == config.OPENID_DOUBAN:
        openid_type = config.OPENID_TYPE_DICT[config.OPENID_DOUBAN]
        login_service = DoubanLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_SINA:
        openid_type = config.OPENID_TYPE_DICT[config.OPENID_SINA]
        login_service = SinaLogin(d['key'], d['secret'], d['redirect_uri'])
    elif provider == config.OPENID_TWITTER:
        user = _twitter_callback(request)
        if user:
            _add_sync_task_and_push_queue(provider, user)
            return redirect(url_for('index'))
        else:
            return "connect fail"

    try:
        token_dict = login_service.get_access_token(code)
    except OAuthLoginError, e:
        abort(401, e.msg)