Example #1
0
async def completeDiscordTokenLogin(cls: "WebIndex", WebRequest: Request,
                                    data: dict) -> Response:

    session_key: str = randomString(size=32)
    access_token: str = data.get('access_token', "")
    refresh_token: str = data.get('refresh_token', "")
    scope: str = data.get('scope', "")
    token_type: str = data.get('token_type', None)
    user_info: dict = await getDiscordUser(cls.Web.BASE, access_token)

    try:
        cls.Web.BASE.PhaazeDB.insertQuery(table="session_discord",
                                          content=dict(
                                              session=session_key,
                                              access_token=access_token,
                                              refresh_token=refresh_token,
                                              scope=scope,
                                              token_type=token_type,
                                              user_info=json.dumps(user_info)))

        cls.Web.BASE.Logger.debug(
            f"(API) New Discord Login - Session: {session_key} User: {str(user_info.get('username','[N/A]'))}",
            require="api:login")
        return cls.response(
            status=302,
            headers={
                "Set-Cookie":
                f"phaaze_discord_session={session_key}; Path=/; Max-Age={SESSION_EXPIRE};",
                "Location": "/discord"
            })
    except Exception as e:
        tb: str = traceback.format_exc()
        cls.Web.BASE.Logger.error(f"(API) Database error: {str(e)}\n{tb}")
        return cls.response(
            status=302, headers={"Location": "/discord/login?error=database"})
Example #2
0
def generateTwitchAuthLink(cls: "Phaazebot") -> str:
    """
	used to create a link, that leads the user to twitch, where he authorizes our request.
	and is then send back to us, where he should have a ?code=123123 in his query
	"""

    auth_url: str = f"{AUTH_URL}oauth2/authorize"
    auth_params: dict = {
        "client_id":
        cls.Access.twitch_client_id,
        "redirect_uri":
        cls.Vars.twitch_redirect_link,
        "response_type":
        "code",
        "force_verify":
        "true",
        "state":
        randomString(32),
        "scope":
        "user:read:email channel:read:subscriptions channel:read:redemptions bits:read"
    }

    Target: requests.Request = requests.Request(url=auth_url,
                                                params=auth_params)
    Prep: requests.PreparedRequest = Target.prepare()
    return Prep.url
Example #3
0
async def completeTwitchTokenLogin(cls: "PhaazebotWeb",
                                   _WebRequest: ExtendedRequest,
                                   data: dict) -> Response:
    """
	inserts all necessary data into the session_twitch database
	"""

    session_key: str = randomString(size=32)
    access_token: str = data.get("access_token", "")
    refresh_token: str = data.get("refresh_token", "")
    scope: str = ' '.join(data.get("scope", []))
    token_type: str = data.get('token_type', "")

    user_res: List[TwitchUser] = await getTwitchUsers(cls.BASE,
                                                      access_token,
                                                      item_type="token")
    TwitchAuthUser: TwitchUser = user_res.pop(0) if len(user_res) > 0 else None

    if not TwitchAuthUser or not TwitchAuthUser.extended:
        cls.BASE.Logger.warning("(API) Twitch user login failed")
        return cls.response(status=302,
                            headers={"Location": "/twitch/login?error=user"})

    try:
        cls.BASE.PhaazeDB.insertQuery(table="session_twitch",
                                      content=dict(session=session_key,
                                                   access_token=access_token,
                                                   refresh_token=refresh_token,
                                                   scope=scope,
                                                   token_type=token_type,
                                                   user_info=json.dumps(
                                                       TwitchAuthUser.toJSON(
                                                           types=True,
                                                           images=True,
                                                           with_email=True))))

        cls.BASE.Logger.debug(
            f"(API) New Twitch Login - Session: {session_key} User: {TwitchAuthUser.login}",
            require="api:login")
        return cls.response(
            status=302,
            headers={
                "Set-Cookie":
                f"phaaze_twitch_session={session_key}; Path=/; Max-Age={SESSION_EXPIRE};",
                "Location": "/twitch"
            })
    except Exception as e:
        tb: str = traceback.format_exc()
        cls.BASE.Logger.error(f"(API) Database error: {str(e)}\n{tb}")
        return cls.response(
            status=302, headers={"Location": "/twitch/login?error=database"})
Example #4
0
async def completeDiscordTokenLogin(cls: "PhaazebotWeb",
                                    _WebRequest: ExtendedRequest,
                                    data: dict) -> Response:
    """
	inserts all necessary data into the session_discord database
	"""

    session_key: str = randomString(size=32)
    access_token: str = data.get('access_token', "")
    refresh_token: str = data.get('refresh_token', "")
    scope: str = data.get('scope', "")
    token_type: str = data.get('token_type', "")
    user_info: dict = await getDiscordUser(cls.BASE, access_token)

    # if the result has a message field, something went wrong
    if user_info.get("message", "---") != "---":
        cls.BASE.Logger.warning("(API) Discord user login failed")
        return cls.response(status=302,
                            headers={"Location": "/discord/login?error=user"})

    try:
        cls.BASE.PhaazeDB.insertQuery(table="session_discord",
                                      content=dict(
                                          session=session_key,
                                          access_token=access_token,
                                          refresh_token=refresh_token,
                                          scope=scope,
                                          token_type=token_type,
                                          user_info=json.dumps(user_info)))

        cls.BASE.Logger.debug(
            f"(API) New Discord Login - Session: {session_key} User: {str(user_info.get('username','[N/A]'))}",
            require="api:login")
        return cls.response(
            status=302,
            headers={
                "Set-Cookie":
                f"phaaze_discord_session={session_key}; Path=/; Max-Age={SESSION_EXPIRE};",
                "Location": "/discord"
            })
    except Exception as e:
        tb: str = traceback.format_exc()
        cls.BASE.Logger.error(f"(API) Database error: {str(e)}\n{tb}")
        return cls.response(
            status=302, headers={"Location": "/discord/login?error=database"})
Example #5
0
async def apiAccountLoginPhaaze(cls: "PhaazebotWeb",
                                WebRequest: ExtendedRequest) -> Response:
    """
	Default url: /api/account/phaaze/login
	looks like all other WebUser pairs, except this time it should be a post request, leading new information to login,
	create session and give this to the user
	"""
    AuthWeb: AuthWebUser = await authWebUser(cls,
                                             WebRequest,
                                             force_method="viaPost")

    if not AuthWeb.tried:
        return await apiMissingData(cls, WebRequest)

    if not AuthWeb.found:
        return await apiUserNotFound(cls, WebRequest)

    session_key: str = randomString(size=32)

    cls.BASE.PhaazeDB.insertQuery(table="session_phaaze",
                                  content=dict(session=session_key,
                                               user_id=AuthWeb.User.user_id))

    cls.BASE.PhaazeDB.query(
        """
		UPDATE `web_user`
		SET `last_login` = NOW()
		WHERE `web_user`.`id` = %s""", (AuthWeb.User.user_id, ))

    cls.BASE.Logger.debug(
        f"(API) New Login - Session: {session_key} User: {str(AuthWeb.User.username)}",
        require="api:login")
    return cls.response(text=json.dumps(
        dict(phaaze_session=session_key,
             status=200,
             expires_in=str(SESSION_EXPIRE))),
                        content_type="application/json",
                        status=200)