diff --git a/supertokens_python/recipe/multifactorauth/interfaces.py b/supertokens_python/recipe/multifactorauth/interfaces.py index 3d2708ea..22de2d2c 100644 --- a/supertokens_python/recipe/multifactorauth/interfaces.py +++ b/supertokens_python/recipe/multifactorauth/interfaces.py @@ -29,7 +29,7 @@ if TYPE_CHECKING: from supertokens_python.framework import BaseRequest, BaseResponse from supertokens_python.recipe.session import SessionContainer - from .types import MFARequirementList, AccountLinkingConfig + from .types import MFARequirementList, MultiFactorAuthConfig class RecipeInterface(ABC): @@ -98,14 +98,14 @@ def __init__( request: BaseRequest, response: BaseResponse, recipe_id: str, - config: AccountLinkingConfig, + config: MultiFactorAuthConfig, recipe_implementation: RecipeInterface, app_info: AppInfo, ): self.request: BaseRequest = request self.response: BaseResponse = response self.recipe_id: str = recipe_id - self.config: AccountLinkingConfig = config + self.config = config self.recipe_implementation: RecipeInterface = recipe_implementation self.app_info = app_info diff --git a/supertokens_python/recipe/multifactorauth/types.py b/supertokens_python/recipe/multifactorauth/types.py index f325c957..c1f35d6b 100644 --- a/supertokens_python/recipe/multifactorauth/types.py +++ b/supertokens_python/recipe/multifactorauth/types.py @@ -50,7 +50,17 @@ def __init__( self.apis = apis -class AccountLinkingConfig: +class InputOverrideConfig: + def __init__( + self, + functions: Union[Callable[[RecipeInterface], RecipeInterface], None] = None, + apis: Union[Callable[[APIInterface], APIInterface], None] = None, + ): + self.functions = functions + self.apis = apis + + +class MultiFactorAuthConfig: def __init__( self, first_factors: Optional[List[str]], diff --git a/supertokens_python/recipe/multifactorauth/utils.py b/supertokens_python/recipe/multifactorauth/utils.py new file mode 100644 index 00000000..b3b18191 --- /dev/null +++ b/supertokens_python/recipe/multifactorauth/utils.py @@ -0,0 +1,36 @@ +# Copyright (c) 2024, VRAI Labs and/or its affiliates. All rights reserved. +# +# This software is licensed under the Apache License, Version 2.0 (the +# "License") as published by the Apache Software Foundation. +# +# You may not use this file except in compliance with the License. You may +# obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +from __future__ import annotations + +from typing import TYPE_CHECKING, List, Optional, Union + + +if TYPE_CHECKING: + from .types import OverrideConfig, InputOverrideConfig, MultiFactorAuthConfig + + +def validate_and_normalise_user_input( + first_factors: Optional[List[str]], + override: Union[InputOverrideConfig, None] = None, +) -> MultiFactorAuthConfig: + if first_factors is not None and len(first_factors) == 0: + raise ValueError("'first_factors' can be either None or a non-empty list") + + if override is None: + override = InputOverrideConfig() + + return MultiFactorAuthConfig( + first_factors=first_factors, + override=OverrideConfig(functions=override.functions, apis=override.apis), + )