Skip to content

jam.oauth2

oauth2

OAuth2 module.

Modules:

Name Description
builtin

Built-in OAuth2 providers.

client

Classes:

Name Description
BaseOAuth2Client

Base OAuth2 client instance.

GitHubOAuth2Client

Rady to use GitHub OAuth2 provider.

GitLabOAuth2Client

Ready to use GitLab OAuth2 provider.

GoogleOAuth2Client

Ready to use Google OAuth2 provider.

YandexOAuth2Client

Ready to use yandex oauth2 client.

Functions:

Name Description
create_instance

Create OAuth2 clients for configured providers.

BaseOAuth2Client

BaseOAuth2Client(
    client_id: str,
    client_secret: str,
    auth_url: str,
    token_url: str,
    redirect_url: str,
    serializer: BaseEncoder
    | type[BaseEncoder] = JsonEncoder,
)

Bases: ABC

Base OAuth2 client instance.

Parameters:

Name Type Description Default
client_id str

ID or your client

required
client_secret str

Secret key for your application

required
auth_url str

App auth url

required
token_url str

App token url

required
redirect_url str

Your app url

required
serializer Union[BaseEncoder, type[BaseEncoder]]

JSON encoder/decoder. Defaults to JsonEncoder.

JsonEncoder

Methods:

Name Description
client_credentials_flow

Obtain access token using client credentials flow (no user interaction).

fetch_token

Exchange code for access token.

get_authorization_url

Get OAuth2 url.

refresh_token

Update access token.

client_credentials_flow abstractmethod

client_credentials_flow(
    scope: list[str] | None = None,
) -> dict[str, Any]

Obtain access token using client credentials flow (no user interaction).

Parameters:

Name Type Description Default
scope Optional[list[str]]

Auth scope

None

Returns:

Name Type Description
dict dict[str, Any]

JSON with access token

fetch_token abstractmethod

fetch_token(
    code: str, grant_type: str = "authorization_code"
) -> dict[str, Any]

Exchange code for access token.

Parameters:

Name Type Description Default
code str

Auth code

required
grant_type str

Grant type

'authorization_code'

Returns:

Name Type Description
dict dict[str, Any]

OAuth2 token response

get_authorization_url abstractmethod

get_authorization_url(scope: list[str]) -> str

Get OAuth2 url.

Parameters:

Name Type Description Default
scope list[str]

Auth scope

required

Returns:

Name Type Description
str str

URL for auth

refresh_token abstractmethod

refresh_token(
    refresh_token: str, grant_type: str = "refresh_token"
) -> dict[str, Any]

Update access token.

Parameters:

Name Type Description Default
refresh_token str

Refresh token

required
grant_type str

Grant type

'refresh_token'

Returns:

Name Type Description
dict dict[str, Any]

New token response

GitHubOAuth2Client

GitHubOAuth2Client(
    client_id: str, client_secret: str, redirect_url: str
)

Bases: OAuth2Client

Rady to use GitHub OAuth2 provider.

See: https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps

Parameters:

Name Type Description Default
client_id str

ID of your app

required
client_secret str

Secret key

required
redirect_url str

URL for your app

required

GitLabOAuth2Client

GitLabOAuth2Client(
    client_id: str, client_secret: str, redirect_url: str
)

Bases: OAuth2Client

Ready to use GitLab OAuth2 provider.

See: https://docs.gitlab.com/api/oauth2/

Parameters:

Name Type Description Default
client_id str

Client ID

required
client_secret str

Secret key

required
redirect_url str

Your app url

required

GoogleOAuth2Client

GoogleOAuth2Client(
    client_id: str, client_secret: str, redirect_url: str
)

Bases: OAuth2Client

Ready to use Google OAuth2 provider.

See: https://developers.google.com/identity/protocols/oauth2

Parameters:

Name Type Description Default
client_id str

Client ID

required
client_secret str

Secret key

required
redirect_url str

URL for your app

required

YandexOAuth2Client

YandexOAuth2Client(
    client_id: str, client_secret: str, redirect_url: str
)

Bases: OAuth2Client

Ready to use yandex oauth2 client.

See: https://yandex.ru/dev/id/doc

Parameters:

Name Type Description Default
client_id str

Client ID

required
client_secret str

Secret key

required
redirect_url str

Your app URL

required

create_instance

create_instance(
    providers: dict[str, dict],
    logger: BaseLogger = logger,
    serializer: BaseEncoder
    | type[BaseEncoder] = JsonEncoder,
    **kwargs: Any,
) -> dict[str, BaseOAuth2Client]

Create OAuth2 clients for configured providers.

Parameters:

Name Type Description Default
providers dict[str, dict]

{provider_name: {client_id, client_secret, redirect_uri, ...}}

required
logger BaseLogger

Logger instance

logger
serializer BaseEncoder | type[BaseEncoder]

JSON encoder/decoder

JsonEncoder
**kwargs Any

Additional params

{}

Returns:

Name Type Description
dict dict[str, BaseOAuth2Client]

{provider_name: OAuth2Client instance}