package org.apereo.cas.support.saml.config;
import org.apereo.cas.authentication.principal.ResponseBuilder;
import org.apereo.cas.authentication.principal.ServiceFactory;
import org.apereo.cas.authentication.principal.ServiceFactoryConfigurer;
import org.apereo.cas.authentication.principal.WebApplicationService;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.configuration.model.support.saml.googleapps.GoogleAppsProperties;
import org.apereo.cas.services.ServicesManager;
import org.apereo.cas.support.saml.OpenSamlConfigBean;
import org.apereo.cas.support.saml.authentication.principal.GoogleAccountsServiceFactory;
import org.apereo.cas.support.saml.authentication.principal.GoogleAccountsServiceResponseBuilder;
import org.apereo.cas.support.saml.util.GoogleSaml20ObjectBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import java.util.Collection;
import java.util.Collections;
/**
* This is {@link SamlGoogleAppsConfiguration}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
@Configuration("samlGoogleAppsConfiguration")
@EnableConfigurationProperties(CasConfigurationProperties.class)
public class SamlGoogleAppsConfiguration implements ServiceFactoryConfigurer {
@Autowired
@Qualifier("servicesManager")
private ServicesManager servicesManager;
@Autowired
@Qualifier("shibboleth.OpenSAMLConfig")
private OpenSamlConfigBean openSamlConfigBean;
@Autowired
private CasConfigurationProperties casProperties;
@Override
public Collection<ServiceFactory<? extends WebApplicationService>> buildServiceFactories() {
return Collections.singleton(googleAccountsServiceFactory());
}
@ConditionalOnMissingBean(name = "googleAccountsServiceFactory")
@Bean
@RefreshScope
public ServiceFactory googleAccountsServiceFactory() {
return new GoogleAccountsServiceFactory(googleSaml20ObjectBuilder());
}
@ConditionalOnMissingBean(name = "googleSaml20ObjectBuilder")
@Bean
public GoogleSaml20ObjectBuilder googleSaml20ObjectBuilder() {
return new GoogleSaml20ObjectBuilder(openSamlConfigBean);
}
@ConditionalOnMissingBean(name = "googleAccountsServiceResponseBuilder")
@Bean
@Lazy
public ResponseBuilder googleAccountsServiceResponseBuilder() {
final GoogleAppsProperties gApps = casProperties.getGoogleApps();
return new GoogleAccountsServiceResponseBuilder(
gApps.getPrivateKeyLocation(),
gApps.getPublicKeyLocation(),
gApps.getKeyAlgorithm(),
servicesManager,
googleSaml20ObjectBuilder(),
casProperties.getSamlCore().getSkewAllowance(),
casProperties.getServer().getPrefix());
}
}