Skip to content

Commit 7e77b92

Browse files
Merge pull request #276 from supertokens/feat/tp-rework
fix: thirdparty rework & multitenancy
2 parents e6e798d + 2cb8c5a commit 7e77b92

File tree

267 files changed

+11217
-4194
lines changed

Some content is hidden

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

267 files changed

+11217
-4194
lines changed

CHANGELOG.md

Lines changed: 505 additions & 1 deletion
Large diffs are not rendered by default.

coreDriverInterfaceSupported.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"_comment": "contains a list of core-driver interfaces branch names that this core supports",
33
"versions": [
4-
"2.21"
4+
"3.0"
55
]
6-
}
6+
}

dev-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ packaging==21.3
4242
pathspec==0.9.0
4343
pdoc3==0.10.0
4444
phonenumbers==8.12.48
45+
pkce==1.0.3
4546
platformdirs==2.5.1
4647
pluggy==1.0.0
4748
py==1.11.0

examples/with-django/with-thirdpartyemailpassword/project/settings.py

Lines changed: 78 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,6 @@
2929
session,
3030
thirdpartyemailpassword,
3131
)
32-
from supertokens_python.recipe.thirdpartyemailpassword import (
33-
Apple,
34-
Discord,
35-
Github,
36-
Google,
37-
GoogleWorkspaces,
38-
)
3932

4033
# Build paths inside the project like this: BASE_DIR / 'subdir'.
4134
BASE_DIR = Path(__file__).resolve().parent.parent
@@ -72,46 +65,88 @@ def get_website_domain():
7265
emailverification.init("REQUIRED"),
7366
thirdpartyemailpassword.init(
7467
providers=[
75-
Google(
76-
is_default=True,
77-
client_id=os.environ.get("GOOGLE_CLIENT_ID"), # type: ignore
78-
client_secret=os.environ.get("GOOGLE_CLIENT_SECRET"), # type: ignore
79-
),
80-
Google(
81-
client_id=os.environ.get("GOOGLE_CLIENT_ID_MOBILE"), # type: ignore
82-
client_secret=os.environ.get("GOOGLE_CLIENT_SECRET_MOBILE"), # type: ignore
83-
),
84-
Github(
85-
is_default=True,
86-
client_id=os.environ.get("GITHUB_CLIENT_ID"), # type: ignore
87-
client_secret=os.environ.get("GITHUB_CLIENT_SECRET"), # type: ignore
88-
),
89-
Github(
90-
client_id=os.environ.get("GITHUB_CLIENT_ID_MOBILE"), # type: ignore
91-
client_secret=os.environ.get("GITHUB_CLIENT_SECRET_MOBILE"), # type: ignore
68+
thirdpartyemailpassword.ProviderInput(
69+
config=thirdpartyemailpassword.ProviderConfig(
70+
third_party_id="google",
71+
clients=[
72+
thirdpartyemailpassword.ProviderClientConfig(
73+
client_id=os.environ["GOOGLE_CLIENT_ID"],
74+
client_secret=os.environ["GOOGLE_CLIENT_SECRET"],
75+
client_type="web",
76+
),
77+
thirdpartyemailpassword.ProviderClientConfig(
78+
client_id=os.environ["GOOGLE_CLIENT_ID_MOBILE"],
79+
client_secret=os.environ["GOOGLE_CLIENT_SECRET_MOBILE"],
80+
client_type="mobile",
81+
),
82+
],
83+
),
9284
),
93-
Apple(
94-
is_default=True,
95-
client_id=os.environ.get("APPLE_CLIENT_ID"), # type: ignore
96-
client_key_id=os.environ.get("APPLE_KEY_ID"), # type: ignore
97-
client_team_id=os.environ.get("APPLE_TEAM_ID"), # type: ignore
98-
client_private_key=os.environ.get("APPLE_PRIVATE_KEY"), # type: ignore
85+
thirdpartyemailpassword.ProviderInput(
86+
config=thirdpartyemailpassword.ProviderConfig(
87+
third_party_id="github",
88+
clients=[
89+
thirdpartyemailpassword.ProviderClientConfig(
90+
client_id=os.environ["GITHUB_CLIENT_ID"],
91+
client_secret=os.environ["GITHUB_CLIENT_SECRET"],
92+
client_type="web",
93+
),
94+
thirdpartyemailpassword.ProviderClientConfig(
95+
client_id=os.environ["GITHUB_CLIENT_ID_MOBILE"],
96+
client_secret=os.environ["GITHUB_CLIENT_SECRET_MOBILE"],
97+
client_type="mobile",
98+
),
99+
],
100+
)
99101
),
100-
Apple(
101-
client_id=os.environ.get("APPLE_CLIENT_ID_MOBILE"), # type: ignore
102-
client_key_id=os.environ.get("APPLE_KEY_ID"), # type: ignore
103-
client_team_id=os.environ.get("APPLE_TEAM_ID"), # type: ignore
104-
client_private_key=os.environ.get("APPLE_PRIVATE_KEY"), # type: ignore
102+
thirdpartyemailpassword.ProviderInput(
103+
config=thirdpartyemailpassword.ProviderConfig(
104+
third_party_id="apple",
105+
clients=[
106+
thirdpartyemailpassword.ProviderClientConfig(
107+
client_id=os.environ["APPLE_CLIENT_ID"],
108+
client_type="web",
109+
additional_config={
110+
"keyId": os.environ["APPLE_KEY_ID"],
111+
"teamId": os.environ["APPLE_TEAM_ID"],
112+
"privateKey": os.environ["APPLE_PRIVATE_KEY"],
113+
},
114+
),
115+
thirdpartyemailpassword.ProviderClientConfig(
116+
client_id=os.environ["APPLE_CLIENT_ID_MOBILE"],
117+
client_type="mobile",
118+
additional_config={
119+
"keyId": os.environ["APPLE_KEY_ID"],
120+
"teamId": os.environ["APPLE_TEAM_ID"],
121+
"privateKey": os.environ["APPLE_PRIVATE_KEY"],
122+
},
123+
),
124+
],
125+
)
105126
),
106-
GoogleWorkspaces(
107-
is_default=True,
108-
client_id=os.environ.get("GOOGLE_WORKSPACES_CLIENT_ID"), # type: ignore
109-
client_secret=os.environ.get("GOOGLE_WORKSPACES_CLIENT_SECRET"), # type: ignore
127+
thirdpartyemailpassword.ProviderInput(
128+
config=thirdpartyemailpassword.ProviderConfig(
129+
third_party_id="google-workspaces",
130+
clients=[
131+
thirdpartyemailpassword.ProviderClientConfig(
132+
client_id=os.environ["GOOGLE_WORKSPACES_CLIENT_ID"],
133+
client_secret=os.environ[
134+
"GOOGLE_WORKSPACES_CLIENT_SECRET"
135+
],
136+
),
137+
],
138+
)
110139
),
111-
Discord(
112-
is_default=True,
113-
client_id=os.environ.get("DISCORD_CLIENT_ID"), # type: ignore
114-
client_secret=os.environ.get("DISCORD_CLIENT_SECRET"), # type: ignore
140+
thirdpartyemailpassword.ProviderInput(
141+
config=thirdpartyemailpassword.ProviderConfig(
142+
third_party_id="discord",
143+
clients=[
144+
thirdpartyemailpassword.ProviderClientConfig(
145+
client_id=os.environ["DISCORD_CLIENT_ID"],
146+
client_secret=os.environ["DISCORD_CLIENT_SECRET"],
147+
),
148+
],
149+
)
115150
),
116151
]
117152
),

examples/with-fastapi/with-thirdpartyemailpassword/main.py

Lines changed: 81 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,11 @@
1919
emailverification,
2020
session,
2121
thirdpartyemailpassword,
22+
usermetadata,
2223
)
2324
from supertokens_python.recipe.session import SessionContainer
2425
from supertokens_python.recipe.session.framework.fastapi import verify_session
25-
from supertokens_python.recipe.thirdpartyemailpassword import (
26-
Apple,
27-
Discord,
28-
Github,
29-
Google,
30-
GoogleWorkspaces,
31-
)
26+
3227

3328
load_dotenv()
3429

@@ -60,48 +55,91 @@ def get_website_domain():
6055
session.init(),
6156
dashboard.init(),
6257
emailverification.init("REQUIRED"),
58+
usermetadata.init(),
6359
thirdpartyemailpassword.init(
6460
providers=[
65-
Google(
66-
is_default=True,
67-
client_id=os.environ.get("GOOGLE_CLIENT_ID"), # type: ignore
68-
client_secret=os.environ.get("GOOGLE_CLIENT_SECRET"), # type: ignore
69-
),
70-
Google(
71-
client_id=os.environ.get("GOOGLE_CLIENT_ID_MOBILE"), # type: ignore
72-
client_secret=os.environ.get("GOOGLE_CLIENT_SECRET"), # type: ignore
73-
),
74-
Github(
75-
is_default=True,
76-
client_id=os.environ.get("GITHUB_CLIENT_ID"), # type: ignore
77-
client_secret=os.environ.get("GITHUB_CLIENT_SECRET"), # type: ignore
78-
),
79-
Github(
80-
client_id=os.environ.get("GITHUB_CLIENT_ID_MOBILE"), # type: ignore
81-
client_secret=os.environ.get("GITHUB_CLIENT_SECRET_MOBILE"), # type: ignore
61+
thirdpartyemailpassword.ProviderInput(
62+
config=thirdpartyemailpassword.ProviderConfig(
63+
third_party_id="google",
64+
clients=[
65+
thirdpartyemailpassword.ProviderClientConfig(
66+
client_id=os.environ["GOOGLE_CLIENT_ID"],
67+
client_secret=os.environ["GOOGLE_CLIENT_SECRET"],
68+
client_type="web",
69+
),
70+
thirdpartyemailpassword.ProviderClientConfig(
71+
client_id=os.environ["GOOGLE_CLIENT_ID_MOBILE"],
72+
client_secret=os.environ["GOOGLE_CLIENT_SECRET_MOBILE"],
73+
client_type="mobile",
74+
),
75+
],
76+
),
8277
),
83-
Apple(
84-
is_default=True,
85-
client_id=os.environ.get("APPLE_CLIENT_ID"), # type: ignore
86-
client_key_id=os.environ.get("APPLE_KEY_ID"), # type: ignore
87-
client_team_id=os.environ.get("APPLE_TEAM_ID"), # type: ignore
88-
client_private_key=os.environ.get("APPLE_PRIVATE_KEY"), # type: ignore
78+
thirdpartyemailpassword.ProviderInput(
79+
config=thirdpartyemailpassword.ProviderConfig(
80+
third_party_id="github",
81+
clients=[
82+
thirdpartyemailpassword.ProviderClientConfig(
83+
client_id=os.environ["GITHUB_CLIENT_ID"],
84+
client_secret=os.environ["GITHUB_CLIENT_SECRET"],
85+
client_type="web",
86+
),
87+
thirdpartyemailpassword.ProviderClientConfig(
88+
client_id=os.environ["GITHUB_CLIENT_ID_MOBILE"],
89+
client_secret=os.environ["GITHUB_CLIENT_SECRET_MOBILE"],
90+
client_type="mobile",
91+
),
92+
],
93+
)
8994
),
90-
Apple(
91-
client_id=os.environ.get("APPLE_CLIENT_ID_MOBILE"), # type: ignore
92-
client_key_id=os.environ.get("APPLE_KEY_ID"), # type: ignore
93-
client_team_id=os.environ.get("APPLE_TEAM_ID"), # type: ignore
94-
client_private_key=os.environ.get("APPLE_PRIVATE_KEY"), # type: ignore
95+
thirdpartyemailpassword.ProviderInput(
96+
config=thirdpartyemailpassword.ProviderConfig(
97+
third_party_id="apple",
98+
clients=[
99+
thirdpartyemailpassword.ProviderClientConfig(
100+
client_id=os.environ["APPLE_CLIENT_ID"],
101+
client_type="web",
102+
additional_config={
103+
"keyId": os.environ["APPLE_KEY_ID"],
104+
"teamId": os.environ["APPLE_TEAM_ID"],
105+
"privateKey": os.environ["APPLE_PRIVATE_KEY"],
106+
},
107+
),
108+
thirdpartyemailpassword.ProviderClientConfig(
109+
client_id=os.environ["APPLE_CLIENT_ID_MOBILE"],
110+
client_type="mobile",
111+
additional_config={
112+
"keyId": os.environ["APPLE_KEY_ID"],
113+
"teamId": os.environ["APPLE_TEAM_ID"],
114+
"privateKey": os.environ["APPLE_PRIVATE_KEY"],
115+
},
116+
),
117+
],
118+
)
95119
),
96-
GoogleWorkspaces(
97-
is_default=True,
98-
client_id=os.environ.get("GOOGLE_WORKSPACES_CLIENT_ID"), # type: ignore
99-
client_secret=os.environ.get("GOOGLE_WORKSPACES_CLIENT_SECRET"), # type: ignore
120+
thirdpartyemailpassword.ProviderInput(
121+
config=thirdpartyemailpassword.ProviderConfig(
122+
third_party_id="google-workspaces",
123+
clients=[
124+
thirdpartyemailpassword.ProviderClientConfig(
125+
client_id=os.environ["GOOGLE_WORKSPACES_CLIENT_ID"],
126+
client_secret=os.environ[
127+
"GOOGLE_WORKSPACES_CLIENT_SECRET"
128+
],
129+
),
130+
],
131+
)
100132
),
101-
Discord(
102-
is_default=True,
103-
client_id=os.environ.get("DISCORD_CLIENT_ID"), # type: ignore
104-
client_secret=os.environ.get("DISCORD_CLIENT_SECRET"), # type: ignore
133+
thirdpartyemailpassword.ProviderInput(
134+
config=thirdpartyemailpassword.ProviderConfig(
135+
third_party_id="discord",
136+
clients=[
137+
thirdpartyemailpassword.ProviderClientConfig(
138+
client_id=os.environ["DISCORD_CLIENT_ID"],
139+
client_secret=os.environ["DISCORD_CLIENT_SECRET"],
140+
),
141+
],
142+
)
105143
),
106144
]
107145
),

0 commit comments

Comments
 (0)