Skip to content

Commit 96cdec8

Browse files
Merge pull request #380 from supertokens/fix/passwordless-mt
feat: All changes related to passwordless multitenancy
2 parents fec9094 + 071501c commit 96cdec8

File tree

65 files changed

+1095
-317
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1095
-317
lines changed

supertokens_python/recipe/dashboard/api/userdetails/user_email_verify_token_post.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,17 @@ async def handle_email_verify_token_post(
5959

6060
assert isinstance(email_verification_token, CreateEmailVerificationTokenOkResult)
6161

62+
# TODO: Pass tenant id
63+
tenant_id = "pass-tenant-id"
6264
email_verify_link = get_email_verify_link(
63-
api_options.app_info, email_verification_token.token, user_id
65+
api_options.app_info, email_verification_token.token, user_id, tenant_id
6466
)
6567

6668
await send_email(
6769
VerificationEmailTemplateVars(
6870
user=VerificationEmailTemplateVarsUser(user_id, email_response.email),
6971
email_verify_link=email_verify_link,
70-
user_context={},
72+
tenant_id=tenant_id,
7173
)
7274
)
7375

supertokens_python/recipe/emailpassword/api/implementation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ async def generate_password_reset_token_post(
111111
send_email_input = PasswordResetEmailTemplateVars(
112112
user=PasswordResetEmailTemplateVarsUser(user.user_id, user.email),
113113
password_reset_link=password_reset_link,
114+
tenant_id=tenant_id,
114115
)
115116
await api_options.email_delivery.ingredient_interface_impl.send_email(
116117
send_email_input, user_context

supertokens_python/recipe/emailpassword/asyncio/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ async def sign_up(
109109

110110

111111
async def send_email(
112-
input_: EmailTemplateVars, user_context: Union[None, Dict[str, Any]] = None
112+
input_: EmailTemplateVars,
113+
user_context: Union[None, Dict[str, Any]] = None,
113114
):
114115
if user_context is None:
115116
user_context = {}

supertokens_python/recipe/emailpassword/emaildelivery/services/backward_compatibility/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ def __init__(
8787
)
8888

8989
async def send_email(
90-
self, template_vars: EmailTemplateVars, user_context: Dict[str, Any]
90+
self,
91+
template_vars: EmailTemplateVars,
92+
user_context: Dict[str, Any],
9193
) -> None:
9294
user = await self.recipe_interface_impl.get_user_by_id(
9395
user_id=template_vars.user.id, user_context=user_context

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ def __init__(
4242
self.service_implementation = oi if override is None else override(oi)
4343

4444
async def send_email(
45-
self, template_vars: EmailTemplateVars, user_context: Dict[str, Any]
45+
self,
46+
template_vars: EmailTemplateVars,
47+
user_context: Dict[str, Any],
4648
) -> None:
4749
content = await self.service_implementation.get_content(
4850
template_vars, user_context

supertokens_python/recipe/emailpassword/syncio/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ def sign_up(
103103

104104

105105
def send_email(
106-
input_: EmailTemplateVars, user_context: Union[None, Dict[str, Any]] = None
106+
input_: EmailTemplateVars,
107+
user_context: Union[None, Dict[str, Any]] = None,
107108
):
108109
from supertokens_python.recipe.emailpassword.asyncio import send_email
109110

supertokens_python/recipe/emailpassword/types.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414
from __future__ import annotations
15-
from typing import Awaitable, Callable, List, TypeVar, Union
15+
from typing import Awaitable, Callable, List, TypeVar, Union, Optional
1616

1717
from supertokens_python.ingredients.emaildelivery import EmailDeliveryIngredient
1818
from supertokens_python.ingredients.emaildelivery.types import (
@@ -30,7 +30,7 @@ def __init__(
3030
self.time_joined = time_joined
3131
self.tenant_ids = tenant_ids
3232

33-
def __eq__(self, other: "User"): # type: ignore
33+
def __eq__(self, other: object):
3434
return (
3535
isinstance(other, self.__class__)
3636
and self.user_id == other.user_id
@@ -99,9 +99,11 @@ def __init__(
9999
self,
100100
user: PasswordResetEmailTemplateVarsUser,
101101
password_reset_link: str,
102+
tenant_id: Optional[str],
102103
) -> None:
103104
self.user = user
104105
self.password_reset_link = password_reset_link
106+
self.tenant_id = tenant_id
105107

106108

107109
# Export:

supertokens_python/recipe/emailverification/api/email_verify.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
async def handle_email_verify_api(
3030
api_implementation: APIInterface,
31+
tenant_id: str,
3132
api_options: APIOptions,
3233
user_context: Dict[str, Any],
3334
):
@@ -52,7 +53,7 @@ async def handle_email_verify_api(
5253
)
5354

5455
result = await api_implementation.email_verify_post(
55-
token, session, api_options, user_context
56+
token, session, tenant_id, api_options, user_context
5657
)
5758
else:
5859
if api_implementation.disable_is_email_verified_get:

supertokens_python/recipe/emailverification/asyncio/__init__.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@
2323
from supertokens_python.recipe.emailverification.types import EmailTemplateVars
2424
from supertokens_python.recipe.emailverification.recipe import EmailVerificationRecipe
2525

26+
from supertokens_python.recipe.multitenancy.constants import DEFAULT_TENANT_ID
27+
2628

2729
async def create_email_verification_token(
2830
user_id: str,
2931
email: Optional[str] = None,
32+
tenant_id: Optional[str] = None,
3033
user_context: Union[None, Dict[str, Any]] = None,
3134
) -> Union[
3235
CreateEmailVerificationTokenOkResult,
@@ -45,17 +48,19 @@ async def create_email_verification_token(
4548
raise Exception("Unknown User ID provided without email")
4649

4750
return await recipe.recipe_implementation.create_email_verification_token(
48-
user_id, email, user_context
51+
user_id, email, tenant_id or DEFAULT_TENANT_ID, user_context
4952
)
5053

5154

5255
async def verify_email_using_token(
53-
token: str, user_context: Union[None, Dict[str, Any]] = None
56+
token: str,
57+
tenant_id: Optional[str] = None,
58+
user_context: Union[None, Dict[str, Any]] = None,
5459
):
5560
if user_context is None:
5661
user_context = {}
5762
return await EmailVerificationRecipe.get_instance().recipe_implementation.verify_email_using_token(
58-
token, user_context
63+
token, tenant_id or DEFAULT_TENANT_ID, user_context
5964
)
6065

6166

@@ -85,6 +90,7 @@ async def is_email_verified(
8590
async def revoke_email_verification_tokens(
8691
user_id: str,
8792
email: Optional[str] = None,
93+
tenant_id: Optional[str] = None,
8894
user_context: Optional[Dict[str, Any]] = None,
8995
) -> RevokeEmailVerificationTokensOkResult:
9096
if user_context is None:
@@ -101,7 +107,7 @@ async def revoke_email_verification_tokens(
101107
raise Exception("Unknown User ID provided without email")
102108

103109
return await EmailVerificationRecipe.get_instance().recipe_implementation.revoke_email_verification_tokens(
104-
user_id, email, user_context
110+
user_id, email, tenant_id or DEFAULT_TENANT_ID, user_context
105111
)
106112

107113

@@ -131,7 +137,8 @@ async def unverify_email(
131137

132138

133139
async def send_email(
134-
input_: EmailTemplateVars, user_context: Union[None, Dict[str, Any]] = None
140+
input_: EmailTemplateVars,
141+
user_context: Union[None, Dict[str, Any]] = None,
135142
):
136143
if user_context is None:
137144
user_context = {}

supertokens_python/recipe/emailverification/emaildelivery/services/backward_compatibility/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ def __init__(
6666
)
6767

6868
async def send_email(
69-
self, template_vars: VerificationEmailTemplateVars, user_context: Dict[str, Any]
69+
self,
70+
template_vars: VerificationEmailTemplateVars,
71+
user_context: Dict[str, Any],
7072
) -> None:
7173
try:
7274
email_user = User(template_vars.user.id, template_vars.user.email)

0 commit comments

Comments
 (0)