Skip to content

Commit e31b60d

Browse files
committed
refactor: Clean up usages of email verification in other recipes in favour of ev claims
1 parent 720f593 commit e31b60d

File tree

16 files changed

+60
-216
lines changed

16 files changed

+60
-216
lines changed

supertokens_python/recipe/emailpassword/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
exceptions = ex
2727
InputOverrideConfig = utils.InputOverrideConfig
2828
InputResetPasswordUsingTokenFeature = utils.InputResetPasswordUsingTokenFeature
29-
# InputEmailVerificationConfig = utils.InputEmailVerificationConfig
3029
InputSignUpFeature = utils.InputSignUpFeature
3130
InputFormField = utils.InputFormField
3231
SMTPService = emaildelivery_services.SMTPService

supertokens_python/recipe/emailpassword/interfaces.py

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,6 @@ def __init__(
144144
config: EmailPasswordConfig,
145145
recipe_implementation: RecipeInterface,
146146
app_info: AppInfo,
147-
# email_verification_recipe_implementation: EmailVerificationRecipeInterface,
148147
email_delivery: EmailDeliveryIngredient[EmailTemplateVars],
149148
):
150149
self.request: BaseRequest = request
@@ -153,56 +152,9 @@ def __init__(
153152
self.config: EmailPasswordConfig = config
154153
self.recipe_implementation: RecipeInterface = recipe_implementation
155154
self.app_info = app_info
156-
# self.email_verification_recipe_implementation: EmailVerificationRecipeInterface = (
157-
# email_verification_recipe_implementation
158-
# )
159155
self.email_delivery = email_delivery
160156

161157

162-
class EmailVerifyPostOkResult(APIResponse):
163-
status: str = "OK"
164-
165-
def __init__(self, user: User):
166-
self.user = user
167-
168-
def to_json(self) -> Dict[str, Any]:
169-
return {
170-
"status": self.status,
171-
"user": {"id": self.user.user_id, "email": self.user.email},
172-
}
173-
174-
175-
class EmailVerifyPostInvalidTokenError(APIResponse):
176-
status: str = "EMAIL_VERIFICATION_INVALID_TOKEN_ERROR"
177-
178-
def to_json(self) -> Dict[str, Any]:
179-
return {"status": self.status}
180-
181-
182-
class IsEmailVerifiedGetOkResult(APIResponse):
183-
status: str = "OK"
184-
185-
def __init__(self, is_verified: bool):
186-
self.is_verified = is_verified
187-
188-
def to_json(self) -> Dict[str, Any]:
189-
return {"status": self.status, "isVerified": self.is_verified}
190-
191-
192-
class GenerateEmailVerifyTokenPostOkResult(APIResponse):
193-
status: str = "OK"
194-
195-
def to_json(self) -> Dict[str, Any]:
196-
return {"status": self.status}
197-
198-
199-
class GenerateEmailVerifyTokenPostEmailAlreadyVerifiedError(APIResponse):
200-
status: str = "EMAIL_ALREADY_VERIFIED_ERROR"
201-
202-
def to_json(self) -> Dict[str, Any]:
203-
return {"status": self.status}
204-
205-
206158
class EmailExistsGetOkResult(APIResponse):
207159
status: str = "OK"
208160

supertokens_python/recipe/emailpassword/utils.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -287,31 +287,6 @@ async def func(user: EmailVerificationUser, user_context: Dict[str, Any]):
287287
return func
288288

289289

290-
# def validate_and_normalise_email_verification_config(
291-
# recipe: EmailPasswordRecipe,
292-
# config: Union[InputEmailVerificationConfig, None],
293-
# override: InputOverrideConfig,
294-
# ) -> ParentRecipeEmailVerificationConfig:
295-
# create_and_send_custom_email = None
296-
# get_email_verification_url = None
297-
# if config is None:
298-
# config = InputEmailVerificationConfig()
299-
# if config.create_and_send_custom_email is not None:
300-
# create_and_send_custom_email = email_verification_create_and_send_custom_email(
301-
# recipe, config.create_and_send_custom_email
302-
# )
303-
# if config.get_email_verification_url is not None:
304-
# get_email_verification_url = email_verification_get_email_verification_url(
305-
# recipe, config.get_email_verification_url
306-
# )
307-
# return ParentRecipeEmailVerificationConfig(
308-
# get_email_for_user_id=recipe.get_email_for_user_id,
309-
# create_and_send_custom_email=create_and_send_custom_email,
310-
# get_email_verification_url=get_email_verification_url,
311-
# override=override.email_verification_feature,
312-
# )
313-
314-
315290
class InputOverrideConfig:
316291
def __init__(
317292
self,

supertokens_python/recipe/emailverification/interfaces.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,7 @@ def to_json(self) -> Dict[str, Any]:
125125

126126

127127
class EmailVerifyPostInvalidTokenError(APIResponse):
128-
def __init__(self):
129-
self.status = "EMAIL_VERIFICATION_INVALID_TOKEN_ERROR"
128+
status = "EMAIL_VERIFICATION_INVALID_TOKEN_ERROR"
130129

131130
def to_json(self) -> Dict[str, Any]:
132131
return {"status": self.status}

supertokens_python/recipe/passwordless/api/implementation.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -274,18 +274,19 @@ async def consume_code_post(
274274

275275
if user.email is not None:
276276
ev_instance = EmailVerificationRecipe.get_instance()
277-
if ev_instance:
278-
token_response = await ev_instance.recipe_implementation.create_email_verification_token(
277+
token_response = (
278+
await ev_instance.recipe_implementation.create_email_verification_token(
279279
user.user_id,
280280
user.email,
281281
user_context,
282282
)
283+
)
283284

284-
if isinstance(token_response, CreateEmailVerificationTokenOkResult):
285-
await ev_instance.recipe_implementation.verify_email_using_token(
286-
token_response.token,
287-
user_context,
288-
)
285+
if isinstance(token_response, CreateEmailVerificationTokenOkResult):
286+
await ev_instance.recipe_implementation.verify_email_using_token(
287+
token_response.token,
288+
user_context,
289+
)
289290

290291
session = await create_new_session(
291292
api_options.request, user.user_id, {}, {}, user_context=user_context

supertokens_python/recipe/thirdparty/asyncio/__init__.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
from supertokens_python.recipe.thirdparty.recipe import ThirdPartyRecipe
1818

19-
from ..types import EmailTemplateVars, User
19+
from ..types import User
2020

2121

2222
async def get_user_by_id(
@@ -65,13 +65,3 @@ async def sign_in_up(
6565
return await ThirdPartyRecipe.get_instance().recipe_implementation.sign_in_up(
6666
third_party_id, third_party_user_id, email, email_verified, user_context
6767
)
68-
69-
70-
async def send_email(
71-
input_: EmailTemplateVars, user_context: Union[None, Dict[str, Any]] = None
72-
):
73-
if user_context is None:
74-
user_context = {}
75-
return await ThirdPartyRecipe.get_instance().email_delivery.ingredient_interface_impl.send_email(
76-
input_, user_context
77-
)

supertokens_python/recipe/thirdparty/recipe.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
from .utils import SignInAndUpFeature, InputOverrideConfig
3333

3434
from supertokens_python.exceptions import SuperTokensError, raise_general_exception
35-
from supertokens_python.ingredients.emaildelivery import EmailDeliveryIngredient
3635
from supertokens_python.recipe.emailverification import EmailVerificationRecipe
3736

3837
from .api import (
@@ -42,14 +41,13 @@
4241
)
4342
from .constants import APPLE_REDIRECT_HANDLER, AUTHORISATIONURL, SIGNINUP
4443
from .exceptions import SuperTokensThirdPartyError
45-
from .types import ThirdPartyIngredients, EmailTemplateVars
44+
from .types import ThirdPartyIngredients
4645
from .utils import validate_and_normalise_user_input
4746

4847

4948
class ThirdPartyRecipe(RecipeModule):
5049
recipe_id = "thirdparty"
5150
__instance = None
52-
email_delivery: EmailDeliveryIngredient[EmailTemplateVars]
5351

5452
def __init__(
5553
self,

supertokens_python/recipe/thirdparty/syncio/__init__.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
from supertokens_python.async_to_sync_wrapper import sync
1717

18-
from ..types import EmailTemplateVars, User
18+
from ..types import User
1919

2020

2121
def get_user_by_id(
@@ -62,11 +62,3 @@ def sign_in_up(
6262
third_party_id, third_party_user_id, email, email_verified, user_context
6363
)
6464
)
65-
66-
67-
def send_email(
68-
input_: EmailTemplateVars, user_context: Union[None, Dict[str, Any]] = None
69-
):
70-
from supertokens_python.recipe.thirdparty.asyncio import send_email
71-
72-
return sync(send_email(input_, user_context))

supertokens_python/recipe/thirdparty/types.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@
1414
from typing import Callable, Dict, List, Union
1515

1616
from supertokens_python.framework.request import BaseRequest
17-
from supertokens_python.ingredients.emaildelivery.types import (
18-
EmailDeliveryInterface,
19-
SMTPServiceInterface,
20-
)
21-
from supertokens_python.recipe.emailverification import types as ev_types
2217

2318

2419
class ThirdPartyInfo:
@@ -79,14 +74,5 @@ def __init__(self, users: List[User], next_pagination_token: Union[str, None]):
7974
self.next_pagination_token = next_pagination_token
8075

8176

82-
# Export:
83-
EmailTemplateVars = ev_types.VerificationEmailTemplateVars
84-
VerificationEmailTemplateVars = ev_types.VerificationEmailTemplateVars
85-
86-
SMTPOverrideInput = SMTPServiceInterface[EmailTemplateVars]
87-
88-
EmailDeliveryOverrideInput = EmailDeliveryInterface[EmailTemplateVars]
89-
90-
9177
class ThirdPartyIngredients:
9278
pass

supertokens_python/recipe/thirdparty/utils.py

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,16 @@
1313
# under the License.
1414
from __future__ import annotations
1515

16-
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict, List, Set, Union
16+
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Set, Union
1717

1818
from supertokens_python.exceptions import raise_bad_input_exception
1919

2020
from .interfaces import APIInterface, RecipeInterface
2121

2222
if TYPE_CHECKING:
23-
from .recipe import ThirdPartyRecipe
2423
from .provider import Provider
2524

2625
from jwt import PyJWKClient, decode
27-
from supertokens_python.recipe.emailverification.utils import (
28-
OverrideConfig as EmailVerificationOverrideConfig,
29-
)
30-
31-
from ..emailverification.types import User as EmailVerificationUser
32-
from .types import User
3326

3427

3528
class SignInAndUpFeature:
@@ -76,50 +69,14 @@ def __init__(self, providers: List[Provider]):
7669
self.providers = providers
7770

7871

79-
def email_verification_create_and_send_custom_email(
80-
recipe: ThirdPartyRecipe,
81-
create_and_send_custom_email: Callable[
82-
[User, str, Dict[str, Any]], Awaitable[None]
83-
],
84-
) -> Callable[[EmailVerificationUser, str, Dict[str, Any]], Awaitable[None]]:
85-
async def func(
86-
user: EmailVerificationUser, link: str, user_context: Dict[str, Any]
87-
):
88-
user_info = await recipe.recipe_implementation.get_user_by_id(
89-
user.user_id, user_context
90-
)
91-
if user_info is None:
92-
raise Exception("Unknown User ID provided")
93-
return await create_and_send_custom_email(user_info, link, user_context)
94-
95-
return func
96-
97-
98-
def email_verification_get_email_verification_url(
99-
recipe: ThirdPartyRecipe,
100-
get_email_verification_url: Callable[[User, Dict[str, Any]], Awaitable[str]],
101-
) -> Callable[[EmailVerificationUser, Any], Awaitable[str]]:
102-
async def func(user: EmailVerificationUser, user_context: Dict[str, Any]):
103-
user_info = await recipe.recipe_implementation.get_user_by_id(
104-
user.user_id, user_context
105-
)
106-
if user_info is None:
107-
raise Exception("Unknown User ID provided")
108-
return await get_email_verification_url(user_info, user_context)
109-
110-
return func
111-
112-
11372
class InputOverrideConfig:
11473
def __init__(
11574
self,
11675
functions: Union[Callable[[RecipeInterface], RecipeInterface], None] = None,
11776
apis: Union[Callable[[APIInterface], APIInterface], None] = None,
118-
email_verification_feature: Union[EmailVerificationOverrideConfig, None] = None,
11977
):
12078
self.functions = functions
12179
self.apis = apis
122-
self.email_verification_feature = email_verification_feature
12380

12481

12582
class OverrideConfig:

supertokens_python/recipe/thirdpartyemailpassword/types.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ def __init__(
4040

4141
# Export:
4242
EmailTemplateVars = ep_types.EmailTemplateVars
43-
# VerificationEmailTemplateVars = ep_types.VerificationEmailTemplateVars
4443
PasswordResetEmailTemplateVars = ep_types.PasswordResetEmailTemplateVars
4544

4645
SMTPOverrideInput = SMTPServiceInterface[EmailTemplateVars]

supertokens_python/recipe/thirdpartypasswordless/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
from .smsdelivery import services as smsdelivery_services
2929
from .types import EmailTemplateVars, SMSTemplateVars
3030

31-
InputEmailVerificationConfig = utils.InputEmailVerificationConfig
3231
InputOverrideConfig = utils.InputOverrideConfig
3332
exceptions = ex
3433
ContactConfig = passwordless.ContactConfig

supertokens_python/recipe/thirdpartypasswordless/types.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
TwilioServiceInterface,
2626
)
2727
from ..passwordless import types as pless_types
28-
from ..thirdparty import types as tp_types
2928
from ..thirdparty.types import ThirdPartyInfo
3029

3130

@@ -50,9 +49,6 @@ def __init__(
5049
# Export:
5150
EmailTemplateVars = pless_types.EmailTemplateVars
5251
SMSTemplateVars = pless_types.SMSTemplateVars
53-
VerificationEmailTemplateVars = (
54-
tp_types.VerificationEmailTemplateVars
55-
) # TODO: Remove this.
5652
PasswordlessLoginEmailTemplateVars = pless_types.PasswordlessLoginEmailTemplateVars
5753
PasswordlessLoginSMSTemplateVars = pless_types.PasswordlessLoginSMSTemplateVars
5854

supertokens_python/recipe/thirdpartypasswordless/utils.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
BackwardCompatibilityService,
3535
)
3636
from supertokens_python.recipe.thirdpartypasswordless.types import SMSTemplateVars
37-
from supertokens_python.utils import deprecated_warn
3837
from typing_extensions import Literal
3938

4039
from ..emailverification.types import User as EmailVerificationUser
@@ -60,24 +59,6 @@
6059
)
6160

6261

63-
class InputEmailVerificationConfig:
64-
def __init__(
65-
self,
66-
get_email_verification_url: Union[
67-
Callable[[User, Any], Awaitable[str]], None
68-
] = None,
69-
create_and_send_custom_email: Union[
70-
Callable[[User, str, Any], Awaitable[None]], None
71-
] = None,
72-
):
73-
self.get_email_verification_url = get_email_verification_url
74-
self.create_and_send_custom_email = create_and_send_custom_email
75-
if create_and_send_custom_email:
76-
deprecated_warn(
77-
"create_and_send_custom_email is deprecated. Please use email delivery config instead"
78-
)
79-
80-
8162
def email_verification_create_and_send_custom_email(
8263
recipe: ThirdPartyPasswordlessRecipe,
8364
create_and_send_custom_email: Callable[

0 commit comments

Comments
 (0)