コード例 #1
0
    def browser_discord_login_callback():
        sio.discord.callback()
        discord_user = sio.discord.fetch_user()

        user: User = User.get(discord_id=discord_user.id)
        if user is None:
            return "Unknown user", 404

        return flask.redirect(flask.url_for("browser_me"))
コード例 #2
0
            def _handler(**kwargs):
                try:
                    user: User = User.get(
                        discord_id=self.discord.fetch_user().id)
                    if user is None or not user.admin:
                        return "User not authorized", 403

                    return handler(user, **kwargs)

                except flask_discord.exceptions.Unauthorized:
                    return "Unknown user", 404
コード例 #3
0
            def _handler(**kwargs):
                try:
                    user: User
                    if not self.app.debug:
                        user = User.get(
                            discord_id=self.discord.fetch_user().id)
                        if user is None or not user.admin:
                            return "User not authorized", 403
                    else:
                        user = list(User.select().limit(1))[0]

                    return handler(user, **kwargs)

                except flask_discord.exceptions.Unauthorized:
                    return "Unknown user", 404
コード例 #4
0
def test_login_with_discord(mock_fetch_token: MagicMock, clean_database,
                            flask_app, existing):
    # Setup
    sio = MagicMock()
    session = {}
    sio.session.return_value.__enter__.return_value = session
    sio.get_session.return_value = session
    mock_fetch_token.return_value = "access_token"
    sio.fernet_encrypt.encrypt.return_value = b"encrypted"

    discord_user = sio.discord.fetch_user.return_value
    discord_user.id = 1234
    discord_user.name = "A Name"

    if existing:
        User.create(discord_id=discord_user.id, name="Someone else")

    # Run
    with flask_app.test_request_context():
        result = user_session.login_with_discord(sio, "code")

    # Assert
    mock_fetch_token.assert_called_once_with(
        ANY,
        "https://discord.com/api/oauth2/token",
        code="code",
        client_secret=sio.app.config["DISCORD_CLIENT_SECRET"],
    )
    user = User.get(User.discord_id == 1234)
    assert user.name == "A Name"

    assert session == {
        "user-id": user.id,
        "discord-access-token": "access_token",
    }
    assert result == {
        "user": user.as_json,
        "sessions": [],
        "encoded_session_b85": b'Wo~0~d2n=PWB',
    }