def login(self, args): """ weibo Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Weibo Sina") code = args.get("code") access_token = self.get_token(code) user_info = self.get_user_info(access_token["access_token"], access_token["uid"]) #Get email need to apply high-level interface #email = self.get_email(access_token["access_token"], access_token["uid"]) name = user_info["name"] email_list = [{'name': name, 'email': '', 'verified': 1, 'primary': 1}] return user_manager.oauth_db_login(user_info["id"], provider=LOGIN_PROVIDER.WEIBO, name=name, nickname=user_info["screen_name"], access_token=access_token, email_list=email_list, avatar_url=user_info["avatar_hd"])
def login(self, args): """ github Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from GitHub') code = args.get('code') access_token = self.get_token(code) user_info = self.get_user_info(access_token) email_list = self.get_emails(access_token) name = user_info["login"] nickname = name if "name" in user_info: nickname = user_info["name"] if not nickname: nickname = name return user_manager.oauth_db_login(str(user_info["id"]), provider=LOGIN_PROVIDER.GITHUB, name=user_info["login"], nickname=nickname, access_token=access_token, email_list=email_list, avatar_url=user_info["avatar_url"])
def login(self, args): """ Wechat Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Wechat") code = args.get("code") if not code: return None access_token, openid = self.get_access_token(code) user_detail = self.get_user_info(access_token, openid) return { "openid": openid, "provider": LOGIN_PROVIDER.WECHAT, "name": user_detail["nickname"], "nickname": user_detail["nickname"], "access_token": access_token, "email_list": [], "avatar_url": user_detail["headimgurl"], }
def login(self, args): """ weibo Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Weibo Sina") code = args.get("code") access_token = self.get_token(code) user_info = self.get_user_info(access_token["access_token"], access_token["uid"]) # Get email need to apply high-level interface # email = self.get_email(access_token["access_token"], access_token["uid"]) name = user_info["name"] email_list = [ { 'name': name, 'email': '', 'verified': 1, 'primary': 1 } ] return user_manager.oauth_db_login(user_info["id"], provider=LOGIN_PROVIDER.WEIBO, name=name, nickname=user_info["screen_name"], access_token=access_token["access_token"], email_list=email_list, avatar_url=user_info["avatar_hd"])
def login(self, args): """ live Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Live") code = args.get("code") if not code: return None access_token = self.get_token(code) user_info = self.get_user_info(access_token) name = user_info["name"] email = user_info["emails"]["account"] email_list = [{"name": name, "email": email, "verified": 1, "primary": 1}] required_info = { "openid": user_info["id"], "provider": LOGIN_PROVIDER.LIVE, "name": name, "nickname": name, "access_token": access_token, "email_list": email_list, "avatar_url": None, } return required_info
def login(self, args): """ live Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Live') code = args.get('code') access_token = self.get_token(code) user_info = self.get_user_info(access_token) name = user_info["name"] email = user_info["emails"]["account"] email_list = [ { 'name': name, 'email': email, 'verified': 1, 'primary': 1 } ] return user_manager.oauth_db_login(user_info["id"], provider=LOGIN_PROVIDER.LIVE, name=name, nickname=name, access_token=access_token, email_list=email_list, avatar_url=None)
def login(self, args): """ live Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Live') code = args.get('code') access_token = self.get_token(code) user_info = self.get_user_info(access_token) name = user_info["name"] email = user_info["emails"]["account"] email_list = [{ 'name': name, 'email': email, 'verified': 1, 'primary': 1 }] return user_manager.oauth_db_login(user_info["id"], provider=LOGIN_PROVIDER.LIVE, name=name, nickname=name, access_token=access_token, email_list=email_list, avatar_url=None)
def __authing_login(provider): try: # https://docs.authing.cn/authing/social-login/web/github # code: 错误或成功代码,200 为成功,非 200 为失败 # message: 成功或错误信息 # data: userInfo,若 code 为非 200 不返回此参数 code = request.args.get('code') message = request.args.get('message') if (code != "200"): log.info("Login with authing:%s failed with code: %s, message: %s " % (provider, code, message)) return __login_failed(provider) data = request.args.get('data') user_info = json.loads(data) user_name = user_info["username"] log.info("Login with authing:%s successfully. Sending user info `%s` to hackathon server." % (provider, user_name)) remote_user = login_manager_helper.authing(user_info) login_user(remote_user) token = user_info["token"] session["token"] = token if session.get("return_url") is not None: resp = make_response(redirect(session["return_url"])) session["return_url"] = None else: resp = make_response(redirect(url_for("index"))) resp.set_cookie('token', token) return resp except Exception as ex: log.error(ex) return __login_failed(provider)
def login(self, args): """ QQ Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from QQ") code = args.get('code') access_token = self.get_token(code) info = self.get_info(access_token) user_info = self.get_user_info(access_token, info["openid"], info["client_id"]) avatar_url = "" if "figureurl_qq_1" in user_info: # try qq logo first avatar_url = user_info["figureurl_qq_1"] elif "figureurl" in user_info: # try qzone logo avatar_url = user_info["figureurl"] return user_manager.oauth_db_login(info["openid"], name=user_info["nickname"], provider=LOGIN_PROVIDER.QQ, nickname=user_info["nickname"], access_token=access_token, email_list=[], avatar_url=avatar_url)
def login(self, args): """ Wechat Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Wechat") code = args.get('code') if not code: return None access_token, openid = self.get_access_token(code) user_detail = self.get_user_info(access_token, openid) return { "openid": openid, "provider": LOGIN_PROVIDER.WECHAT, "name": user_detail["nickname"], "nickname": user_detail["nickname"], "access_token": access_token, "email_list": [], "avatar_url": user_detail["headimgurl"] }
def login(self, args): """ github Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from GitHub') code = args.get('code') access_token = self.get_token(code) user_info = self.get_user_info(access_token) email_list = self.get_emails(access_token) name = user_info["login"] nickname = user_info["name"] if "name" in user_info else name return user_manager.oauth_db_login(str(user_info["id"]), provider=LOGIN_PROVIDER.GITHUB, name=user_info["login"], nickname=nickname, access_token=access_token, email_list=email_list, avatar_url=user_info["avatar_url"])
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
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
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
def login(self, args): """ gitcafe Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Gitcafe') code = args.get('code') if not code: return None access_token = self.get_token(code) user_info = self.get_user_info("Bearer " + access_token) name = user_info['username'] email = user_info['email'] nickname = user_info['fullname'] if nickname is None: nickname = name if user_info['avatar_url'].startswith('https'): avatar_url = user_info['avatar_url'] else: avatar_url = "https" + user_info['avatar_url'][4:] email_list = [ { 'name': name, 'email': email, 'verified': 1, 'primary': 1 } ] required_info = { "openid": user_info['id'], "provider": LOGIN_PROVIDER.GITCAFE, "name": name, "nickname": nickname, "access_token": access_token, "email_list": email_list, "avatar_url": avatar_url } return required_info
def login(self, args): """ gitcafe Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Gitcafe') code = args.get('code') if not code: return None access_token = self.get_token(code) user_info = self.get_user_info("Bearer " + access_token) name = user_info['username'] email = user_info['email'] nickname = user_info['fullname'] if nickname is None: nickname = name if user_info['avatar_url'].startswith('https'): avatar_url = user_info['avatar_url'] else: avatar_url = "https" + user_info['avatar_url'][4:] email_list = [{ 'name': name, 'email': email, 'verified': 1, 'primary': 1 }] required_info = { "openid": user_info['id'], "provider": LOGIN_PROVIDER.GITCAFE, "name": name, "nickname": nickname, "access_token": access_token, "email_list": email_list, "avatar_url": avatar_url } return required_info
def login(self, args): """ gitcafe Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Gitcafe') code = args.get('code') if not code: return None access_token = self.get_token(code) user_info = self.get_user_info("Bearer " + access_token) name = user_info['username'] email = user_info['email'] nickname = user_info['fullname'] if nickname is None: nickname = name if user_info['avatar_url'].startswith('https'): avatar_url = user_info['avatar_url'] else: avatar_url = "https" + user_info['avatar_url'][4:] email_list = [ { 'name': name, 'email': email, 'verified': 1, 'primary': 1 } ] return user_manager.oauth_db_login(user_info['id'], provider=LOGIN_PROVIDER.GITCAFE, name=name, nickname=nickname, access_token=access_token, email_list=email_list, avatar_url=avatar_url)
def login(self, args): """ gitcafe Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Gitcafe") code = args.get("code") if not code: return None access_token = self.get_token(code) user_info = self.get_user_info("Bearer " + access_token) name = user_info["username"] email = user_info["email"] nickname = user_info["fullname"] if nickname is None: nickname = name if user_info["avatar_url"].startswith("https"): avatar_url = user_info["avatar_url"] else: avatar_url = "https" + user_info["avatar_url"][4:] email_list = [{"name": name, "email": email, "verified": 1, "primary": 1}] required_info = { "openid": user_info["id"], "provider": LOGIN_PROVIDER.GITCAFE, "name": name, "nickname": nickname, "access_token": access_token, "email_list": email_list, "avatar_url": avatar_url, } return required_info
def login(self, args): """ weibo Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Weibo Sina") code = args.get("code") if not code: return None access_token = self.get_token(code) user_info = self.get_user_info(access_token["access_token"], access_token["uid"]) # Get email need to apply high-level interface # email = self.get_email(access_token["access_token"], access_token["uid"]) name = user_info["name"] email_list = [ { 'name': name, 'email': '', 'verified': 1, 'primary': 1 } ] required_info = { "openid": str(user_info["id"]), "provider": LOGIN_PROVIDER.WEIBO, "name": name, "nickname": user_info["screen_name"], "access_token": access_token["access_token"], "email_list": email_list, "avatar_url": user_info["avatar_hd"] } return required_info
def login(self, args): """ live Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Live') code = args.get('code') if not code: return None access_token = self.get_token(code) user_info = self.get_user_info(access_token) name = user_info["name"] email = user_info["emails"]["account"] email_list = [ { 'name': name, 'email': email, 'verified': 1, 'primary': 1 } ] required_info = { "openid": user_info["id"], "provider": LOGIN_PROVIDER.LIVE, "name": name, "nickname": name, "access_token": access_token, "email_list": email_list, "avatar_url": None } return required_info
def login(self, args): """ gitcafe Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from Gitcafe') code = args.get('code') access_token = self.get_token(code) user_info = self.get_user_info("Bearer " + access_token) name = user_info['username'] email = user_info['email'] nickname = user_info['fullname'] if nickname is None: nickname = name if user_info['avatar_url'].startswith('https'): avatar_url = user_info['avatar_url'] else: avatar_url = "https" + user_info['avatar_url'][4:] email_list = [{ 'name': name, 'email': email, 'verified': 1, 'primary': 1 }] return user_manager.oauth_db_login(user_info['id'], provider=LOGIN_PROVIDER.GITCAFE, name=name, nickname=nickname, access_token=access_token, email_list=email_list, avatar_url=avatar_url)
def __login(provider): try: user_with_token = login_manager_helper.login(provider) if user_with_token is None: return __login_failed(provider) log.info("login successfully:" + repr(user_with_token)) token = user_with_token["token"] login_user(user_with_token["user"]) session["token"] = token if session.get("return_url") is not None: resp = make_response(redirect(session["return_url"])) session["return_url"] = None else: resp = make_response(redirect(url_for("index"))) resp.set_cookie('token', token) return resp except Exception as ex: log.error(ex) return __login_failed(provider)
def __login(provider): code = request.args.get("code") try: admin_with_token = login_providers[provider].login({"code": code}) if admin_with_token is None: return __login_failed(provider) log.info("login successfully:" + repr(admin_with_token)) token = admin_with_token["token"].token login_user(admin_with_token["admin"]) session["token"] = token if session.get("return_url") is not None: resp = make_response(redirect(session["return_url"])) session["return_url"] = None else: resp = make_response(redirect(url_for("index"))) resp.set_cookie("token", token) return resp except Exception as ex: log.error(ex) return __login_failed(provider)
def __login(provider): try: user_with_token = login_manager_helper.login(provider) if user_with_token is None: return __login_failed(provider) log.info("login successfully:" + repr(user_with_token)) token = user_with_token["token"] login_user(user_with_token["user"]) session["token"] = token if session.get("return_url") is not None: resp = make_response(redirect(session["return_url"])) session["return_url"] = None else: resp = make_response(redirect(url_for("index"))) resp.set_cookie("token", token) return resp except Exception as ex: log.error(ex) return __login_failed(provider)
def __login(provider): code = request.args.get('code') try: admin_with_token = login_providers[provider].login({"code": code}) if admin_with_token is None: return __login_failed(provider) log.info("login successfully:" + repr(admin_with_token)) token = admin_with_token["token"].token login_user(admin_with_token["admin"]) session["token"] = token if session.get("return_url") is not None: resp = make_response(redirect(session["return_url"])) session["return_url"] = None else: resp = make_response(redirect(url_for("index"))) resp.set_cookie('token', token) return resp except Exception as ex: log.error(ex) return __login_failed(provider)
def login(self, args): """ github Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from GitHub") code = args.get("code") if not code: return None access_token = self.get_token(code) user_info = self.get_user_info(access_token) email_list = self.get_emails(access_token) name = user_info["login"] nickname = name if "name" in user_info: nickname = user_info["name"] if not nickname: nickname = name required_info = { "openid": str(user_info["id"]), "provider": LOGIN_PROVIDER.GITHUB, "name": name, "nickname": nickname, "access_token": access_token, "email_list": email_list, "avatar_url": user_info["avatar_url"], } return required_info
def login(self, args): """ weibo Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from Weibo Sina") code = args.get("code") if not code: return None access_token = self.get_token(code) user_info = self.get_user_info(access_token["access_token"], access_token["uid"]) # Get email need to apply high-level interface # so we just leave email list empty here # email = self.get_email(access_token["access_token"], access_token["uid"]) email_list = [] name = user_info["name"] required_info = { "openid": str(user_info["id"]), "provider": LOGIN_PROVIDER.WEIBO, "name": name, "nickname": user_info["screen_name"], "access_token": access_token["access_token"], "email_list": email_list, "avatar_url": user_info["avatar_hd"] } return required_info
def login(self, args): """ QQ Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from QQ") code = args.get('code') if not code: return None access_token = self.get_token(code) info = self.get_info(access_token) user_info = self.get_user_info(access_token, info["openid"], info["client_id"]) avatar_url = "" if "figureurl_qq_1" in user_info: # try qq logo first avatar_url = user_info["figureurl_qq_1"] elif "figureurl" in user_info: # try qzone logo avatar_url = user_info["figureurl"] required_info = { "openid": info["openid"], "provider": LOGIN_PROVIDER.QQ, "name": user_info["nickname"], "nickname": user_info["nickname"], "access_token": access_token, "email_list": [], "avatar_url": avatar_url } return required_info
def login(self, args): """ github Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info('login from GitHub') code = args.get('code') if not code: return None access_token = self.get_token(code) user_info = self.get_user_info(access_token) email_list = self.get_emails(access_token) name = user_info["login"] nickname = name if "name" in user_info: nickname = user_info["name"] if not nickname: nickname = name required_info = { "openid": str(user_info["id"]), "provider": LOGIN_PROVIDER.GITHUB, "name": name, "nickname": nickname, "access_token": access_token, "email_list": email_list, "avatar_url": user_info["avatar_url"] } return required_info
def login(self, args): """ QQ Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from QQ") code = args.get("code") if not code: return None access_token = self.get_token(code) info = self.get_info(access_token) user_info = self.get_user_info(access_token, info["openid"], info["client_id"]) avatar_url = "" if "figureurl_qq_1" in user_info: # try qq logo first avatar_url = user_info["figureurl_qq_1"] elif "figureurl" in user_info: # try qzone logo avatar_url = user_info["figureurl"] required_info = { "openid": info["openid"], "provider": LOGIN_PROVIDER.QQ, "name": user_info["nickname"], "nickname": user_info["nickname"], "access_token": access_token, "email_list": [], "avatar_url": avatar_url, } return required_info
def login(self, args): """ QQ Login :type args: dict :param args: :rtype: dict :return: token and instance of user """ log.info("login from QQ") code = args.get('code') access_token = self.get_token(code) info = self.get_info(access_token) user_info = self.get_user_info(access_token, info["openid"], info["client_id"]) return user_manager.oauth_db_login(info["openid"], name=user_info["nickname"], provider=LOGIN_PROVIDER.QQ, nickname=user_info["nickname"], access_token=access_token, email_list=[], avatar_url=user_info["figureurl"])
def info(self, msg, *args, **kwargs): if self.quiet == False: log.info(msg, *args, **kwargs)