package org.apereo.cas.config;
import org.apereo.cas.CipherExecutor;
import org.apereo.cas.authentication.AuthenticationEventExecutionPlan;
import org.apereo.cas.authentication.AuthenticationMetaDataPopulator;
import org.apereo.cas.authentication.metadata.CacheCredentialsCipherExecutor;
import org.apereo.cas.authentication.metadata.CacheCredentialsMetaDataPopulator;
import org.apereo.cas.authentication.metadata.RememberMeAuthenticationMetaDataPopulator;
import org.apereo.cas.authentication.metadata.SuccessfulHandlerMetaDataPopulator;
import org.apereo.cas.authentication.AuthenticationEventExecutionPlanConfigurer;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.configuration.model.support.clearpass.ClearpassProperties;
import org.apereo.cas.util.cipher.NoOpCipherExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* This is {@link CasCoreAuthenticationMetadataConfiguration}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
@Configuration("casCoreAuthenticationMetadataConfiguration")
@EnableConfigurationProperties(CasConfigurationProperties.class)
public class CasCoreAuthenticationMetadataConfiguration implements AuthenticationEventExecutionPlanConfigurer {
@Autowired
private CasConfigurationProperties casProperties;
@ConditionalOnMissingBean(name = "successfulHandlerMetaDataPopulator")
@Bean
public AuthenticationMetaDataPopulator successfulHandlerMetaDataPopulator() {
return new SuccessfulHandlerMetaDataPopulator();
}
@ConditionalOnMissingBean(name = "rememberMeAuthenticationMetaDataPopulator")
@Bean
public AuthenticationMetaDataPopulator rememberMeAuthenticationMetaDataPopulator() {
return new RememberMeAuthenticationMetaDataPopulator();
}
@ConditionalOnMissingBean(name = "cacheCredentialsCipherExecutor")
@Bean
public CipherExecutor cacheCredentialsCipherExecutor() {
final ClearpassProperties cp = casProperties.getClearpass();
if (cp.isCipherEnabled() && cp.isCacheCredential()) {
return new CacheCredentialsCipherExecutor(cp.getEncryptionKey(), cp.getSigningKey());
}
return NoOpCipherExecutor.getInstance();
}
@Override
public void configureAuthenticationExecutionPlan(final AuthenticationEventExecutionPlan plan) {
plan.registerMetadataPopulator(successfulHandlerMetaDataPopulator());
plan.registerMetadataPopulator(rememberMeAuthenticationMetaDataPopulator());
final ClearpassProperties cp = casProperties.getClearpass();
if (cp.isCacheCredential()) {
plan.registerMetadataPopulator(new CacheCredentialsMetaDataPopulator(cacheCredentialsCipherExecutor()));
}
}
}