package org.apereo.cas.services.config;
import com.google.common.base.Throwables;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.configuration.model.core.services.ServiceRegistryProperties;
import org.apereo.cas.services.ServiceRegistryDao;
import org.apereo.cas.services.YamlServiceRegistryDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
/**
* This is {@link YamlServiceRegistryConfiguration}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
@Configuration("yamlServiceRegistryConfiguration")
@EnableConfigurationProperties(CasConfigurationProperties.class)
public class YamlServiceRegistryConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(YamlServiceRegistryConfiguration.class);
@Autowired
private CasConfigurationProperties casProperties;
@Autowired
private ApplicationEventPublisher eventPublisher;
@Bean
@RefreshScope
public ServiceRegistryDao yamlServiceRegistryDao() {
final ServiceRegistryProperties registry = casProperties.getServiceRegistry();
if (registry.getConfig().getLocation() == null) {
LOGGER.warn("The location of service definitions is undefined for the service registry");
throw new IllegalArgumentException("Service configuration directory for registry must be defined");
}
try {
if (registry.getConfig().getLocation() instanceof ClassPathResource) {
LOGGER.warn("The location of service definitions [{}] is on the classpath. It is recommended that the location of service definitions "
+ "be externalized to allow for easier modifications and better sharing of the configuration.",
registry.getConfig().getLocation());
}
return new YamlServiceRegistryDao(registry.getConfig().getLocation(), registry.isWatcherEnabled(), eventPublisher);
} catch (final Exception e) {
throw Throwables.propagate(e);
}
}
}