package org.apereo.cas.config; import com.mongodb.Mongo; import com.mongodb.MongoClientOptions; import org.apereo.cas.configuration.CasConfigurationProperties; import org.apereo.cas.configuration.model.support.mongo.serviceregistry.MongoServiceRegistryProperties; import org.apereo.cas.configuration.support.Beans; import org.apereo.cas.services.MongoServiceRegistryDao; import org.apereo.cas.services.ServiceRegistryDao; import org.apereo.cas.services.convert.BaseConverters; 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.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.config.AbstractMongoConfiguration; import org.springframework.data.mongodb.core.convert.CustomConversions; import java.util.Arrays; /** * This is {@link MongoDbServiceRegistryConfiguration}. * * @author Misagh Moayyed * @since 5.0.0 */ @Configuration("mongoDbServiceRegistryConfiguration") @EnableConfigurationProperties(CasConfigurationProperties.class) public class MongoDbServiceRegistryConfiguration extends AbstractMongoConfiguration { @Autowired private CasConfigurationProperties casProperties; @Override protected String getDatabaseName() { final MongoServiceRegistryProperties mongo = casProperties.getServiceRegistry().getMongo(); return mongo.getDatabaseName(); } @Override public Mongo mongo() throws Exception { final MongoServiceRegistryProperties mongo = casProperties.getServiceRegistry().getMongo(); return Beans.newMongoDbClient(mongo); } @RefreshScope @Bean public MongoClientOptions mongoClientOptions() throws Exception { final MongoServiceRegistryProperties mongo = casProperties.getServiceRegistry().getMongo(); return Beans.newMongoDbClientOptions(mongo); } @Override public CustomConversions customConversions() { return new CustomConversions(Arrays.asList( new BaseConverters.LoggerConverter(), new BaseConverters.ClassConverter(), new BaseConverters.CommonsLogConverter(), new BaseConverters.PersonAttributesConverter(), new BaseConverters.CacheLoaderConverter(), new BaseConverters.RunnableConverter(), new BaseConverters.ReferenceQueueConverter(), new BaseConverters.ThreadLocalConverter(), new BaseConverters.CertPathConverter(), new BaseConverters.CacheConverter() )); } @Bean public ServiceRegistryDao serviceRegistryDao() throws Exception { final MongoServiceRegistryProperties mongo = casProperties.getServiceRegistry().getMongo(); return new MongoServiceRegistryDao( mongoTemplate(), mongo.getCollectionName(), mongo.isDropCollection()); } }