OidcTokenIssuer.java

package iu.auth.config;

import java.util.Set;

import edu.iu.IuIterable;
import edu.iu.auth.config.IuOpenIdProviderMetadata;
import edu.iu.auth.config.IuPrivateKeyPrincipal;
import edu.iu.crypt.WebEncryption.Encryption;
import edu.iu.crypt.WebKey;
import edu.iu.crypt.WebKey.Algorithm;
import edu.iu.crypt.WebKey.Use;

/**
 * Provides public key metadata for an OIDC provider token issuer.
 */
public class OidcTokenIssuer implements IuPrivateKeyPrincipal {

	private final IuOpenIdProviderMetadata oidcProvider;

	/**
	 * Constructor.
	 * 
	 * @param oidcProvider OIDC provider metadata
	 */
	public OidcTokenIssuer(IuOpenIdProviderMetadata oidcProvider) {
		this.oidcProvider = oidcProvider;
	}

	private <T> T firstOrNull(Set<T> s) {
		if (s == null)
			return null;
		return s.stream().findFirst().orElse(null);
	}

	@Override
	public Algorithm getAlg() {
		return firstOrNull(oidcProvider.getIdTokenSigningAlgValuesSupported());
	}

	@Override
	public Algorithm getEncryptAlg() {
		return firstOrNull(oidcProvider.getIdTokenEncryptionAlgValuesSupported());
	}

	@Override
	public Encryption getEnc() {
		return firstOrNull(oidcProvider.getIdTokenEncryptionEncValuesSupported());
	}

	@Override
	public WebKey getJwk() {
		return IuIterable.filter(WebKey.readJwks(oidcProvider.getJwksUri()), jwk -> Use.SIGN.equals(jwk.getUse()))
				.iterator().next();
	}

}