authentik.sources.oauth.types.discord

Discord OAuth Views

 1"""Discord OAuth Views"""
 2
 3from typing import Any
 4
 5from authentik.sources.oauth.types.registry import SourceType, registry
 6from authentik.sources.oauth.views.callback import OAuthCallback
 7from authentik.sources.oauth.views.redirect import OAuthRedirect
 8
 9
10class DiscordOAuthRedirect(OAuthRedirect):
11    """Discord OAuth2 Redirect"""
12
13    def get_additional_parameters(self, source):  # pragma: no cover
14        return {
15            "scope": ["email", "identify"],
16            "prompt": "none",
17        }
18
19
20class DiscordOAuth2Callback(OAuthCallback):
21    """Discord OAuth2 Callback"""
22
23
24@registry.register()
25class DiscordType(SourceType):
26    """Discord Type definition"""
27
28    callback_view = DiscordOAuth2Callback
29    redirect_view = DiscordOAuthRedirect
30    verbose_name = "Discord"
31    name = "discord"
32
33    authorization_url = "https://discord.com/api/oauth2/authorize"
34    access_token_url = "https://discord.com/api/oauth2/token"  # nosec
35    profile_url = "https://discord.com/api/users/@me"
36
37    def get_base_user_properties(self, info: dict[str, Any], **kwargs) -> dict[str, Any]:
38        return {
39            "username": info.get("username"),
40            "email": info.get("email", None),
41            "name": info.get("username"),
42        }
class DiscordOAuthRedirect(authentik.sources.oauth.views.redirect.OAuthRedirect):
11class DiscordOAuthRedirect(OAuthRedirect):
12    """Discord OAuth2 Redirect"""
13
14    def get_additional_parameters(self, source):  # pragma: no cover
15        return {
16            "scope": ["email", "identify"],
17            "prompt": "none",
18        }

Discord OAuth2 Redirect

def get_additional_parameters(self, source):
14    def get_additional_parameters(self, source):  # pragma: no cover
15        return {
16            "scope": ["email", "identify"],
17            "prompt": "none",
18        }

Return additional redirect parameters for this source.

class DiscordOAuth2Callback(authentik.sources.oauth.views.callback.OAuthCallback):
21class DiscordOAuth2Callback(OAuthCallback):
22    """Discord OAuth2 Callback"""

Discord OAuth2 Callback

@registry.register()
class DiscordType(authentik.sources.oauth.types.registry.SourceType):
25@registry.register()
26class DiscordType(SourceType):
27    """Discord Type definition"""
28
29    callback_view = DiscordOAuth2Callback
30    redirect_view = DiscordOAuthRedirect
31    verbose_name = "Discord"
32    name = "discord"
33
34    authorization_url = "https://discord.com/api/oauth2/authorize"
35    access_token_url = "https://discord.com/api/oauth2/token"  # nosec
36    profile_url = "https://discord.com/api/users/@me"
37
38    def get_base_user_properties(self, info: dict[str, Any], **kwargs) -> dict[str, Any]:
39        return {
40            "username": info.get("username"),
41            "email": info.get("email", None),
42            "name": info.get("username"),
43        }

Discord Type definition

callback_view = <class 'DiscordOAuth2Callback'>
redirect_view = <class 'DiscordOAuthRedirect'>
verbose_name = 'Discord'
name = 'discord'
authorization_url = 'https://discord.com/api/oauth2/authorize'
access_token_url = 'https://discord.com/api/oauth2/token'
profile_url = 'https://discord.com/api/users/@me'
def get_base_user_properties(self, info: dict[str, typing.Any], **kwargs) -> dict[str, typing.Any]:
38    def get_base_user_properties(self, info: dict[str, Any], **kwargs) -> dict[str, Any]:
39        return {
40            "username": info.get("username"),
41            "email": info.get("email", None),
42            "name": info.get("username"),
43        }

Get base user properties for enrollment/update