Skip to content

Commit 6794ffc

Browse files
committed
fix: Update serialization keys and add tests
1 parent c0f5322 commit 6794ffc

File tree

3 files changed

+107
-31
lines changed

3 files changed

+107
-31
lines changed

supertokens_python/recipe/multitenancy/recipe_implementation.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def parse_tenant_config(tenant: Dict[str, Any]) -> TenantConfigResponse:
5252
UserInfoMap,
5353
UserFields,
5454
ProviderClientConfig,
55+
ProviderConfig,
5556
)
5657

5758
providers: List[ProviderConfig] = []
@@ -76,33 +77,33 @@ def parse_tenant_config(tenant: Dict[str, Any]) -> TenantConfigResponse:
7677
providers.append(
7778
ProviderConfig(
7879
third_party_id=p["thirdPartyId"],
79-
name=p["name"],
80+
name=p.get("name"),
8081
clients=[
8182
ProviderClientConfig(
8283
client_id=c["clientId"],
83-
client_secret=c["clientSecret"],
84-
client_type=c["clientType"],
85-
scope=c["scope"],
86-
force_pkce=c["forcePkce"],
87-
additional_config=c["additionalConfig"],
84+
client_secret=c.get("clientSecret"),
85+
client_type=c.get("clientType"),
86+
scope=c.get("scope"),
87+
force_pkce=c.get("forcePKCE", False),
88+
additional_config=c.get("additionalConfig"),
8889
)
8990
for c in p["clients"]
9091
],
91-
authorization_endpoint=p["authorizationEndpoint"],
92-
authorization_endpoint_query_params=p[
92+
authorization_endpoint=p.get("authorizationEndpoint"),
93+
authorization_endpoint_query_params=p.get(
9394
"authorizationEndpointQueryParams"
94-
],
95-
token_endpoint=p["tokenEndpoint"],
96-
token_endpoint_body_params=p["tokenEndpointBodyParams"],
97-
user_info_endpoint=p["userInfoEndpoint"],
98-
user_info_endpoint_query_params=p["userInfoEndpointQueryParams"],
99-
user_info_endpoint_headers=p["userInfoEndpointHeaders"],
100-
jwks_uri=p["jwksUri"],
101-
oidc_discovery_endpoint=p["oidcDiscoveryEndpoint"],
95+
),
96+
token_endpoint=p.get("tokenEndpoint"),
97+
token_endpoint_body_params=p.get("tokenEndpointBodyParams"),
98+
user_info_endpoint=p.get("userInfoEndpoint"),
99+
user_info_endpoint_query_params=p.get("userInfoEndpointQueryParams"),
100+
user_info_endpoint_headers=p.get("userInfoEndpointHeaders"),
101+
jwks_uri=p.get("jwksURI"),
102+
oidc_discovery_endpoint=p.get("oidcDiscoveryEndpoint"),
102103
user_info_map=user_info_map,
103-
require_email=p["requireEmail"],
104-
validate_id_token_payload=p["validateIdTokenPayload"],
105-
generate_fake_email=p["generateFakeEmail"],
104+
require_email=p.get("requireEmail", True),
105+
validate_id_token_payload=None,
106+
generate_fake_email=None,
106107
)
107108
)
108109

supertokens_python/recipe/thirdparty/provider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def to_json(self) -> Dict[str, Any]:
103103
"clientSecret": self.client_secret,
104104
"clientType": self.client_type,
105105
"scope": self.scope,
106-
"forcePkce": self.force_pkce,
106+
"forcePKCE": self.force_pkce,
107107
"additionalConfig": self.additional_config,
108108
}
109109

@@ -261,7 +261,7 @@ def to_json(self) -> Dict[str, Any]:
261261
"userInfoEndpoint": self.user_info_endpoint,
262262
"userInfoEndpointQueryParams": self.user_info_endpoint_query_params,
263263
"userInfoEndpointHeaders": self.user_info_endpoint_headers,
264-
"jwksUri": self.jwks_uri,
264+
"jwksURI": self.jwks_uri,
265265
"oidcDiscoveryEndpoint": self.oidc_discovery_endpoint,
266266
"userInfoMap": self.user_info_map.to_json()
267267
if self.user_info_map is not None

tests/multitenancy/test_tenants_crud.py

Lines changed: 85 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from fastapi import FastAPI
1515
from pytest import mark, fixture
1616
from starlette.testclient import TestClient
17+
from typing import Any, Dict
1718

1819
from supertokens_python import init
1920
from supertokens_python.framework.fastapi import get_middleware
@@ -47,6 +48,8 @@
4748
from supertokens_python.recipe.thirdparty.provider import (
4849
ProviderConfig,
4950
ProviderClientConfig,
51+
UserInfoMap,
52+
UserFields,
5053
)
5154

5255

@@ -130,28 +133,100 @@ async def test_tenant_thirdparty_config():
130133
tenant_config = await get_tenant("t1")
131134

132135
assert len(tenant_config.third_party.providers) == 1
133-
assert tenant_config.third_party.providers[0].third_party_id == "google"
134-
assert tenant_config.third_party.providers[0].clients is not None
135-
assert len(tenant_config.third_party.providers[0].clients) == 1
136-
assert tenant_config.third_party.providers[0].clients[0].client_id == "abcd"
136+
provider = tenant_config.third_party.providers[0]
137+
assert provider.third_party_id == "google"
138+
assert provider.clients is not None
139+
assert len(provider.clients) == 1
140+
assert provider.clients[0].client_id == "abcd"
141+
assert provider.clients[0].client_secret is None
142+
assert provider.clients[0].force_pkce is False
143+
assert provider.require_email is True
144+
145+
async def validate_id_token_payload(
146+
_: Dict[str, Any], __: Any, ___: Dict[str, Any]
147+
):
148+
return
149+
150+
async def generate_fake_email(_: str, __: Dict[str, Any]):
151+
137152

138153
# update thirdparty config
139154
await create_or_update_third_party_config(
140155
"t1",
141156
ProviderConfig(
142157
third_party_id="google",
143158
name="Custom name",
144-
clients=[ProviderClientConfig(client_id="efgh")],
159+
clients=[
160+
ProviderClientConfig(
161+
client_id="efgh",
162+
client_secret="ijkl",
163+
scope=["m", "n"],
164+
force_pkce=True,
165+
additional_config={"o": "p"},
166+
)
167+
],
168+
authorization_endpoint="http://localhost:8080/auth",
169+
authorization_endpoint_query_params={"a": "b"},
170+
token_endpoint="http://localhost:8080/token",
171+
token_endpoint_body_params={"c": "d"},
172+
user_info_endpoint="http://localhost:8080/userinfo",
173+
user_info_endpoint_query_params={"e": "f"},
174+
user_info_endpoint_headers={"g": "h"},
175+
jwks_uri="http://localhost:8080/.well-known/jwks.json",
176+
oidc_discovery_endpoint="http://localhost:8080/.well-known/openid-configuration",
177+
user_info_map=UserInfoMap(
178+
from_id_token_payload=UserFields(
179+
user_id="userid",
180+
email="email",
181+
email_verified="is_verified",
182+
),
183+
from_user_info_api=UserFields(),
184+
),
185+
require_email=False,
186+
validate_id_token_payload=validate_id_token_payload,
187+
generate_fake_email=generate_fake_email,
145188
),
146189
)
147190

148191
tenant_config = await get_tenant("t1")
149192
assert len(tenant_config.third_party.providers) == 1
150-
assert tenant_config.third_party.providers[0].third_party_id == "google"
151-
assert tenant_config.third_party.providers[0].name == "Custom name"
152-
assert tenant_config.third_party.providers[0].clients is not None
153-
assert len(tenant_config.third_party.providers[0].clients) == 1
154-
assert tenant_config.third_party.providers[0].clients[0].client_id == "efgh"
193+
provider = tenant_config.third_party.providers[0]
194+
assert provider.third_party_id == "google"
195+
assert provider.name == "Custom name"
196+
assert provider.clients is not None
197+
assert len(provider.clients) == 1
198+
assert provider.clients[0].client_id == "efgh"
199+
assert provider.clients[0].client_secret == "ijkl"
200+
assert provider.clients[0].scope == ["m", "n"]
201+
assert provider.clients[0].force_pkce is True
202+
assert provider.clients[0].additional_config == {"o": "p"}
203+
204+
assert provider.name == "Custom name"
205+
assert provider.authorization_endpoint == "http://localhost:8080/auth"
206+
assert provider.authorization_endpoint_query_params == {"a": "b"}
207+
assert provider.token_endpoint == "http://localhost:8080/token"
208+
assert provider.token_endpoint_body_params == {"c": "d"}
209+
assert provider.user_info_endpoint == "http://localhost:8080/userinfo"
210+
assert provider.user_info_endpoint_query_params == {"e": "f"}
211+
assert provider.user_info_endpoint_headers == {"g": "h"}
212+
assert provider.jwks_uri == "http://localhost:8080/.well-known/jwks.json"
213+
assert (
214+
provider.oidc_discovery_endpoint
215+
== "http://localhost:8080/.well-known/openid-configuration"
216+
)
217+
218+
assert provider.user_info_map is not None
219+
assert provider.user_info_map.from_id_token_payload.user_id == "userid"
220+
assert provider.user_info_map.from_id_token_payload.email == "email"
221+
assert provider.user_info_map.from_id_token_payload.email_verified == "is_verified"
222+
assert provider.user_info_map.from_user_info_api is not None
223+
assert provider.user_info_map.from_user_info_api.user_id is None
224+
assert provider.user_info_map.from_user_info_api.email is None
225+
assert provider.user_info_map.from_user_info_api.email_verified is None
226+
227+
assert provider.require_email is False
228+
assert provider.validate_id_token_payload is None
229+
assert provider.generate_fake_email is None
155230

156231
# delete thirdparty config
157232
await delete_third_party_config("t1", "google")

0 commit comments

Comments
 (0)