/support/cas-server-support-aup-mongo/src/main/java/org/apereo/cas/config/CasAcceptableUsagePolicyMongoDbConfiguration.java

https://github.com/Jasig/cas · Java · 74 lines · 61 code · 7 blank · 6 comment · 0 complexity · c0363bb2272ebd8bc34f9631e9bd9a5d MD5 · raw file

  1. package org.apereo.cas.config;
  2. import org.apereo.cas.aup.AcceptableUsagePolicyRepository;
  3. import org.apereo.cas.aup.MongoDbAcceptableUsagePolicyRepository;
  4. import org.apereo.cas.authentication.CasSSLContext;
  5. import org.apereo.cas.configuration.CasConfigurationProperties;
  6. import org.apereo.cas.configuration.features.CasFeatureModule;
  7. import org.apereo.cas.mongo.MongoDbConnectionFactory;
  8. import org.apereo.cas.ticket.registry.TicketRegistrySupport;
  9. import org.apereo.cas.util.spring.beans.BeanSupplier;
  10. import org.apereo.cas.util.spring.boot.ConditionalOnFeatureEnabled;
  11. import lombok.val;
  12. import org.springframework.beans.factory.annotation.Qualifier;
  13. import org.springframework.boot.autoconfigure.AutoConfiguration;
  14. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  15. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  16. import org.springframework.cloud.context.config.annotation.RefreshScope;
  17. import org.springframework.context.ConfigurableApplicationContext;
  18. import org.springframework.context.annotation.Bean;
  19. import org.springframework.context.annotation.ScopedProxyMode;
  20. import org.springframework.data.mongodb.core.MongoOperations;
  21. /**
  22. * This is {@link CasAcceptableUsagePolicyMongoDbConfiguration} that stores AUP decisions in a mongo database.
  23. *
  24. * @author Misagh Moayyed
  25. * @since 5.2.0
  26. */
  27. @EnableConfigurationProperties(CasConfigurationProperties.class)
  28. @ConditionalOnFeatureEnabled(feature = CasFeatureModule.FeatureCatalog.AcceptableUsagePolicy, module = "mongo")
  29. @AutoConfiguration
  30. public class CasAcceptableUsagePolicyMongoDbConfiguration {
  31. @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
  32. @Bean
  33. @ConditionalOnMissingBean(name = "mongoAcceptableUsagePolicyTemplate")
  34. public MongoOperations mongoAcceptableUsagePolicyTemplate(
  35. final ConfigurableApplicationContext applicationContext,
  36. final CasConfigurationProperties casProperties,
  37. @Qualifier(CasSSLContext.BEAN_NAME)
  38. final CasSSLContext casSslContext) throws Exception {
  39. return BeanSupplier.of(MongoOperations.class)
  40. .when(AcceptableUsagePolicyRepository.CONDITION_AUP_ENABLED.given(applicationContext.getEnvironment()))
  41. .supply(() -> {
  42. val mongo = casProperties.getAcceptableUsagePolicy().getMongo();
  43. val factory = new MongoDbConnectionFactory(casSslContext.getSslContext());
  44. val mongoTemplate = factory.buildMongoTemplate(mongo);
  45. MongoDbConnectionFactory.createCollection(mongoTemplate, mongo.getCollection(), mongo.isDropCollection());
  46. return mongoTemplate;
  47. })
  48. .otherwiseProxy()
  49. .get();
  50. }
  51. @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
  52. @Bean
  53. public AcceptableUsagePolicyRepository acceptableUsagePolicyRepository(
  54. final ConfigurableApplicationContext applicationContext,
  55. final CasConfigurationProperties casProperties,
  56. @Qualifier("mongoAcceptableUsagePolicyTemplate")
  57. final MongoOperations mongoAcceptableUsagePolicyTemplate,
  58. @Qualifier(TicketRegistrySupport.BEAN_NAME)
  59. final TicketRegistrySupport ticketRegistrySupport) throws Exception {
  60. return BeanSupplier.of(AcceptableUsagePolicyRepository.class)
  61. .when(AcceptableUsagePolicyRepository.CONDITION_AUP_ENABLED.given(applicationContext.getEnvironment()))
  62. .supply(() -> new MongoDbAcceptableUsagePolicyRepository(ticketRegistrySupport,
  63. casProperties.getAcceptableUsagePolicy(), mongoAcceptableUsagePolicyTemplate))
  64. .otherwise(AcceptableUsagePolicyRepository::noOp)
  65. .get();
  66. }
  67. }