Module supertokens_python.recipe.thirdpartyemailpassword.interfaces
Expand source code
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Union
from supertokens_python.recipe.emailpassword import interfaces as EPInterfaces
from supertokens_python.recipe.emailpassword.types import FormField
from supertokens_python.recipe.session import SessionContainer
from supertokens_python.recipe.thirdparty import interfaces as ThirdPartyInterfaces
from supertokens_python.recipe.thirdparty.provider import Provider
from supertokens_python.types import APIResponse
from .types import User
ThirdPartyAPIOptions = ThirdPartyInterfaces.APIOptions
EmailPasswordAPIOptions = EPInterfaces.APIOptions
# Exporting re-used classes
CreateResetPasswordOkResult = EPInterfaces.CreateResetPasswordOkResult
CreateResetPasswordWrongUserIdError = EPInterfaces.CreateResetPasswordWrongUserIdError
EmailPasswordEmailExistsGetOkResult = EPInterfaces.EmailExistsGetOkResult
GeneratePasswordResetTokenPostOkResult = EPInterfaces.GeneratePasswordResetTokenPostOkResult
PasswordResetPostInvalidTokenResponse = EPInterfaces.PasswordResetPostInvalidTokenResponse
PasswordResetPostOkResult = EPInterfaces.PasswordResetPostOkResult
ResetPasswordUsingTokenInvalidTokenError = EPInterfaces.ResetPasswordUsingTokenInvalidTokenError
ResetPasswordUsingTokenOkResult = EPInterfaces.ResetPasswordUsingTokenOkResult
EmailPasswordSignInPostWrongCredentialsError = EPInterfaces.SignInPostWrongCredentialsError
EmailPasswordSignInWrongCredentialsError = EPInterfaces.SignInWrongCredentialsError
EmailPasswordSignUpEmailAlreadyExistsError = EPInterfaces.SignUpEmailAlreadyExistsError
EmailPasswordSignUpPostEmailAlreadyExistsError = EPInterfaces.SignUpPostEmailAlreadyExistsError
UpdateEmailOrPasswordEmailAlreadyExistsError = EPInterfaces.UpdateEmailOrPasswordEmailAlreadyExistsError
UpdateEmailOrPasswordOkResult = EPInterfaces.UpdateEmailOrPasswordOkResult
UpdateEmailOrPasswordUnknownUserIdError = EPInterfaces.UpdateEmailOrPasswordUnknownUserIdError
AuthorisationUrlGetOkResult = ThirdPartyInterfaces.AuthorisationUrlGetOkResult
ThirdPartySignInUpFieldError = ThirdPartyInterfaces.SignInUpFieldError
ThirdPartySignInUpPostNoEmailGivenByProviderResponse = ThirdPartyInterfaces.SignInUpPostNoEmailGivenByProviderResponse
ThirdPartySignInUpPostFieldError = ThirdPartyInterfaces.SignInUpPostFieldError
class ThirdPartySignInUpOkResult():
def __init__(self, user: User, created_new_user: bool):
self.user = user
self.created_new_user = created_new_user
class EmailPasswordSignUpOkResult():
def __init__(self, user: User):
self.user = user
class EmailPasswordSignInOkResult():
def __init__(self, user: User):
self.user = user
class RecipeInterface(ABC):
def __init__(self):
pass
@abstractmethod
async def get_user_by_id(self, user_id: str, user_context: Dict[str, Any]) -> Union[User, None]:
pass
@abstractmethod
async def get_users_by_email(self, email: str, user_context: Dict[str, Any]) -> List[User]:
pass
@abstractmethod
async def get_user_by_thirdparty_info(self, third_party_id: str,
third_party_user_id: str, user_context: Dict[str, Any]) -> Union[User, None]:
pass
@abstractmethod
async def thirdparty_sign_in_up(self, third_party_id: str, third_party_user_id: str, email: str,
email_verified: bool, user_context: Dict[str, Any]) -> Union[ThirdPartySignInUpOkResult, ThirdPartySignInUpFieldError]:
pass
@abstractmethod
async def emailpassword_sign_in(self, email: str, password: str, user_context: Dict[str, Any]) -> Union[EmailPasswordSignInOkResult, EmailPasswordSignInWrongCredentialsError]:
pass
@abstractmethod
async def emailpassword_sign_up(self, email: str, password: str, user_context: Dict[str, Any]) -> Union[EmailPasswordSignUpOkResult, EmailPasswordSignUpEmailAlreadyExistsError]:
pass
@abstractmethod
async def create_reset_password_token(self, user_id: str, user_context: Dict[str, Any]) -> Union[CreateResetPasswordOkResult, CreateResetPasswordWrongUserIdError]:
pass
@abstractmethod
async def reset_password_using_token(self, token: str, new_password: str, user_context: Dict[str, Any]) -> Union[ResetPasswordUsingTokenOkResult, ResetPasswordUsingTokenInvalidTokenError]:
pass
@abstractmethod
async def update_email_or_password(self, user_id: str, email: Union[str, None],
password: Union[str, None], user_context: Dict[str, Any]) -> Union[UpdateEmailOrPasswordOkResult, UpdateEmailOrPasswordEmailAlreadyExistsError, UpdateEmailOrPasswordUnknownUserIdError]:
pass
class ThirdPartySignInUpPostOkResult(APIResponse):
status: str = 'OK'
def __init__(self, user: User, created_new_user: bool,
auth_code_response: Dict[str, Any],
session: SessionContainer):
self.user = user
self.created_new_user = created_new_user
self.auth_code_response = auth_code_response
self.session = session
def to_json(self) -> Dict[str, Any]:
if self.user.third_party_info is None:
raise Exception("Third Party Info cannot be None")
return {
'status': self.status,
'user': {
'id': self.user.user_id,
'email': self.user.email,
'timeJoined': self.user.time_joined,
'thirdParty': {
'id': self.user.third_party_info.id,
'userId': self.user.third_party_info.user_id
}
},
'createdNewUser': self.created_new_user
}
class EmailPasswordSignInPostOkResult(APIResponse):
status: str = 'OK'
def __init__(self, user: User, session: SessionContainer):
self.user = user
self.session = session
def to_json(self) -> Dict[str, Any]:
return {
'status': self.status,
'user': {
'id': self.user.user_id,
'email': self.user.email,
'timeJoined': self.user.time_joined
},
}
class EmailPasswordSignUpPostOkResult(APIResponse):
status: str = 'OK'
def __init__(self, user: User, session: SessionContainer):
self.user = user
self.session = session
def to_json(self) -> Dict[str, Any]:
return {
'status': self.status,
'user': {
'id': self.user.user_id,
'email': self.user.email,
'timeJoined': self.user.time_joined
},
}
class APIInterface(ABC):
def __init__(self):
self.disable_thirdparty_sign_in_up_post = False
self.disable_emailpassword_sign_up_post = False
self.disable_emailpassword_sign_in_post = False
self.disable_authorisation_url_get = False
self.disable_email_exists_get = False
self.disable_generate_password_reset_token_post = False
self.disable_password_reset_post = False
self.disable_apple_redirect_handler_post = False
@abstractmethod
async def authorisation_url_get(self, provider: Provider,
api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]) -> AuthorisationUrlGetOkResult:
pass
@abstractmethod
async def thirdparty_sign_in_up_post(self, provider: Provider, code: str, redirect_uri: str, client_id: Union[str, None], auth_code_response: Union[Dict[str, Any], None],
api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]) -> Union[ThirdPartySignInUpPostOkResult, ThirdPartySignInUpPostNoEmailGivenByProviderResponse, ThirdPartySignInUpPostFieldError]:
pass
@abstractmethod
async def emailpassword_sign_in_post(self, form_fields: List[FormField],
api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[EmailPasswordSignInPostOkResult, EmailPasswordSignInPostWrongCredentialsError]:
pass
@abstractmethod
async def emailpassword_sign_up_post(self, form_fields: List[FormField],
api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[EmailPasswordSignUpPostOkResult, EmailPasswordSignUpPostEmailAlreadyExistsError]:
pass
@abstractmethod
async def emailpassword_email_exists_get(self, email: str, api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> EmailPasswordEmailExistsGetOkResult:
pass
@abstractmethod
async def generate_password_reset_token_post(self, form_fields: List[FormField],
api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> GeneratePasswordResetTokenPostOkResult:
pass
@abstractmethod
async def password_reset_post(self, form_fields: List[FormField], token: str,
api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[PasswordResetPostOkResult, PasswordResetPostInvalidTokenResponse]:
pass
@abstractmethod
async def apple_redirect_handler_post(self, code: str, state: str,
api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]):
pass
Classes
class APIInterface
-
Helper class that provides a standard way to create an ABC using inheritance.
Expand source code
class APIInterface(ABC): def __init__(self): self.disable_thirdparty_sign_in_up_post = False self.disable_emailpassword_sign_up_post = False self.disable_emailpassword_sign_in_post = False self.disable_authorisation_url_get = False self.disable_email_exists_get = False self.disable_generate_password_reset_token_post = False self.disable_password_reset_post = False self.disable_apple_redirect_handler_post = False @abstractmethod async def authorisation_url_get(self, provider: Provider, api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]) -> AuthorisationUrlGetOkResult: pass @abstractmethod async def thirdparty_sign_in_up_post(self, provider: Provider, code: str, redirect_uri: str, client_id: Union[str, None], auth_code_response: Union[Dict[str, Any], None], api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]) -> Union[ThirdPartySignInUpPostOkResult, ThirdPartySignInUpPostNoEmailGivenByProviderResponse, ThirdPartySignInUpPostFieldError]: pass @abstractmethod async def emailpassword_sign_in_post(self, form_fields: List[FormField], api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[EmailPasswordSignInPostOkResult, EmailPasswordSignInPostWrongCredentialsError]: pass @abstractmethod async def emailpassword_sign_up_post(self, form_fields: List[FormField], api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[EmailPasswordSignUpPostOkResult, EmailPasswordSignUpPostEmailAlreadyExistsError]: pass @abstractmethod async def emailpassword_email_exists_get(self, email: str, api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> EmailPasswordEmailExistsGetOkResult: pass @abstractmethod async def generate_password_reset_token_post(self, form_fields: List[FormField], api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> GeneratePasswordResetTokenPostOkResult: pass @abstractmethod async def password_reset_post(self, form_fields: List[FormField], token: str, api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[PasswordResetPostOkResult, PasswordResetPostInvalidTokenResponse]: pass @abstractmethod async def apple_redirect_handler_post(self, code: str, state: str, api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]): pass
Ancestors
- abc.ABC
Subclasses
Methods
async def apple_redirect_handler_post(self, code: str, state: str, api_options: APIOptions, user_context: Dict[str, Any])
-
Expand source code
@abstractmethod async def apple_redirect_handler_post(self, code: str, state: str, api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]): pass
-
Expand source code
@abstractmethod async def authorisation_url_get(self, provider: Provider, api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]) -> AuthorisationUrlGetOkResult: pass
async def emailpassword_email_exists_get(self, email: str, api_options: APIOptions, user_context: Dict[str, Any]) ‑> EmailExistsGetOkResult
-
Expand source code
@abstractmethod async def emailpassword_email_exists_get(self, email: str, api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> EmailPasswordEmailExistsGetOkResult: pass
async def emailpassword_sign_in_post(self, form_fields: List[FormField], api_options: APIOptions, user_context: Dict[str, Any]) ‑> Union[EmailPasswordSignInPostOkResult, SignInPostWrongCredentialsError]
-
Expand source code
@abstractmethod async def emailpassword_sign_in_post(self, form_fields: List[FormField], api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[EmailPasswordSignInPostOkResult, EmailPasswordSignInPostWrongCredentialsError]: pass
async def emailpassword_sign_up_post(self, form_fields: List[FormField], api_options: APIOptions, user_context: Dict[str, Any]) ‑> Union[EmailPasswordSignUpPostOkResult, SignUpPostEmailAlreadyExistsError]
-
Expand source code
@abstractmethod async def emailpassword_sign_up_post(self, form_fields: List[FormField], api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[EmailPasswordSignUpPostOkResult, EmailPasswordSignUpPostEmailAlreadyExistsError]: pass
async def generate_password_reset_token_post(self, form_fields: List[FormField], api_options: APIOptions, user_context: Dict[str, Any]) ‑> GeneratePasswordResetTokenPostOkResult
-
Expand source code
@abstractmethod async def generate_password_reset_token_post(self, form_fields: List[FormField], api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> GeneratePasswordResetTokenPostOkResult: pass
async def password_reset_post(self, form_fields: List[FormField], token: str, api_options: APIOptions, user_context: Dict[str, Any]) ‑> Union[PasswordResetPostOkResult, PasswordResetPostInvalidTokenResponse]
-
Expand source code
@abstractmethod async def password_reset_post(self, form_fields: List[FormField], token: str, api_options: EmailPasswordAPIOptions, user_context: Dict[str, Any]) -> Union[PasswordResetPostOkResult, PasswordResetPostInvalidTokenResponse]: pass
async def thirdparty_sign_in_up_post(self, provider: Provider, code: str, redirect_uri: str, client_id: Optional[str], auth_code_response: Optional[Dict[str, Any]], api_options: APIOptions, user_context: Dict[str, Any]) ‑> Union[ThirdPartySignInUpPostOkResult, SignInUpPostNoEmailGivenByProviderResponse, SignInUpPostFieldError]
-
Expand source code
@abstractmethod async def thirdparty_sign_in_up_post(self, provider: Provider, code: str, redirect_uri: str, client_id: Union[str, None], auth_code_response: Union[Dict[str, Any], None], api_options: ThirdPartyAPIOptions, user_context: Dict[str, Any]) -> Union[ThirdPartySignInUpPostOkResult, ThirdPartySignInUpPostNoEmailGivenByProviderResponse, ThirdPartySignInUpPostFieldError]: pass
class EmailPasswordSignInOkResult (user: User)
-
Expand source code
class EmailPasswordSignInOkResult(): def __init__(self, user: User): self.user = user
class EmailPasswordSignInPostOkResult (user: User, session: SessionContainer)
-
Helper class that provides a standard way to create an ABC using inheritance.
Expand source code
class EmailPasswordSignInPostOkResult(APIResponse): status: str = 'OK' def __init__(self, user: User, session: SessionContainer): self.user = user self.session = session def to_json(self) -> Dict[str, Any]: return { 'status': self.status, 'user': { 'id': self.user.user_id, 'email': self.user.email, 'timeJoined': self.user.time_joined }, }
Ancestors
- APIResponse
- abc.ABC
Class variables
var status : str
Methods
def to_json(self) ‑> Dict[str, Any]
-
Expand source code
def to_json(self) -> Dict[str, Any]: return { 'status': self.status, 'user': { 'id': self.user.user_id, 'email': self.user.email, 'timeJoined': self.user.time_joined }, }
class EmailPasswordSignUpOkResult (user: User)
-
Expand source code
class EmailPasswordSignUpOkResult(): def __init__(self, user: User): self.user = user
class EmailPasswordSignUpPostOkResult (user: User, session: SessionContainer)
-
Helper class that provides a standard way to create an ABC using inheritance.
Expand source code
class EmailPasswordSignUpPostOkResult(APIResponse): status: str = 'OK' def __init__(self, user: User, session: SessionContainer): self.user = user self.session = session def to_json(self) -> Dict[str, Any]: return { 'status': self.status, 'user': { 'id': self.user.user_id, 'email': self.user.email, 'timeJoined': self.user.time_joined }, }
Ancestors
- APIResponse
- abc.ABC
Class variables
var status : str
Methods
def to_json(self) ‑> Dict[str, Any]
-
Expand source code
def to_json(self) -> Dict[str, Any]: return { 'status': self.status, 'user': { 'id': self.user.user_id, 'email': self.user.email, 'timeJoined': self.user.time_joined }, }
class RecipeInterface
-
Helper class that provides a standard way to create an ABC using inheritance.
Expand source code
class RecipeInterface(ABC): def __init__(self): pass @abstractmethod async def get_user_by_id(self, user_id: str, user_context: Dict[str, Any]) -> Union[User, None]: pass @abstractmethod async def get_users_by_email(self, email: str, user_context: Dict[str, Any]) -> List[User]: pass @abstractmethod async def get_user_by_thirdparty_info(self, third_party_id: str, third_party_user_id: str, user_context: Dict[str, Any]) -> Union[User, None]: pass @abstractmethod async def thirdparty_sign_in_up(self, third_party_id: str, third_party_user_id: str, email: str, email_verified: bool, user_context: Dict[str, Any]) -> Union[ThirdPartySignInUpOkResult, ThirdPartySignInUpFieldError]: pass @abstractmethod async def emailpassword_sign_in(self, email: str, password: str, user_context: Dict[str, Any]) -> Union[EmailPasswordSignInOkResult, EmailPasswordSignInWrongCredentialsError]: pass @abstractmethod async def emailpassword_sign_up(self, email: str, password: str, user_context: Dict[str, Any]) -> Union[EmailPasswordSignUpOkResult, EmailPasswordSignUpEmailAlreadyExistsError]: pass @abstractmethod async def create_reset_password_token(self, user_id: str, user_context: Dict[str, Any]) -> Union[CreateResetPasswordOkResult, CreateResetPasswordWrongUserIdError]: pass @abstractmethod async def reset_password_using_token(self, token: str, new_password: str, user_context: Dict[str, Any]) -> Union[ResetPasswordUsingTokenOkResult, ResetPasswordUsingTokenInvalidTokenError]: pass @abstractmethod async def update_email_or_password(self, user_id: str, email: Union[str, None], password: Union[str, None], user_context: Dict[str, Any]) -> Union[UpdateEmailOrPasswordOkResult, UpdateEmailOrPasswordEmailAlreadyExistsError, UpdateEmailOrPasswordUnknownUserIdError]: pass
Ancestors
- abc.ABC
Subclasses
Methods
async def create_reset_password_token(self, user_id: str, user_context: Dict[str, Any]) ‑> Union[CreateResetPasswordOkResult, CreateResetPasswordWrongUserIdError]
-
Expand source code
@abstractmethod async def create_reset_password_token(self, user_id: str, user_context: Dict[str, Any]) -> Union[CreateResetPasswordOkResult, CreateResetPasswordWrongUserIdError]: pass
async def emailpassword_sign_in(self, email: str, password: str, user_context: Dict[str, Any]) ‑> Union[EmailPasswordSignInOkResult, SignInWrongCredentialsError]
-
Expand source code
@abstractmethod async def emailpassword_sign_in(self, email: str, password: str, user_context: Dict[str, Any]) -> Union[EmailPasswordSignInOkResult, EmailPasswordSignInWrongCredentialsError]: pass
async def emailpassword_sign_up(self, email: str, password: str, user_context: Dict[str, Any]) ‑> Union[EmailPasswordSignUpOkResult, SignUpEmailAlreadyExistsError]
-
Expand source code
@abstractmethod async def emailpassword_sign_up(self, email: str, password: str, user_context: Dict[str, Any]) -> Union[EmailPasswordSignUpOkResult, EmailPasswordSignUpEmailAlreadyExistsError]: pass
async def get_user_by_id(self, user_id: str, user_context: Dict[str, Any]) ‑> Optional[None]
-
Expand source code
@abstractmethod async def get_user_by_id(self, user_id: str, user_context: Dict[str, Any]) -> Union[User, None]: pass
async def get_user_by_thirdparty_info(self, third_party_id: str, third_party_user_id: str, user_context: Dict[str, Any]) ‑> Optional[None]
-
Expand source code
@abstractmethod async def get_user_by_thirdparty_info(self, third_party_id: str, third_party_user_id: str, user_context: Dict[str, Any]) -> Union[User, None]: pass
async def get_users_by_email(self, email: str, user_context: Dict[str, Any]) ‑> List[User]
-
Expand source code
@abstractmethod async def get_users_by_email(self, email: str, user_context: Dict[str, Any]) -> List[User]: pass
async def reset_password_using_token(self, token: str, new_password: str, user_context: Dict[str, Any]) ‑> Union[ResetPasswordUsingTokenOkResult, ResetPasswordUsingTokenInvalidTokenError]
-
Expand source code
@abstractmethod async def reset_password_using_token(self, token: str, new_password: str, user_context: Dict[str, Any]) -> Union[ResetPasswordUsingTokenOkResult, ResetPasswordUsingTokenInvalidTokenError]: pass
async def thirdparty_sign_in_up(self, third_party_id: str, third_party_user_id: str, email: str, email_verified: bool, user_context: Dict[str, Any]) ‑> Union[ThirdPartySignInUpOkResult, SignInUpFieldError]
-
Expand source code
@abstractmethod async def thirdparty_sign_in_up(self, third_party_id: str, third_party_user_id: str, email: str, email_verified: bool, user_context: Dict[str, Any]) -> Union[ThirdPartySignInUpOkResult, ThirdPartySignInUpFieldError]: pass
async def update_email_or_password(self, user_id: str, email: Optional[str], password: Optional[str], user_context: Dict[str, Any]) ‑> Union[UpdateEmailOrPasswordOkResult, UpdateEmailOrPasswordEmailAlreadyExistsError, UpdateEmailOrPasswordUnknownUserIdError]
-
Expand source code
@abstractmethod async def update_email_or_password(self, user_id: str, email: Union[str, None], password: Union[str, None], user_context: Dict[str, Any]) -> Union[UpdateEmailOrPasswordOkResult, UpdateEmailOrPasswordEmailAlreadyExistsError, UpdateEmailOrPasswordUnknownUserIdError]: pass
class ThirdPartySignInUpOkResult (user: User, created_new_user: bool)
-
Expand source code
class ThirdPartySignInUpOkResult(): def __init__(self, user: User, created_new_user: bool): self.user = user self.created_new_user = created_new_user
class ThirdPartySignInUpPostOkResult (user: User, created_new_user: bool, auth_code_response: Dict[str, Any], session: SessionContainer)
-
Helper class that provides a standard way to create an ABC using inheritance.
Expand source code
class ThirdPartySignInUpPostOkResult(APIResponse): status: str = 'OK' def __init__(self, user: User, created_new_user: bool, auth_code_response: Dict[str, Any], session: SessionContainer): self.user = user self.created_new_user = created_new_user self.auth_code_response = auth_code_response self.session = session def to_json(self) -> Dict[str, Any]: if self.user.third_party_info is None: raise Exception("Third Party Info cannot be None") return { 'status': self.status, 'user': { 'id': self.user.user_id, 'email': self.user.email, 'timeJoined': self.user.time_joined, 'thirdParty': { 'id': self.user.third_party_info.id, 'userId': self.user.third_party_info.user_id } }, 'createdNewUser': self.created_new_user }
Ancestors
- APIResponse
- abc.ABC
Class variables
var status : str
Methods
def to_json(self) ‑> Dict[str, Any]
-
Expand source code
def to_json(self) -> Dict[str, Any]: if self.user.third_party_info is None: raise Exception("Third Party Info cannot be None") return { 'status': self.status, 'user': { 'id': self.user.user_id, 'email': self.user.email, 'timeJoined': self.user.time_joined, 'thirdParty': { 'id': self.user.third_party_info.id, 'userId': self.user.third_party_info.user_id } }, 'createdNewUser': self.created_new_user }