Ejemplo n.º 1
0
    def get_token(self, code):
        """ Get live access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token and uid
        """

        # live need post a form to get token
        headers = {'Content-type': 'application/x-www-form-urlencoded'}
        data = {
            'client_id': get_config('login.live.client_id'),
            'client_secret': get_config('login.live.client_secret'),
            'redirect_uri': get_config('login.live.redirect_uri'),
            'grant_type': 'authorization_code',
            'code': code
        }
        # Following is use urllib to post request
        url = get_config('login.live.access_token_url')
        r = requests.post(url, data=data, headers=headers)
        resp = r.json()

        if resp.get("error") is not None:
            raise Exception(resp)

        return resp["access_token"]
Ejemplo n.º 2
0
    def get_token(self, code):
        """ Get live access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token and uid
        """

        # live need post a form to get token
        headers = {"Content-type": "application/x-www-form-urlencoded"}
        data = {
            "client_id": get_config("login.live.client_id"),
            "client_secret": get_config("login.live.client_secret"),
            "redirect_uri": get_config("login.live.redirect_uri"),
            "grant_type": "authorization_code",
            "code": code,
        }
        # Following is use urllib to post request
        url = get_config("login.live.access_token_url")
        r = requests.post(url, data=data, headers=headers)
        resp = r.json()

        if resp.get("error") is not None:
            raise Exception(resp)

        return resp["access_token"]
Ejemplo n.º 3
0
    def get_token(self, code):
        """ Get live access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token and uid
        """

        # live need post a form to get token
        headers = {'Content-type': 'application/x-www-form-urlencoded'}
        data = {
            'client_id': get_config('login.live.client_id'),
            'client_secret': get_config('login.live.client_secret'),
            'redirect_uri': get_config('login.live.redirect_uri'),
            'grant_type': 'authorization_code',
            'code': code
        }
        # Following is use urllib to post request
        url = get_config('login.live.access_token_url')
        r = requests.post(url, data=data, headers=headers)
        resp = r.json()

        if resp.get("error") is not None:
            raise Exception(resp)

        return resp["access_token"]
Ejemplo n.º 4
0
def __oauth_api_key():
    return {
        LOGIN_PROVIDER.WEIBO: get_config("login.weibo.client_id"),
        LOGIN_PROVIDER.QQ: get_config("login.qq.client_id"),
        LOGIN_PROVIDER.LIVE: get_config("login.live.client_id"),
        LOGIN_PROVIDER.GITCAFE: get_config("login.gitcafe.client_id"),
        LOGIN_PROVIDER.GITHUB: get_config("login.github.client_id"),
    }
Ejemplo n.º 5
0
def __oauth_api_key():
    return {
        LOGIN_PROVIDER.WEIBO: get_config('login.weibo.client_id'),
        LOGIN_PROVIDER.QQ: get_config('login.qq.client_id'),
        LOGIN_PROVIDER.LIVE: get_config('login.live.client_id'),
        LOGIN_PROVIDER.WECHAT: get_config("login.wechat.client_id"),
        LOGIN_PROVIDER.GITHUB: get_config('login.github.client_id')
    }
Ejemplo n.º 6
0
    def login(self, args):
        code = args.get('code')
        if not code:
            return None

        log.info('login from alauda, code = ' + code)

        # basic auth header, content_type and post data
        client_id = get_config("login.alauda.client_id")
        client_secret = get_config("login.alauda.client_secret")
        basic_auth = HTTPBasicAuth(client_id, client_secret)

        headers = {'Content-type': 'application/x-www-form-urlencoded'}
        data = {
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_uri': get_config('login.alauda.redirect_uri'),
            'client_id': client_id
        }

        # Post request
        url = get_config('login.alauda.access_token_url')
        r = requests.post(url, data=data, headers=headers, auth=basic_auth)
        resp = r.json()

        # {u'username': u'junbowang', u'realname': u'junbowang', u'success': True,
        # u'access_token': u'3MyZLF8RVo5X8lDLZQSj5s4OpIGQGn', u'token_type': u'Bearer',
        # u'logo_file': u'/static/images/user/default-logo.png', u'email': u'*****@*****.**'}
        if not resp.get("success"):
            log.debug("get access token failed from alauda: %r" % resp)
            return None

        # username will used as openid too since its unique. And also it's the 'namespace' for user's alauda resource
        username = resp["username"]
        email = resp["email"]
        email_list = [
            {
                'name': username,
                'email': email,
                'verified': 1,
                'primary': 1
            }
        ]

        user_with_token = user_manager.oauth_db_login(username,
                                                      provider=LOGIN_PROVIDER.ALAUDA,
                                                      name=username,
                                                      nickname=resp.get("realname", username),
                                                      access_token=resp["access_token"],
                                                      email_list=email_list,
                                                      avatar_url=resp.get("logo_file"))

        # for oxford only
        self.oxford(user_with_token["user"], resp.get("oxford_api"))

        return user_with_token
Ejemplo n.º 7
0
    def login(self, args):
        code = args.get('code')
        if not code:
            return None

        log.info('login from alauda, code = ' + code)

        # basic auth header, content_type and post data
        client_id = get_config("login.alauda.client_id")
        client_secret = get_config("login.alauda.client_secret")
        basic_auth = HTTPBasicAuth(client_id, client_secret)

        headers = {'Content-type': 'application/x-www-form-urlencoded'}
        data = {
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_uri': get_config('login.alauda.redirect_uri'),
            'client_id': client_id
        }

        # Post request
        url = get_config('login.alauda.access_token_url')
        r = requests.post(url, data=data, headers=headers, auth=basic_auth)
        resp = r.json()

        # {u'username': u'junbowang', u'realname': u'junbowang', u'success': True,
        # u'access_token': u'3MyZLF8RVo5X8lDLZQSj5s4OpIGQGn', u'token_type': u'Bearer',
        # u'logo_file': u'/static/images/user/default-logo.png', u'email': u'*****@*****.**'}
        if not resp.get("success"):
            log.debug("get access token failed from alauda: %r" % resp)
            return None

        # username will used as openid too since its unique. And also it's the 'namespace' for user's alauda resource
        username = resp["username"]
        email = resp["email"]
        email_list = [
            {
                'name': username,
                'email': email,
                'verified': 1,
                'primary': 1
            }
        ]

        required_info = {
            "openid": username,
            "provider": LOGIN_PROVIDER.ALAUDA,
            "name": username,
            "nickname": resp.get("realname", username),
            "access_token": resp["access_token"],
            "email_list": email_list,
            "avatar_url": resp.get("logo_file"),
            "oxford_api": resp.get("oxford_api")
        }

        return required_info
Ejemplo n.º 8
0
    def login(self, args):
        code = args.get("code")
        if not code:
            return None

        log.info("login from alauda, code = " + code)

        # basic auth header, content_type and post data
        client_id = get_config("login.alauda.client_id")
        client_secret = get_config("login.alauda.client_secret")
        basic_auth = HTTPBasicAuth(client_id, client_secret)

        headers = {"Content-type": "application/x-www-form-urlencoded"}
        data = {
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": get_config("login.alauda.redirect_uri"),
            "client_id": client_id,
        }

        # Post request
        url = get_config("login.alauda.access_token_url")
        r = requests.post(url, data=data, headers=headers, auth=basic_auth)
        resp = r.json()

        # {u'username': u'junbowang', u'realname': u'junbowang', u'success': True,
        # u'access_token': u'3MyZLF8RVo5X8lDLZQSj5s4OpIGQGn', u'token_type': u'Bearer',
        # u'logo_file': u'/static/images/user/default-logo.png', u'email': u'*****@*****.**'}
        if not resp.get("success"):
            log.debug("get access token failed from alauda: %r" % resp)
            return None

        # username will used as openid too since its unique. And also it's the 'namespace' for user's alauda resource
        username = resp["username"]
        email = resp["email"]
        email_list = [{"name": username, "email": email, "verified": 1, "primary": 1}]

        required_info = {
            "openid": username,
            "provider": LOGIN_PROVIDER.ALAUDA,
            "name": username,
            "nickname": resp.get("realname", username),
            "access_token": resp["access_token"],
            "email_list": email_list,
            "avatar_url": resp.get("logo_file"),
            "oxford_api": resp.get("oxford_api"),
        }

        return required_info
Ejemplo n.º 9
0
    def get_user_info(self, token, uid):
        """Get weibo user info

        :type token: str
        :param token:

        :type uid: str
        :param uid:

        :rtype: dict
        :return:
            {"id":2330622122,"idstr":"2330622122","class":1,"screen_name":"test name","name":"test name",
            "province":"31","city":"10","location":"shanghai yangpu","description":"","url":"",
            "profile_image_url":"http://tp3.sinaimg.cn/2330622122/50/5629035320/1",
            "profile_url":"u/2330622122","domain":"","weihao":"","gender":"m","followers_count":34,
            "friends_count":42,"pagefriends_count":0,"statuses_count":0,"favourites_count":1,
            "created_at":"Mon Aug 22 17:58:15 +0800 2011","following":false,"allow_all_act_msg":false,
            "geo_enabled":true,"verified":false,"verified_type":-1,"remark":"","ptype":0,"allow_all_comment":true,
            "avatar_large":"http://tp3.sinaimg.cn/2330622122/180/5629035320/1","avatar_hd":"http://tp3.sinaimg.cn/2330622122/180/5629035320/1",
            "verified_reason":"","verified_trade":"","verified_reason_url":"","verified_source":"","verified_source_url":"",
            "follow_me":false,"online_status":0,"bi_followers_count":8,"lang":"zh-cn","star":0,"mbtype":0,"mbrank":0,
            "block_word":0,"block_app":0,"credit_score":80,"urank":6}
        """

        # https://api.weibo.com/2/users/show.json?access_token=2.005RDjXC0rYD8d39ca83156aLZWgZE&uid=1404376560
        user_info_resp = get_remote(
            get_config('login.weibo.user_info_url') + token + "&uid=" + uid)

        user_info = json.loads(user_info_resp)

        if user_info.get("error") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 10
0
    def get_user_info(self, token):
        """Get qq user info

        :type token: str
        :param token:

        :rtype: dict
        :return:
            "url":"https://api.github.com/users/juniwang","html_url":"https://github.com/juniwang",
            "followers_url":"https://api.github.com/users/juniwang/followers",        log.debug("get admin user info from " + provider + " : "  + user_info_resp + '\n' )

            "following_url":"https://api.github.com/users/juniwang/following{/other_user}",
            "starred_url":"https://api.github.com/users/juniwang/starred{/owner}{/repo}",
            "gists_url":"https://api.github.com/users/juniwang/gists{/gist_id}",
            "events_url":"https://api.github.com/users/juniwang/events{/privacy}",
            {"login":"******","id":8814383,"avatar_url":"https://avatars.githubusercontent.com/u/8814383?v=3","gravatar_id":"",
            "subscriptions_url":"https://api.github.com/users/juniwang/subscriptions",
            "received_events_url":"https://api.github.com/users/juniwang/received_events","type":"User","site_admin":false,
            "name":"Junbo Wang","company":"","blog":"","location":"Shanghai China",
            "organizations_url":"https://api.github.com/users/juniwang/orgs","repos_url":"https://api.github.com/users/juniwang/repos",

            "email":"*****@*****.**","hireable":false,"bio":null,"public_repos":12,"public_gists":0,"followers":0,
            "following":1,"created_at":"2014-09-18T01:30:30Z","updated_at":"2014-11-25T09:00:37Z","private_gists":0,
            "plan":{"name":"free","space":307200,"collaborators":0,"private_repos":0}}
            "total_private_repos":0,"owned_private_repos":0,"disk_usage":14179,"collaborators":0,

        """
        user_info_resp = get_remote(get_config('login.github.user_info_url') + token)

        user_info = json.loads(user_info_resp)
        if user_info.get("message") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 11
0
    def get_user_info(self, token, uid):
        """Get weibo user info

        :type token: str
        :param token:

        :type uid: str
        :param uid:

        :rtype: dict
        :return:
            {"id":2330622122,"idstr":"2330622122","class":1,"screen_name":"test name","name":"test name",
            "province":"31","city":"10","location":"shanghai yangpu","description":"","url":"",
            "profile_image_url":"http://tp3.sinaimg.cn/2330622122/50/5629035320/1",
            "profile_url":"u/2330622122","domain":"","weihao":"","gender":"m","followers_count":34,
            "friends_count":42,"pagefriends_count":0,"statuses_count":0,"favourites_count":1,
            "created_at":"Mon Aug 22 17:58:15 +0800 2011","following":false,"allow_all_act_msg":false,
            "geo_enabled":true,"verified":false,"verified_type":-1,"remark":"","ptype":0,"allow_all_comment":true,
            "avatar_large":"http://tp3.sinaimg.cn/2330622122/180/5629035320/1","avatar_hd":"http://tp3.sinaimg.cn/2330622122/180/5629035320/1",
            "verified_reason":"","verified_trade":"","verified_reason_url":"","verified_source":"","verified_source_url":"",
            "follow_me":false,"online_status":0,"bi_followers_count":8,"lang":"zh-cn","star":0,"mbtype":0,"mbrank":0,
            "block_word":0,"block_app":0,"credit_score":80,"urank":6}
        """

        # https://api.weibo.com/2/users/show.json?access_token=2.005RDjXC0rYD8d39ca83156aLZWgZE&uid=1404376560
        user_info_resp = get_remote(get_config('login.weibo.user_info_url') + token + "&uid=" + uid)

        user_info = json.loads(user_info_resp)

        if user_info.get("error") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 12
0
    def get_user_info(self, token):
        """Get qq user info

        :type token: str
        :param token:

        :rtype: dict
        :return:
            "url":"https://api.github.com/users/juniwang","html_url":"https://github.com/juniwang",
            "followers_url":"https://api.github.com/users/juniwang/followers",        log.debug("get admin user info from " + provider + " : "  + user_info_resp + '\n' )

            "following_url":"https://api.github.com/users/juniwang/following{/other_user}",
            "starred_url":"https://api.github.com/users/juniwang/starred{/owner}{/repo}",
            "gists_url":"https://api.github.com/users/juniwang/gists{/gist_id}",
            "events_url":"https://api.github.com/users/juniwang/events{/privacy}",
            {"login":"******","id":8814383,"avatar_url":"https://avatars.githubusercontent.com/u/8814383?v=3","gravatar_id":"",
            "subscriptions_url":"https://api.github.com/users/juniwang/subscriptions",
            "received_events_url":"https://api.github.com/users/juniwang/received_events","type":"User","site_admin":false,
            "name":"Junbo Wang","company":"","blog":"","location":"Shanghai China",
            "organizations_url":"https://api.github.com/users/juniwang/orgs","repos_url":"https://api.github.com/users/juniwang/repos",

            "email":"*****@*****.**","hireable":false,"bio":null,"public_repos":12,"public_gists":0,"followers":0,
            "following":1,"created_at":"2014-09-18T01:30:30Z","updated_at":"2014-11-25T09:00:37Z","private_gists":0,
            "plan":{"name":"free","space":307200,"collaborators":0,"private_repos":0}}
            "total_private_repos":0,"owned_private_repos":0,"disk_usage":14179,"collaborators":0,

        """
        user_info_resp = get_remote(
            get_config('login.github.user_info_url') + token)

        user_info = json.loads(user_info_resp)
        if user_info.get("message") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 13
0
def __get_api(url, headers=None, **kwargs):
    default_headers = {"content-type": "application/json"}
    if headers is not None and isinstance(headers, dict):
        default_headers.update(headers)
    try:
        req = requests.get(get_config("endpoint.hackathon_api") + url, headers=default_headers, **kwargs)
        resp = req.content
        return json.loads(resp)
    except Exception as e:
        abort(500, 'API Service is not yet open')
Ejemplo n.º 14
0
def __get_api(url, headers=None, **kwargs):
    default_headers = {"content-type": "application/json"}
    if headers is not None and isinstance(headers, dict):
        default_headers.update(headers)
    try:
        req = requests.get(get_config("hackathon-api.endpoint") + url, headers=default_headers, **kwargs)
        resp = json.loads(req.content)
        return resp
    except Exception as e:
        abort(500, "API Service is not yet open")
Ejemplo n.º 15
0
    def __oauth_login(self, provider):
        code = request.args.get('code')
        oauth_data = {
            "code": code,
            "redirect_uri":
            get_config("endpoint.hackathon_web") + "/" + provider,
            "provider": provider
        }

        return self.__remote_login(oauth_data)
Ejemplo n.º 16
0
    def get_emails(self, token):
        """Get user primary email

        :type token: str
        :param token:

        :rtype: dict
        :return: emails
        """
        email_info_resp = get_remote(get_config('login.github.emails_info_url') + token)
        email_list = json.loads(email_info_resp)

        return email_list
Ejemplo n.º 17
0
    def get_emails(self, token):
        """Get user primary email

        :type token: str
        :param token:

        :rtype: dict
        :return: emails
        """
        email_info_resp = get_remote(get_config('login.github.emails_info_url') + token)
        email_list = json.loads(email_info_resp)

        return email_list
Ejemplo n.º 18
0
    def get_token(self, code):
        """ Get gitcafe access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token
        """
        token_resp = get_remote(get_config("login.gitcafe.access_token_url") + code)
        query = qs_dict(token_resp)
        if query.get("error") is not None:
            raise Exception(query)

        return query["access_token"]
Ejemplo n.º 19
0
    def get_token(self, code):
        """ Get weibo access token

        :type code: str
        :param code:

        :rtype: dict
        :return: access token and uid
        """

        token_resp = post_to_remote(get_config('login.weibo.access_token_url') + code, {})
        if token_resp.get("error") is not None:
            raise Exception(token_resp)

        return token_resp
Ejemplo n.º 20
0
    def get_token(self, code):
        """ Get weibo access token

        :type code: str
        :param code:

        :rtype: dict
        :return: access token and uid
        """

        token_resp = post_to_remote(get_config('login.weibo.access_token_url') + code, {})
        if token_resp.get("error") is not None:
            raise Exception(token_resp)

        return token_resp
Ejemplo n.º 21
0
    def get_token(self, code):
        """ Get gitcafe access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token
        """
        token_resp = get_remote(
            get_config("login.gitcafe.access_token_url") + code)
        query = qs_dict(token_resp)
        if query.get("error") is not None:
            raise Exception(query)

        return query["access_token"]
Ejemplo n.º 22
0
    def get_user_info(self, access_token, openid):
        """get user info from wx-api

        this is the final step to login with wechat

        :type access_token: str
        :param access_token: the access token get from wx

        :type openid: str
        :param openid: the openid get from wx to specified user

        :rtype: dict
        :return: then user info accessed from wechat
        """
        url = get_config("login.wechat.user_info_url") % (access_token, openid)
        return self._access_wxapi_or_raise(url)
Ejemplo n.º 23
0
    def get_access_token(self, code):
        """get access token from wx-api

        this is the second step to login with wechat after the
        client get the code

        :type code: str
        :param code: code get from wx

        :rtype: tuple
        :return: then access token and user open id in a tuple
        """
        url = get_config("login.wechat.access_token_url") % code
        r = self._access_wxapi_or_raise(url)

        return (r["access_token"], r["openid"])
Ejemplo n.º 24
0
    def get_access_token(self, code):
        """get access token from wx-api

        this is the second step to login with wechat after the
        client get the code

        :type code: str
        :param code: code get from wx

        :rtype: tuple
        :return: then access token and user open id in a tuple
        """
        url = get_config("login.wechat.access_token_url") % code
        r = self._access_wxapi_or_raise(url)

        return (r["access_token"], r["openid"])
Ejemplo n.º 25
0
    def get_user_info(self, access_token, openid):
        """get user info from wx-api

        this is the final step to login with wechat

        :type access_token: str
        :param access_token: the access token get from wx

        :type openid: str
        :param openid: the openid get from wx to specified user

        :rtype: dict
        :return: then user info accessed from wechat
        """
        url = get_config("login.wechat.user_info_url") % (access_token, openid)
        return self._access_wxapi_or_raise(url)
Ejemplo n.º 26
0
    def get_email(self, token, uid):
        """Get weibo user info

        :type token: str
        :param token:

        :rtype: str
        :return : email
        """

        email_info_resp = get_remote(get_config('login.weibo.email_info_url') + token)
        email_info_resp_json = json.loads(email_info_resp)

        if email_info_resp_json.get("error") is not None:
            raise Exception(email_info_resp_json)

        return email_info_resp_json['email']
Ejemplo n.º 27
0
    def get_email(self, token, uid):
        """Get weibo user info

        :type token: str
        :param token:

        :rtype: str
        :return : email
        """

        email_info_resp = get_remote(get_config('login.weibo.email_info_url') + token)
        email_info_resp_json = json.loads(email_info_resp)

        if email_info_resp_json.get("error") is not None:
            raise Exception(email_info_resp_json)

        return email_info_resp_json['email']
Ejemplo n.º 28
0
    def get_info(self, token):
        """ Get qq open id

        :type token: str
        :param token:

        :rtype: dict
        :return: info
        """

        openid_resp = get_remote(get_config("login.qq.openid_url") + token)
        log.debug("get access_token from qq:" + token)
        info = json.loads(openid_resp[10:-4])

        if info.get("error") is not None:
            raise Exception(info)

        return info
Ejemplo n.º 29
0
    def get_user_info(self, authorization):
        """Get qq user info

        :type authorization: str
        :param authorization:

        :rtype: dict
        :return: user info
        """
        opener = urllib2.build_opener(urllib2.HTTPHandler)
        request = urllib2.Request(get_config("login.gitcafe.user_info_url"))
        request.add_header("Authorization", authorization)
        user_info = json.loads(opener.open(request).read())

        if user_info.get("error") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 30
0
    def get_user_info(self, authorization):
        """Get qq user info

        :type authorization: str
        :param authorization:

        :rtype: dict
        :return: user info
        """
        opener = urllib2.build_opener(urllib2.HTTPHandler)
        request = urllib2.Request(get_config("login.gitcafe.user_info_url"))
        request.add_header("Authorization", authorization)
        user_info = json.loads(opener.open(request).read())

        if user_info.get("error") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 31
0
    def get_token(self, code):
        """ Get qq access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token
        """

        state = "openhackathon"
        token_resp = get_remote(get_config("login.qq.access_token_url") + code + "&state=" + state)
        if token_resp.find('callback') == 0:
            error = json.loads(token_resp[10:-4])
            raise Exception(error)

        query = qs_dict(token_resp)
        return query["access_token"]
Ejemplo n.º 32
0
    def get_token(self, code):
        """ Get qq access token

        :type code: str
        :param code:

        :rtype: str
        :return: access token
        """

        state = "openhackathon"
        token_resp = get_remote(get_config("login.qq.access_token_url") + code + "&state=" + state)
        if token_resp.find('callback') == 0:
            error = json.loads(token_resp[10:-4])
            raise Exception(error)

        query = qs_dict(token_resp)
        return query["access_token"]
Ejemplo n.º 33
0
    def get_info(self, token):
        """ Get qq open id

        :type token: str
        :param token:

        :rtype: dict
        :return: info
        """

        openid_resp = get_remote(get_config("login.qq.openid_url") + token)
        log.debug("get access_token from qq:" + token)
        info = json.loads(openid_resp[10:-4])

        if info.get("error") is not None:
            raise Exception(info)

        return info
Ejemplo n.º 34
0
    def get_user_info(self, token):
        """Get live user info

        :type token: str
        :param token:

        :rtype: dict
        :return:
            {'first_name': 'Ice', 'last_name': 'Shi', 'name': 'Ice Shi', 'locale': 'en_US',
            'gender': None,
            'emails': {'personal': None, 'account': '*****@*****.**', 'business': None, 'preferred': '*****@*****.**'},
            'link': 'https://profile.live.com/',
            'updated_time': '2015-05-13T02:28:32+0000',
            'id': '655c03b1b314b5ee'}
        """

        user_info_resp = get_remote(get_config('login.live.user_info_url') + token)
        user_info = json.loads(user_info_resp)

        if user_info.get("error") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 35
0
    def get_user_info(self, token):
        """Get live user info

        :type token: str
        :param token:

        :rtype: dict
        :return:
            {'first_name': 'Ice', 'last_name': 'Shi', 'name': 'Ice Shi', 'locale': 'en_US',
            'gender': None,
            'emails': {'personal': None, 'account': '*****@*****.**', 'business': None, 'preferred': '*****@*****.**'},
            'link': 'https://profile.live.com/',
            'updated_time': '2015-05-13T02:28:32+0000',
            'id': '655c03b1b314b5ee'}
        """

        user_info_resp = get_remote(get_config('login.live.user_info_url') + token)
        user_info = json.loads(user_info_resp)

        if user_info.get("error") is not None:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 36
0
    def get_user_info(self, token, openid, client_id):
        """Get qq user info

        :type token: str
        :param token:

        :type openid: str
        :param openid:

        :type client_id: str
        :param client_id:

        :rtype: dict
        :return: user info
        """

        url = get_config("login.qq.user_info_url") % (token, client_id, openid)
        user_info_resp = get_remote(url)
        user_info = convert(json.loads(user_info_resp))

        if user_info.get("ret") != 0:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 37
0
    def get_user_info(self, token, openid, client_id):
        """Get qq user info

        :type token: str
        :param token:

        :type openid: str
        :param openid:

        :type client_id: str
        :param client_id:

        :rtype: dict
        :return: user info
        """

        url = get_config("login.qq.user_info_url") % (token, client_id, openid)
        user_info_resp = get_remote(url)
        user_info = convert(json.loads(user_info_resp))

        if user_info.get("ret") != 0:
            raise Exception(user_info)

        return user_info
Ejemplo n.º 38
0
def __oauth_meta_content():
    return {
        LOGIN_PROVIDER.WEIBO: get_config('login.weibo.meta_content'),
        LOGIN_PROVIDER.QQ: get_config('login.qq.meta_content')
    }
Ejemplo n.º 39
0
class LoginManagerHelper():
    '''Helper class for flask-login.LoginManager'''
    headers = {"Content-Type": "application/json"}
    login_url = get_config("hackathon-api.endpoint") + "/api/user/login"

    def load_user(self, id):
        try:
            req = requests.get(self.login_url, {"id": id})
            login_user = User(json.loads(req.content))
            return login_user
        except Exception as e:
            log.error(e)
            return None

    def logout(self, token):
        try:
            requests.delete(self.login_url, headers={"token": token})
        except Exception as e:
            log.error(e)

        session.pop("token", "")
        logout_user()

    def login(self, provider):
        if provider == LOGIN_PROVIDER.MYSQL:
            return self.__mysql_login()
        else:
            return self.__oauth_login(provider)

    def __oauth_login(self, provider):
        code = request.args.get('code')
        oauth_resp = login_providers[provider].login({"code": code})

        return self.__remote_login(oauth_resp)

    def __mysql_login(self):

        data = {
            "provider": LOGIN_PROVIDER.MYSQL,
            "openid": request.form['username'],
            "username": request.form['username'],
            "password": encode(request.form['password'])
        }

        return self.__remote_login(data)

    def __remote_login(self, data):
        try:
            req = requests.post(self.login_url,
                                json=data,
                                headers=self.headers)
            resp = req.json()
            if "error" in resp:
                log.debug("login failed: %r" % resp)
                return None
            else:
                login_user = User(resp["user"])
                token = resp["token"]
                return {"user": login_user, "token": token["token"]}
        except Exception as e:
            log.error(e)
            return None
Ejemplo n.º 40
0
def __oauth_meta_content():
    return {
        LOGIN_PROVIDER.WEIBO: get_config("login.weibo.meta_content"),
        LOGIN_PROVIDER.QQ: get_config("login.qq.meta_content"),
    }
Ejemplo n.º 41
0
def js_config():
    resp = Response(response="var CONFIG=%s" %
                    json.dumps(get_config("javascript")),
                    status=200,
                    mimetype="application/javascript")
    return resp
Ejemplo n.º 42
0
def js_config():
    resp = Response(
        response="var CONFIG=%s" % json.dumps(get_config("javascript")), status=200, mimetype="application/javascript"
    )
    return resp
Ejemplo n.º 43
0
class LoginManagerHelper():
    '''Helper class for flask-login.LoginManager'''
    headers = {"Content-Type": "application/json"}
    login_url = get_config("endpoint.hackathon_api") + "/api/user/login"

    def load_user(self, id):
        try:
            req = requests.get(self.login_url, {"id": id})
            login_user = User(json.loads(req.content))
            return login_user
        except Exception as e:
            log.error(e)
            return None

    def logout(self, token):
        try:
            requests.delete(self.login_url, headers={"token": token})
        except Exception as e:
            log.error(e)

        session.pop("token", "")
        logout_user()

    def login(self, provider):
        if provider == LOGIN_PROVIDER.DB:
            return self.__mysql_login()
        else:
            return self.__oauth_login(provider)

    def __oauth_login(self, provider):
        code = request.args.get('code')
        oauth_data = {
            "code": code,
            "redirect_uri":
            get_config("endpoint.hackathon_web") + "/" + provider,
            "provider": provider
        }

        return self.__remote_login(oauth_data)

    def __mysql_login(self):

        data = {
            "provider": LOGIN_PROVIDER.DB,
            "username": request.form['username'],
            "password": encode(request.form['password'])
        }

        return self.__remote_login(data)

    def __remote_login(self, data):
        try:
            req = requests.post(self.login_url,
                                json=data,
                                headers=self.headers)
            resp = req.json()
            if resp:
                # if login isn't successful, it will return None
                login_user = User(resp["user"])
                token = resp["token"]
                log.debug("Login successfully %s" % login_user.get_user_id())
                return {"user": login_user, "token": token["token"]}
            else:
                log.debug("login failed: %r" % resp)
                return None
        except Exception as e:
            log.error(e)
            return None