-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add B2B OAuth & OTP * version bump * clean
- Loading branch information
1 parent
6d8372a
commit 8c481c2
Showing
32 changed files
with
811 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
# !!! | ||
# WARNING: This file is autogenerated | ||
# Only modify code within MANUAL() sections | ||
# or your changes may be overwritten later! | ||
# !!! | ||
|
||
from __future__ import annotations | ||
|
||
from typing import Any, Dict, Optional | ||
|
||
from stytch.b2b.api.oauth_discovery import Discovery | ||
from stytch.b2b.models.oauth import AuthenticateRequestLocale, AuthenticateResponse | ||
from stytch.core.api_base import ApiBase | ||
from stytch.core.http.client import AsyncClient, SyncClient | ||
|
||
|
||
class OAuth: | ||
def __init__( | ||
self, | ||
api_base: ApiBase, | ||
sync_client: SyncClient, | ||
async_client: AsyncClient, | ||
) -> None: | ||
self.api_base = api_base | ||
self.sync_client = sync_client | ||
self.async_client = async_client | ||
self.discovery = Discovery(api_base, sync_client, async_client) | ||
|
||
def authenticate( | ||
self, | ||
oauth_token: str, | ||
session_token: Optional[str] = None, | ||
session_duration_minutes: Optional[int] = None, | ||
session_jwt: Optional[str] = None, | ||
session_custom_claims: Optional[Dict[str, Any]] = None, | ||
pkce_code_verifier: Optional[str] = None, | ||
locale: Optional[AuthenticateRequestLocale] = None, | ||
) -> AuthenticateResponse: | ||
"""Authenticate a Member given a `token`. This endpoint verifies that the member completed the OAuth flow by verifying that the token is valid and hasn't expired. Provide the `session_duration_minutes` parameter to set the lifetime of the session. If the `session_duration_minutes` parameter is not specified, a Stytch session will be created with a 60 minute duration. | ||
Fields: | ||
- oauth_token: The token to authenticate. | ||
- session_token: A secret token for a given Stytch Session. | ||
- session_duration_minutes: Set the session lifetime to be this many minutes from now. This will start a new session if one doesn't already exist, | ||
returning both an opaque `session_token` and `session_jwt` for this session. Remember that the `session_jwt` will have a fixed lifetime of | ||
five minutes regardless of the underlying session duration, and will need to be refreshed over time. | ||
This value must be a minimum of 5 and a maximum of 527040 minutes (366 days). | ||
If a `session_token` or `session_jwt` is provided then a successful authentication will continue to extend the session this many minutes. | ||
If the `session_duration_minutes` parameter is not specified, a Stytch session will be created with a 60 minute duration. If you don't want | ||
to use the Stytch session product, you can ignore the session fields in the response. | ||
- session_jwt: The JSON Web Token (JWT) for a given Stytch Session. | ||
- session_custom_claims: Add a custom claims map to the Session being authenticated. Claims are only created if a Session is initialized by providing a value in | ||
`session_duration_minutes`. Claims will be included on the Session object and in the JWT. To update a key in an existing Session, supply a new value. To | ||
delete a key, supply a null value. Custom claims made with reserved claims (`iss`, `sub`, `aud`, `exp`, `nbf`, `iat`, `jti`) will be ignored. | ||
Total custom claims size cannot exceed four kilobytes. | ||
- pkce_code_verifier: A base64url encoded one time secret used to validate that the request starts and ends on the same device. | ||
- locale: (no documentation yet) | ||
""" # noqa | ||
data: Dict[str, Any] = { | ||
"oauth_token": oauth_token, | ||
} | ||
if session_token is not None: | ||
data["session_token"] = session_token | ||
if session_duration_minutes is not None: | ||
data["session_duration_minutes"] = session_duration_minutes | ||
if session_jwt is not None: | ||
data["session_jwt"] = session_jwt | ||
if session_custom_claims is not None: | ||
data["session_custom_claims"] = session_custom_claims | ||
if pkce_code_verifier is not None: | ||
data["pkce_code_verifier"] = pkce_code_verifier | ||
if locale is not None: | ||
data["locale"] = locale.value | ||
|
||
url = self.api_base.url_for("/v1/b2b/oauth/authenticate", data) | ||
res = self.sync_client.post(url, data) | ||
return AuthenticateResponse.from_json(res.response.status_code, res.json) | ||
|
||
async def authenticate_async( | ||
self, | ||
oauth_token: str, | ||
session_token: Optional[str] = None, | ||
session_duration_minutes: Optional[int] = None, | ||
session_jwt: Optional[str] = None, | ||
session_custom_claims: Optional[Dict[str, Any]] = None, | ||
pkce_code_verifier: Optional[str] = None, | ||
locale: Optional[AuthenticateRequestLocale] = None, | ||
) -> AuthenticateResponse: | ||
"""Authenticate a Member given a `token`. This endpoint verifies that the member completed the OAuth flow by verifying that the token is valid and hasn't expired. Provide the `session_duration_minutes` parameter to set the lifetime of the session. If the `session_duration_minutes` parameter is not specified, a Stytch session will be created with a 60 minute duration. | ||
Fields: | ||
- oauth_token: The token to authenticate. | ||
- session_token: A secret token for a given Stytch Session. | ||
- session_duration_minutes: Set the session lifetime to be this many minutes from now. This will start a new session if one doesn't already exist, | ||
returning both an opaque `session_token` and `session_jwt` for this session. Remember that the `session_jwt` will have a fixed lifetime of | ||
five minutes regardless of the underlying session duration, and will need to be refreshed over time. | ||
This value must be a minimum of 5 and a maximum of 527040 minutes (366 days). | ||
If a `session_token` or `session_jwt` is provided then a successful authentication will continue to extend the session this many minutes. | ||
If the `session_duration_minutes` parameter is not specified, a Stytch session will be created with a 60 minute duration. If you don't want | ||
to use the Stytch session product, you can ignore the session fields in the response. | ||
- session_jwt: The JSON Web Token (JWT) for a given Stytch Session. | ||
- session_custom_claims: Add a custom claims map to the Session being authenticated. Claims are only created if a Session is initialized by providing a value in | ||
`session_duration_minutes`. Claims will be included on the Session object and in the JWT. To update a key in an existing Session, supply a new value. To | ||
delete a key, supply a null value. Custom claims made with reserved claims (`iss`, `sub`, `aud`, `exp`, `nbf`, `iat`, `jti`) will be ignored. | ||
Total custom claims size cannot exceed four kilobytes. | ||
- pkce_code_verifier: A base64url encoded one time secret used to validate that the request starts and ends on the same device. | ||
- locale: (no documentation yet) | ||
""" # noqa | ||
data: Dict[str, Any] = { | ||
"oauth_token": oauth_token, | ||
} | ||
if session_token is not None: | ||
data["session_token"] = session_token | ||
if session_duration_minutes is not None: | ||
data["session_duration_minutes"] = session_duration_minutes | ||
if session_jwt is not None: | ||
data["session_jwt"] = session_jwt | ||
if session_custom_claims is not None: | ||
data["session_custom_claims"] = session_custom_claims | ||
if pkce_code_verifier is not None: | ||
data["pkce_code_verifier"] = pkce_code_verifier | ||
if locale is not None: | ||
data["locale"] = locale.value | ||
|
||
url = self.api_base.url_for("/v1/b2b/oauth/authenticate", data) | ||
res = await self.async_client.post(url, data) | ||
return AuthenticateResponse.from_json(res.response.status, res.json) |
Oops, something went wrong.