Skip to content

Commit 27282d4

Browse files
committed
changes based on feedback
1 parent 10395c4 commit 27282d4

File tree

12 files changed

+40
-75
lines changed

12 files changed

+40
-75
lines changed

supertokens_python/recipe/emailpassword/api/implementation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ async def generate_password_reset_token_post(
9494
password_reset_link = (
9595
api_options.app_info.website_domain.get_as_string_dangerous()
9696
+ api_options.app_info.website_base_path.get_as_string_dangerous()
97-
+ "?token="
97+
+ "/reset-password?token="
9898
+ token
9999
+ "&rid="
100100
+ api_options.recipe_id

supertokens_python/recipe/emailpassword/emaildelivery/services/smtp/service_implementation/__init__.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
from supertokens_python.recipe.emailverification.emaildelivery.services.smtp.service_implementation import (
2727
ServiceImplementation as EVServiceImplementation,
2828
)
29-
from supertokens_python.recipe.emailverification.types import (
30-
VerificationEmailTemplateVars,
31-
)
3229

3330

3431
class ServiceImplementation(SMTPServiceInterface[EmailTemplateVars]):
@@ -49,6 +46,4 @@ async def send_raw_email(
4946
async def get_content(
5047
self, template_vars: EmailTemplateVars, user_context: Dict[str, Any]
5148
) -> EmailContent:
52-
if isinstance(template_vars, VerificationEmailTemplateVars):
53-
return await self.ev_get_content(template_vars, user_context)
5449
return get_password_reset_email_content(template_vars)

supertokens_python/recipe/emailpassword/recipe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from ..emailverification.interfaces import (
2828
UnknownUserIdError,
2929
GetEmailForUserIdOkResult,
30-
EmailDoesnotExistError,
30+
EmailDoesNotExistError,
3131
)
3232

3333
from .api.implementation import APIImplementation
@@ -255,7 +255,7 @@ def reset():
255255

256256
async def get_email_for_user_id(
257257
self, user_id: str, user_context: Dict[str, Any]
258-
) -> Union[UnknownUserIdError, GetEmailForUserIdOkResult, EmailDoesnotExistError]:
258+
) -> Union[UnknownUserIdError, GetEmailForUserIdOkResult, EmailDoesNotExistError]:
259259
user_info = await self.recipe_implementation.get_user_by_id(
260260
user_id, user_context
261261
)

supertokens_python/recipe/emailpassword/utils.py

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -207,26 +207,6 @@ def __init__(
207207
self.form_fields_for_generate_token_form = form_fields_for_generate_token_form
208208

209209

210-
#
211-
# class InputEmailVerificationConfig:
212-
# def __init__(
213-
# self,
214-
# get_email_verification_url: Union[
215-
# Callable[[User, Dict[str, Any]], Awaitable[str]], None
216-
# ] = None,
217-
# create_and_send_custom_email: Union[
218-
# Callable[[User, str, Dict[str, Any]], Awaitable[None]], None
219-
# ] = None,
220-
# ):
221-
# self.get_email_verification_url = get_email_verification_url
222-
# self.create_and_send_custom_email = create_and_send_custom_email
223-
#
224-
# if create_and_send_custom_email:
225-
# deprecated_warn(
226-
# "create_and_send_custom_email is deprecated. Please use email delivery config instead"
227-
# )
228-
229-
230210
def validate_and_normalise_reset_password_using_token_config(
231211
sign_up_config: InputSignUpFeature,
232212
) -> ResetPasswordUsingTokenFeature:
@@ -313,7 +293,6 @@ def __init__(
313293
sign_up_feature: SignUpFeature,
314294
sign_in_feature: SignInFeature,
315295
reset_password_using_token_feature: ResetPasswordUsingTokenFeature,
316-
# email_verification_feature: ParentRecipeEmailVerificationConfig,
317296
override: OverrideConfig,
318297
get_email_delivery_config: Callable[
319298
[RecipeInterface], EmailDeliveryConfigWithService[EmailTemplateVars]
@@ -322,7 +301,6 @@ def __init__(
322301
self.sign_up_feature = sign_up_feature
323302
self.sign_in_feature = sign_in_feature
324303
self.reset_password_using_token_feature = reset_password_using_token_feature
325-
# self.email_verification_feature = email_verification_feature
326304
self.override = override
327305
self.get_email_delivery_config = get_email_delivery_config
328306

@@ -333,7 +311,6 @@ def validate_and_normalise_user_input(
333311
reset_password_using_token_feature: Union[
334312
InputResetPasswordUsingTokenFeature, None
335313
] = None,
336-
# email_verification_feature: Union[InputEmailVerificationConfig, None] = None,
337314
override: Union[InputOverrideConfig, None] = None,
338315
email_delivery: Union[EmailDeliveryConfig[EmailTemplateVars], None] = None,
339316
) -> EmailPasswordConfig:
@@ -346,11 +323,6 @@ def validate_and_normalise_user_input(
346323
"reset_password_using_token_feature must be of type InputResetPasswordUsingTokenFeature or None"
347324
)
348325

349-
# if email_verification_feature is not None and not isinstance(email_verification_feature, InputEmailVerificationConfig): # type: ignore
350-
# raise ValueError(
351-
# "email_verification_feature must be of type InputEmailVerificationConfig or None"
352-
# )
353-
354326
if override is not None and not isinstance(override, InputOverrideConfig): # type: ignore
355327
raise ValueError("override must be of type InputOverrideConfig or None")
356328

@@ -386,9 +358,6 @@ def get_email_delivery_config(
386358
SignUpFeature(sign_up_feature.form_fields),
387359
SignInFeature(normalise_sign_in_form_fields(sign_up_feature.form_fields)),
388360
validate_and_normalise_reset_password_using_token_config(sign_up_feature),
389-
# validate_and_normalise_email_verification_config(
390-
# recipe, email_verification_feature, override
391-
# ),
392361
OverrideConfig(functions=override.functions, apis=override.apis),
393362
get_email_delivery_config=get_email_delivery_config,
394363
)

supertokens_python/recipe/emailverification/asyncio/__init__.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414

1515
from supertokens_python.recipe.emailverification.interfaces import (
1616
GetEmailForUserIdOkResult,
17-
EmailDoesnotExistError,
17+
EmailDoesNotExistError,
1818
CreateEmailVerificationTokenEmailAlreadyVerifiedError,
19-
UnverifyEmailOkResult, CreateEmailVerificationTokenOkResult,
19+
UnverifyEmailOkResult,
20+
CreateEmailVerificationTokenOkResult,
2021
)
2122
from supertokens_python.recipe.emailverification.types import EmailTemplateVars
2223
from supertokens_python.recipe.emailverification.recipe import EmailVerificationRecipe
@@ -26,15 +27,18 @@ async def create_email_verification_token(
2627
user_id: str,
2728
email: Optional[str] = None,
2829
user_context: Union[None, Dict[str, Any]] = None,
29-
) -> Union[CreateEmailVerificationTokenOkResult, CreateEmailVerificationTokenEmailAlreadyVerifiedError]:
30+
) -> Union[
31+
CreateEmailVerificationTokenOkResult,
32+
CreateEmailVerificationTokenEmailAlreadyVerifiedError,
33+
]:
3034
if user_context is None:
3135
user_context = {}
3236
recipe = EmailVerificationRecipe.get_instance()
3337
if email is None:
3438
email_info = await recipe.get_email_for_user_id(user_id, user_context)
3539
if isinstance(email_info, GetEmailForUserIdOkResult):
3640
email = email_info.email
37-
elif isinstance(email_info, EmailDoesnotExistError):
41+
elif isinstance(email_info, EmailDoesNotExistError):
3842
return CreateEmailVerificationTokenEmailAlreadyVerifiedError()
3943
else:
4044
raise Exception("Unknown User ID provided without email")
@@ -67,7 +71,7 @@ async def is_email_verified(
6771
email_info = await recipe.get_email_for_user_id(user_id, user_context)
6872
if isinstance(email_info, GetEmailForUserIdOkResult):
6973
email = email_info.email
70-
elif isinstance(email_info, EmailDoesnotExistError):
74+
elif isinstance(email_info, EmailDoesNotExistError):
7175
return True
7276
else:
7377
raise Exception("Unknown User ID provided without email")
@@ -90,7 +94,7 @@ async def revoke_email_verification_token(
9094
email_info = await recipe.get_email_for_user_id(user_id, user_context)
9195
if isinstance(email_info, GetEmailForUserIdOkResult):
9296
email = email_info.email
93-
elif isinstance(email_info, EmailDoesnotExistError):
97+
elif isinstance(email_info, EmailDoesNotExistError):
9498
# Here we are returning OK since that's how it used to work, but a later call
9599
# to is_verified will still return true
96100
return CreateEmailVerificationTokenEmailAlreadyVerifiedError()
@@ -115,7 +119,7 @@ async def unverify_email(
115119
email_info = await recipe.get_email_for_user_id(user_id, user_context)
116120
if isinstance(email_info, GetEmailForUserIdOkResult):
117121
email = email_info.email
118-
elif isinstance(email_info, EmailDoesnotExistError):
122+
elif isinstance(email_info, EmailDoesNotExistError):
119123
# Here we are returning OK since that's how it used to work, but a later call
120124
# to is_verified will still return true
121125
return UnverifyEmailOkResult

supertokens_python/recipe/emailverification/interfaces.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ def __init__(self, email: str):
202202
self.email = email
203203

204204

205-
class EmailDoesnotExistError(Exception):
205+
class EmailDoesNotExistError(Exception):
206206
pass
207207

208208

@@ -213,6 +213,6 @@ class UnknownUserIdError(Exception):
213213
TypeGetEmailForUserIdFunction = Callable[
214214
[str, Dict[str, Any]],
215215
Awaitable[
216-
Union[GetEmailForUserIdOkResult, EmailDoesnotExistError, UnknownUserIdError]
216+
Union[GetEmailForUserIdOkResult, EmailDoesNotExistError, UnknownUserIdError]
217217
],
218218
]

supertokens_python/recipe/emailverification/recipe.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
UnknownUserIdError,
3737
TypeGetEmailForUserIdFunction,
3838
GetEmailForUserIdOkResult,
39-
EmailDoesnotExistError,
39+
EmailDoesNotExistError,
4040
APIInterface,
4141
EmailVerifyPostOkResult,
4242
EmailVerifyPostInvalidTokenError,
@@ -250,7 +250,7 @@ def reset():
250250

251251
async def get_email_for_user_id(
252252
self, user_id: str, user_context: Dict[str, Any]
253-
) -> Union[GetEmailForUserIdOkResult, EmailDoesnotExistError, UnknownUserIdError]:
253+
) -> Union[GetEmailForUserIdOkResult, EmailDoesNotExistError, UnknownUserIdError]:
254254
if self.config.get_email_for_user_id is not None:
255255
res = await self.config.get_email_for_user_id(user_id, user_context)
256256
if not isinstance(res, UnknownUserIdError):
@@ -277,7 +277,7 @@ async def fetch_value(user_id: str, user_context: Dict[str, Any]) -> bool:
277277
return await recipe.recipe_implementation.is_email_verified(
278278
user_id, email_info.email, user_context
279279
)
280-
if isinstance(email_info, EmailDoesnotExistError):
280+
if isinstance(email_info, EmailDoesNotExistError):
281281
# we consider people without email addresses as validated
282282
return True
283283
raise Exception(
@@ -349,7 +349,7 @@ async def generate_email_verify_token_post(
349349
user_id, user_context
350350
)
351351

352-
if isinstance(email_info, EmailDoesnotExistError):
352+
if isinstance(email_info, EmailDoesNotExistError):
353353
log_debug_message(
354354
"Email verification email not sent to user %s because it doesn't have an email address.",
355355
user_id,

supertokens_python/recipe/passwordless/api/implementation.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,8 @@ async def consume_code_post(
273273
user = response.user
274274

275275
if user.email is not None:
276-
ev_instance = EmailVerificationRecipe.get_instance()
276+
ev_instance = EmailVerificationRecipe.get_instance_optional()
277+
assert ev_instance is not None
277278
token_response = (
278279
await ev_instance.recipe_implementation.create_email_verification_token(
279280
user.user_id,

supertokens_python/recipe/passwordless/recipe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
from ..emailverification import EmailVerificationRecipe
5959
from ..emailverification.interfaces import (
6060
GetEmailForUserIdOkResult,
61-
EmailDoesnotExistError,
61+
EmailDoesNotExistError,
6262
UnknownUserIdError,
6363
)
6464
from ...post_init_callbacks import PostSTInitCallbacks
@@ -349,5 +349,5 @@ async def get_email_for_user_id(self, user_id: str, user_context: Dict[str, Any]
349349
if user_info is not None:
350350
if user_info.email is not None:
351351
return GetEmailForUserIdOkResult(user_info.email)
352-
return EmailDoesnotExistError()
352+
return EmailDoesNotExistError()
353353
return UnknownUserIdError()

supertokens_python/recipe/thirdparty/api/implementation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ async def sign_in_up_post(
163163
)
164164

165165
if email_verified:
166-
ev_instance = EmailVerificationRecipe.get_instance()
166+
ev_instance = EmailVerificationRecipe.get_instance_optional()
167167
assert ev_instance is not None
168168
token_response = (
169169
await ev_instance.recipe_implementation.create_email_verification_token(

supertokens_python/recipe/thirdpartyemailpassword/recipe.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from __future__ import annotations
1515

1616
from os import environ
17-
from typing import TYPE_CHECKING, Any, Dict, List, Union
17+
from typing import TYPE_CHECKING, List, Union
1818

1919
from supertokens_python.framework.response import BaseResponse
2020
from supertokens_python.ingredients.emaildelivery.types import EmailDeliveryConfig
@@ -47,7 +47,6 @@
4747
from .recipeimplementation.third_party_recipe_implementation import (
4848
RecipeImplementation as ThirdPartyRecipeImplementation,
4949
)
50-
from ..emailverification.interfaces import GetEmailForUserIdOkResult, UnknownUserIdError
5150

5251
if TYPE_CHECKING:
5352
from supertokens_python.framework.request import BaseRequest
@@ -296,12 +295,3 @@ def reset():
296295
):
297296
raise Exception(None, "calling testing function in non testing env")
298297
ThirdPartyEmailPasswordRecipe.__instance = None
299-
300-
async def get_email_for_user_id(self, user_id: str, user_context: Dict[str, Any]):
301-
user_info = await self.recipe_implementation.get_user_by_id(
302-
user_id, user_context
303-
)
304-
if user_info is not None:
305-
return GetEmailForUserIdOkResult(user_info.email)
306-
307-
return UnknownUserIdError()

tests/thirdpartypasswordless/test_emaildelivery.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
emailverification,
4040
)
4141
from supertokens_python.recipe.emailverification.interfaces import (
42-
CreateEmailVerificationTokenEmailAlreadyVerifiedError, CreateEmailVerificationTokenOkResult,
42+
CreateEmailVerificationTokenOkResult,
4343
)
4444
from supertokens_python.recipe.passwordless import ContactEmailOnlyConfig
4545
from supertokens_python.recipe.passwordless.types import (
@@ -136,7 +136,9 @@ async def test_email_verify_default_backward_compatibility(
136136
thirdpartypasswordless.init(
137137
contact_config=ContactEmailOnlyConfig(),
138138
flow_type="USER_INPUT_CODE_AND_MAGIC_LINK",
139-
providers=[Github(client_id="", client_secret="")], # Note: providers must be set to init tp recipe
139+
providers=[
140+
Github(client_id="", client_secret="")
141+
], # Note: providers must be set to init tp recipe
140142
),
141143
session.init(),
142144
],
@@ -216,7 +218,9 @@ async def create_and_send_custom_email(
216218
thirdpartypasswordless.init(
217219
contact_config=ContactEmailOnlyConfig(),
218220
flow_type="USER_INPUT_CODE_AND_MAGIC_LINK",
219-
providers=[Github(client_id="", client_secret="")], # Note: providers must be set to init tp recipe
221+
providers=[
222+
Github(client_id="", client_secret="")
223+
], # Note: providers must be set to init tp recipe
220224
),
221225
session.init(),
222226
],
@@ -293,7 +297,9 @@ async def send_email(
293297
thirdpartypasswordless.init(
294298
contact_config=ContactEmailOnlyConfig(),
295299
flow_type="USER_INPUT_CODE_AND_MAGIC_LINK",
296-
providers=[Github(client_id="", client_secret="")], # Note: providers must be set to init tp recipe
300+
providers=[
301+
Github(client_id="", client_secret="")
302+
], # Note: providers must be set to init tp recipe
297303
),
298304
session.init(),
299305
],
@@ -432,7 +438,9 @@ async def send_email_override(
432438
thirdpartypasswordless.init(
433439
contact_config=ContactEmailOnlyConfig(),
434440
flow_type="USER_INPUT_CODE_AND_MAGIC_LINK",
435-
providers=[Github(client_id="", client_secret="")], # Note: providers must be set to init tp recipe
441+
providers=[
442+
Github(client_id="", client_secret="")
443+
], # Note: providers must be set to init tp recipe
436444
),
437445
session.init(),
438446
],
@@ -561,9 +569,7 @@ async def send_email_override(
561569
pless_response = await passwordlessSigninup("[email protected]", None, {})
562570
create_token = await create_email_verification_token(pless_response.user.user_id)
563571

564-
assert isinstance(
565-
create_token, CreateEmailVerificationTokenOkResult
566-
)
572+
assert isinstance(create_token, CreateEmailVerificationTokenOkResult)
567573
# TODO: Replaced CreateEmailVerificationTokenEmailAlreadyVerifiedError. Confirm if this is correct.
568574

569575
assert (

0 commit comments

Comments
 (0)