| public final class OAuth2ClientPropertiesMapper { |
| private static ClientRegistration getClientRegistration(String registrationId, |
| OAuth2ClientProperties.Registration properties, Map<String, Provider> providers) { |
| |
| Builder builder = getBuilderFromIssuerIfPossible(registrationId, properties.getProvider(), providers); |
| if (builder == null) { |
| |
| builder = getBuilder(registrationId, properties.getProvider(), providers); |
| } |
| |
| PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); |
| map.from(properties::getClientId).to(builder::clientId); |
| map.from(properties::getClientSecret).to(builder::clientSecret); |
| map.from(properties::getClientAuthenticationMethod) |
| .as(ClientAuthenticationMethod::new) |
| .to(builder::clientAuthenticationMethod); |
| map.from(properties::getAuthorizationGrantType) |
| .as(AuthorizationGrantType::new) |
| .to(builder::authorizationGrantType); |
| map.from(properties::getRedirectUri).to(builder::redirectUri); |
| map.from(properties::getScope).as(StringUtils::toStringArray).to(builder::scope); |
| map.from(properties::getClientName).to(builder::clientName); |
| return builder.build(); |
| } |
| |
| private static Builder getBuilderFromIssuerIfPossible(String registrationId, String configuredProviderId, |
| Map<String, Provider> providers) { |
| |
| String providerId = (configuredProviderId != null) ? configuredProviderId : registrationId; |
| |
| if (providers.containsKey(providerId)) { |
| Provider provider = providers.get(providerId); |
| String issuer = provider.getIssuerUri(); |
| if (issuer != null) { |
| Builder builder = ClientRegistrations.fromIssuerLocation(issuer).registrationId(registrationId); |
| return getBuilder(builder, provider); |
| } |
| } |
| return null; |
| } |
| |
| private static Builder getBuilder(String registrationId, String configuredProviderId, |
| Map<String, Provider> providers) { |
| |
| String providerId = (configuredProviderId != null) ? configuredProviderId : registrationId; |
| |
| CommonOAuth2Provider provider = getCommonProvider(providerId); |
| if (provider == null && !providers.containsKey(providerId)) { |
| throw new IllegalStateException(getErrorMessage(configuredProviderId, registrationId)); |
| } |
| |
| Builder builder = (provider != null) ? provider.getBuilder(registrationId) |
| : ClientRegistration.withRegistrationId(registrationId); |
| |
| if (providers.containsKey(providerId)) { |
| return getBuilder(builder, providers.get(providerId)); |
| } |
| return builder; |
| } |
| } |