package org.apereo.cas.oidc.jwks;
import com.google.common.base.Throwables;
import org.apache.commons.io.FileUtils;
import org.apereo.cas.configuration.model.support.oidc.OidcProperties;
import org.jose4j.jwk.JsonWebKey;
import org.jose4j.jwk.JsonWebKeySet;
import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jwk.RsaJwkGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.PostConstruct;
import java.io.File;
import java.nio.charset.StandardCharsets;
/**
* This is {@link OidcJsonWebKeystoreGeneratorService}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class OidcJsonWebKeystoreGeneratorService {
private static final Logger LOGGER = LoggerFactory.getLogger(OidcJsonWebKeystoreGeneratorService.class);
private final OidcProperties oidcProperties;
public OidcJsonWebKeystoreGeneratorService(final OidcProperties oidcProperties) {
this.oidcProperties = oidcProperties;
}
/**
* Generate.
*/
@PostConstruct
public void generate() {
try {
final File file = oidcProperties.getJwksFile().getFile();
if (!file.exists()) {
final RsaJsonWebKey rsaJsonWebKey = RsaJwkGenerator.generateJwk(2048);
final JsonWebKeySet jsonWebKeySet = new JsonWebKeySet(rsaJsonWebKey);
final String data = jsonWebKeySet.toJson(JsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);
FileUtils.write(file, data, StandardCharsets.UTF_8);
LOGGER.debug("Generated JSON web keystore at [{}]", file);
} else {
LOGGER.debug("Located JSON web keystore at [{}]", file);
}
} catch (final Exception e) {
throw Throwables.propagate(e);
}
}
}