Skip to content

Commit

Permalink
Merge pull request #407 from supertokens/userinfo-map
Browse files Browse the repository at this point in the history
fix: user info map
  • Loading branch information
rishabhpoddar authored Aug 11, 2023
2 parents 96ea6f3 + eec29e1 commit e1eca1e
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,4 @@ def ActiveDirectory(
if input.config.name is None:
input.config.name = "Active Directory"

if input.config.user_info_map is None:
input.config.user_info_map = UserInfoMap(UserFields(), UserFields())

if input.config.user_info_map.from_id_token_payload.user_id is None:
input.config.user_info_map.from_id_token_payload.user_id = "sub"

if input.config.user_info_map.from_id_token_payload.email is None:
input.config.user_info_map.from_id_token_payload.email = "email"

return NewProvider(input, ActiveDirectoryImpl)
13 changes: 13 additions & 0 deletions supertokens_python/recipe/thirdparty/providers/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,8 @@ def _normalize_input( # pylint: disable=no-self-use
from_user_info_api=UserFields(),
)

# These are safe defaults common to most providers. Each provider
# implementations override these as necessary
if input_config.user_info_map.from_id_token_payload.user_id is None:
input_config.user_info_map.from_id_token_payload.user_id = "sub"

Expand All @@ -226,6 +228,17 @@ def _normalize_input( # pylint: disable=no-self-use
"email_verified"
)

if input_config.user_info_map.from_user_info_api.user_id is None:
input_config.user_info_map.from_user_info_api.user_id = "sub"

if input_config.user_info_map.from_user_info_api.email is None:
input_config.user_info_map.from_user_info_api.email = "email"

if input_config.user_info_map.from_user_info_api.email_verified is None:
input_config.user_info_map.from_user_info_api.email_verified = (
"email_verified"
)

if input_config.generate_fake_email is None:

async def default_generate_fake_email(
Expand Down
6 changes: 0 additions & 6 deletions supertokens_python/recipe/thirdparty/providers/facebook.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,4 @@ def Facebook(input: ProviderInput) -> Provider: # pylint: disable=redefined-bui
if input.config.user_info_map.from_user_info_api.user_id is None:
input.config.user_info_map.from_user_info_api.user_id = "id"

if input.config.user_info_map.from_user_info_api.email is None:
input.config.user_info_map.from_user_info_api.email = "email"

if input.config.user_info_map.from_user_info_api.email_verified is None:
input.config.user_info_map.from_user_info_api.email = "verified"

return NewProvider(input, FacebookImpl)
9 changes: 0 additions & 9 deletions supertokens_python/recipe/thirdparty/providers/google.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,6 @@ def Google(
if input.config.user_info_map is None:
input.config.user_info_map = UserInfoMap(UserFields(), UserFields())

if input.config.user_info_map.from_user_info_api.user_id is None:
input.config.user_info_map.from_user_info_api.user_id = "id"

if input.config.user_info_map.from_user_info_api.email is None:
input.config.user_info_map.from_user_info_api.email = "email"

if input.config.user_info_map.from_user_info_api.email_verified is None:
input.config.user_info_map.from_user_info_api.email = "email_verified"

if input.config.authorization_endpoint_query_params is None:
input.config.authorization_endpoint_query_params = {}

Expand Down
11 changes: 1 addition & 10 deletions supertokens_python/recipe/thirdparty/providers/okta.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ async def get_config_for_client_type(
)

config.oidc_discovery_endpoint = (
f"{config.additional_config.get('oktaDomain')}.okta.com"
f"{config.additional_config.get('oktaDomain')}"
)

if config.scope is None:
Expand All @@ -54,13 +54,4 @@ def Okta(input: ProviderInput) -> Provider: # pylint: disable=redefined-builtin
if input.config.name is None:
input.config.name = "Okta"

if input.config.user_info_map is None:
input.config.user_info_map = UserInfoMap(UserFields(), UserFields())

if input.config.user_info_map.from_id_token_payload.user_id is None:
input.config.user_info_map.from_id_token_payload.user_id = "sub"

if input.config.user_info_map.from_id_token_payload.email is None:
input.config.user_info_map.from_id_token_payload.email = "email"

return NewProvider(input, OktaImpl)
38 changes: 38 additions & 0 deletions tests/thirdparty/test_multitenancy.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,41 @@ async def test_get_provider():
provider6 = await get_provider("t3", "linkedin", None)
assert provider6 is not None
assert provider6.config.third_party_id == "linkedin"


async def test_get_provider_returns_correct_config_from_core():
args = get_st_init_args([thirdparty.init()])
init(**args) # type: ignore
start_st()
setup_multitenancy_feature()

await create_or_update_third_party_config(
"public",
thirdparty.ProviderConfig(
"google",
clients=[
thirdparty.ProviderClientConfig(
client_id="core-client-id",
client_secret="core-secret",
)
],
),
)

thirdparty_info = await get_provider("public", "google")
assert thirdparty_info is not None
assert thirdparty_info.config.third_party_id == "google"

client = thirdparty_info.config.clients[0]
assert client.client_id == "core-client-id"
assert client.client_secret == "core-secret"
assert thirdparty_info.config.user_info_map.from_id_token_payload == {
"userId": "sub",
"email": "email",
"emailVerified": "email_verified",
}
assert thirdparty_info.config.user_info_map.from_user_info_api == {
"userId": "sub",
"email": "email",
"emailVerified": "email_verified",
}

0 comments on commit e1eca1e

Please sign in to comment.