package org.pac4j.config.builder; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod; import org.pac4j.config.client.PropertiesConstants; import org.pac4j.core.client.Client; import org.pac4j.oidc.client.AzureAdClient; import org.pac4j.oidc.client.GoogleOidcClient; import org.pac4j.oidc.client.OidcClient; import org.pac4j.oidc.config.OidcConfiguration; import java.util.List; import java.util.Map; import static org.pac4j.core.util.CommonHelper.isNotBlank; /** * Builder for OpenID connect clients. * * @author Jerome Leleu * @since 2.0.0 */ public class OidcClientBuilder extends AbstractBuilder implements PropertiesConstants { public OidcClientBuilder(final Map<String, String> properties) { super(properties); } public void tryCreateOidcClient(final List<Client> clients) { for (int i = 0; i <= MAX_NUM_CLIENTS; i++) { final String id = getProperty(OIDC_ID, i); final String secret = getProperty(OIDC_SECRET, i); if (isNotBlank(id) && isNotBlank(secret)) { final OidcConfiguration configuration = new OidcConfiguration(); configuration.setClientId(id); configuration.setSecret(secret); final String scope = getProperty(OIDC_SCOPE, i); if (isNotBlank(scope)) { configuration.setScope(scope); } final String discoveryUri = getProperty(OIDC_DISCOVERY_URI, i); if (isNotBlank(discoveryUri)) { configuration.setDiscoveryURI(discoveryUri); } final String useNonce = getProperty(OIDC_USE_NONCE, i); if (isNotBlank(useNonce)) { configuration.setUseNonce(Boolean.parseBoolean(useNonce)); } final String jwsAlgo = getProperty(OIDC_PREFERRED_JWS_ALGORITHM, i); if (isNotBlank(jwsAlgo)) { configuration.setPreferredJwsAlgorithm(JWSAlgorithm.parse(jwsAlgo)); } final String maxClockSkew = getProperty(OIDC_MAX_CLOCK_SKEW, i); if (isNotBlank(maxClockSkew)) { configuration.setMaxClockSkew(Integer.parseInt(maxClockSkew)); } final String clientAuthenticationMethod = getProperty(OIDC_CLIENT_AUTHENTICATION_METHOD, i); if (isNotBlank(clientAuthenticationMethod)) { configuration.setClientAuthenticationMethod(ClientAuthenticationMethod.parse(clientAuthenticationMethod)); } final String key1 = getProperty(OIDC_CUSTOM_PARAM_KEY1, i); final String value1 = getProperty(OIDC_CUSTOM_PARAM_VALUE1, i); if (isNotBlank(key1)) { configuration.addCustomParam(key1, value1); } final String key2 = getProperty(OIDC_CUSTOM_PARAM_KEY2, i); final String value2 = getProperty(OIDC_CUSTOM_PARAM_VALUE2, i); if (isNotBlank(key2)) { configuration.addCustomParam(key2, value2); } final String type = getProperty(OIDC_TYPE, i); final OidcClient oidcClient; if (OIDC_AZURE_TYPE.equalsIgnoreCase(type)) { oidcClient = new AzureAdClient(configuration); } else if (OIDC_GOOGLE_TYPE.equalsIgnoreCase(type)) { oidcClient = new GoogleOidcClient(configuration); } else { oidcClient = new OidcClient(configuration); } if (i != 0) { oidcClient.setName(concat(oidcClient.getName(), i)); } clients.add(oidcClient); } } } }