/support/cas-server-support-saml-idp-metadata-mongo/src/main/java/org/apereo/cas/config/SamlIdPMongoDbIdPMetadataConfiguration.java

https://github.com/frett/cas · Java · 104 lines · 87 code · 11 blank · 6 comment · 1 complexity · 9530ba10527656e97c5e93af2806d2cf MD5 · raw file

  1. package org.apereo.cas.config;
  2. import org.apereo.cas.CipherExecutor;
  3. import org.apereo.cas.configuration.CasConfigurationProperties;
  4. import org.apereo.cas.mongo.MongoDbConnectionFactory;
  5. import org.apereo.cas.support.saml.idp.metadata.MongoDbSamlIdPMetadataCipherExecutor;
  6. import org.apereo.cas.support.saml.idp.metadata.MongoDbSamlIdPMetadataGenerator;
  7. import org.apereo.cas.support.saml.idp.metadata.MongoDbSamlIdPMetadataLocator;
  8. import org.apereo.cas.support.saml.idp.metadata.generator.SamlIdPMetadataGenerator;
  9. import org.apereo.cas.support.saml.idp.metadata.locator.SamlIdPMetadataLocator;
  10. import org.apereo.cas.support.saml.idp.metadata.writer.SamlIdPCertificateAndKeyWriter;
  11. import org.apereo.cas.support.saml.services.idp.metadata.plan.SamlRegisteredServiceMetadataResolutionPlanConfigurator;
  12. import lombok.SneakyThrows;
  13. import lombok.extern.slf4j.Slf4j;
  14. import lombok.val;
  15. import org.springframework.beans.factory.ObjectProvider;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Qualifier;
  18. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  19. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  20. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  21. import org.springframework.context.annotation.Bean;
  22. import org.springframework.context.annotation.Configuration;
  23. import org.springframework.core.io.ResourceLoader;
  24. import org.springframework.data.mongodb.core.MongoTemplate;
  25. /**
  26. * This is {@link SamlIdPMongoDbIdPMetadataConfiguration}.
  27. *
  28. * @author Misagh Moayyed
  29. * @since 5.2.0
  30. */
  31. @Configuration("samlIdPMongoDbIdPMetadataConfiguration")
  32. @EnableConfigurationProperties(CasConfigurationProperties.class)
  33. @ConditionalOnProperty(prefix = "cas.authn.samlIdp.metadata.mongo", name = "idpMetadataCollection")
  34. @Slf4j
  35. public class SamlIdPMongoDbIdPMetadataConfiguration implements SamlRegisteredServiceMetadataResolutionPlanConfigurator {
  36. @Autowired
  37. private ResourceLoader resourceLoader;
  38. @Autowired
  39. private CasConfigurationProperties casProperties;
  40. @Autowired
  41. @Qualifier("samlSelfSignedCertificateWriter")
  42. private ObjectProvider<SamlIdPCertificateAndKeyWriter> samlSelfSignedCertificateWriter;
  43. @Bean
  44. @ConditionalOnMissingBean(name = "mongoDbSamlIdPMetadataCipherExecutor")
  45. public CipherExecutor mongoDbSamlIdPMetadataCipherExecutor() {
  46. val idp = casProperties.getAuthn().getSamlIdp();
  47. val crypto = idp.getMetadata().getMongo().getCrypto();
  48. if (crypto.isEnabled()) {
  49. return new MongoDbSamlIdPMetadataCipherExecutor(
  50. crypto.getEncryption().getKey(),
  51. crypto.getSigning().getKey(),
  52. crypto.getAlg());
  53. }
  54. LOGGER.info("MongoDb SAML IdP metadata encryption/signing is turned off and "
  55. + "MAY NOT be safe in a production environment. "
  56. + "Consider using other choices to handle encryption, signing and verification of "
  57. + "metadata artifacts");
  58. return CipherExecutor.noOp();
  59. }
  60. @ConditionalOnMissingBean(name = "mongoDbSamlIdPMetadataTemplate")
  61. @Bean
  62. public MongoTemplate mongoDbSamlIdPMetadataTemplate() {
  63. val idp = casProperties.getAuthn().getSamlIdp();
  64. val mongo = idp.getMetadata().getMongo();
  65. val factory = new MongoDbConnectionFactory();
  66. val mongoTemplate = factory.buildMongoTemplate(mongo);
  67. factory.createCollection(mongoTemplate, mongo.getIdpMetadataCollection(), mongo.isDropCollection());
  68. return mongoTemplate;
  69. }
  70. @Bean(initMethod = "generate")
  71. @SneakyThrows
  72. public SamlIdPMetadataGenerator samlIdPMetadataGenerator() {
  73. val idp = casProperties.getAuthn().getSamlIdp();
  74. return new MongoDbSamlIdPMetadataGenerator(
  75. samlIdPMetadataLocator(),
  76. samlSelfSignedCertificateWriter.getIfAvailable(),
  77. idp.getEntityId(),
  78. resourceLoader,
  79. casProperties.getServer().getPrefix(),
  80. idp.getScope(),
  81. mongoDbSamlIdPMetadataTemplate(),
  82. idp.getMetadata().getMongo().getIdpMetadataCollection(),
  83. mongoDbSamlIdPMetadataCipherExecutor());
  84. }
  85. @Bean
  86. @SneakyThrows
  87. public SamlIdPMetadataLocator samlIdPMetadataLocator() {
  88. val idp = casProperties.getAuthn().getSamlIdp();
  89. return new MongoDbSamlIdPMetadataLocator(mongoDbSamlIdPMetadataTemplate(),
  90. idp.getMetadata().getMongo().getIdpMetadataCollection(),
  91. mongoDbSamlIdPMetadataCipherExecutor());
  92. }
  93. }