/support/cas-server-support-trusted-mfa-mongo/src/main/java/org/apereo/cas/trusted/authentication/storage/MongoDbMultifactorAuthenticationTrustStorage.java

https://github.com/Jasig/cas · Java · 107 lines · 89 code · 12 blank · 6 comment · 0 complexity · e37cd0a4718d5455b758b8e7f6461b86 MD5 · raw file

  1. package org.apereo.cas.trusted.authentication.storage;
  2. import org.apereo.cas.configuration.model.support.mfa.trusteddevice.TrustedDevicesMultifactorProperties;
  3. import org.apereo.cas.trusted.authentication.api.MultifactorAuthenticationTrustRecord;
  4. import org.apereo.cas.trusted.authentication.api.MultifactorAuthenticationTrustRecordKeyGenerator;
  5. import org.apereo.cas.util.LoggingUtils;
  6. import org.apereo.cas.util.crypto.CipherExecutor;
  7. import lombok.extern.slf4j.Slf4j;
  8. import lombok.val;
  9. import org.springframework.data.mongodb.core.MongoOperations;
  10. import org.springframework.data.mongodb.core.query.Criteria;
  11. import org.springframework.data.mongodb.core.query.Query;
  12. import java.io.Serializable;
  13. import java.time.ZonedDateTime;
  14. import java.util.HashSet;
  15. import java.util.Set;
  16. /**
  17. * This is {@link MongoDbMultifactorAuthenticationTrustStorage}.
  18. *
  19. * @author Misagh Moayyed
  20. * @since 5.0.0
  21. */
  22. @Slf4j
  23. public class MongoDbMultifactorAuthenticationTrustStorage extends BaseMultifactorAuthenticationTrustStorage {
  24. private final MongoOperations mongoTemplate;
  25. public MongoDbMultifactorAuthenticationTrustStorage(final TrustedDevicesMultifactorProperties properties,
  26. final CipherExecutor<Serializable, String> cipherExecutor,
  27. final MongoOperations mongoTemplate,
  28. final MultifactorAuthenticationTrustRecordKeyGenerator keyGenerationStrategy) {
  29. super(properties, cipherExecutor, keyGenerationStrategy);
  30. this.mongoTemplate = mongoTemplate;
  31. }
  32. @Override
  33. public void remove(final String key) {
  34. try {
  35. val query = new Query();
  36. query.addCriteria(Criteria.where("recordKey").is(key));
  37. val res = this.mongoTemplate.remove(query,
  38. MultifactorAuthenticationTrustRecord.class,
  39. getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  40. LOGGER.info("Found and removed [{}]", res.getDeletedCount());
  41. } catch (final Exception e) {
  42. LoggingUtils.error(LOGGER, e);
  43. }
  44. }
  45. @Override
  46. public void remove(final ZonedDateTime expirationDate) {
  47. try {
  48. val query = new Query();
  49. query.addCriteria(Criteria.where("expirationDate").lte(expirationDate));
  50. val res = this.mongoTemplate.remove(query, MultifactorAuthenticationTrustRecord.class,
  51. getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  52. LOGGER.info("Found and removed [{}]", res.getDeletedCount());
  53. } catch (final Exception e) {
  54. LoggingUtils.error(LOGGER, e);
  55. }
  56. }
  57. @Override
  58. public Set<? extends MultifactorAuthenticationTrustRecord> getAll() {
  59. remove();
  60. val results = mongoTemplate.findAll(MultifactorAuthenticationTrustRecord.class,
  61. getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  62. return new HashSet<>(results);
  63. }
  64. @Override
  65. public Set<? extends MultifactorAuthenticationTrustRecord> get(final ZonedDateTime onOrAfterDate) {
  66. remove();
  67. val query = new Query();
  68. query.addCriteria(Criteria.where("recordDate").gte(onOrAfterDate));
  69. val results = mongoTemplate.find(query, MultifactorAuthenticationTrustRecord.class,
  70. getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  71. return new HashSet<>(results);
  72. }
  73. @Override
  74. public Set<? extends MultifactorAuthenticationTrustRecord> get(final String principal) {
  75. remove();
  76. val query = new Query();
  77. query.addCriteria(Criteria.where("principal").is(principal));
  78. val results = mongoTemplate.find(query, MultifactorAuthenticationTrustRecord.class,
  79. getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  80. return new HashSet<>(results);
  81. }
  82. @Override
  83. public MultifactorAuthenticationTrustRecord get(final long id) {
  84. remove();
  85. val query = new Query();
  86. query.addCriteria(Criteria.where("id").is(id));
  87. return mongoTemplate.findOne(query, MultifactorAuthenticationTrustRecord.class,
  88. getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  89. }
  90. @Override
  91. protected MultifactorAuthenticationTrustRecord saveInternal(final MultifactorAuthenticationTrustRecord record) {
  92. this.mongoTemplate.save(record, getTrustedDevicesMultifactorProperties().getMongo().getCollection());
  93. return record;
  94. }
  95. }