From 0dd9f76659b9da6e73466631344840b62d87e351 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 19 Oct 2022 10:31:23 +0300 Subject: [PATCH] transactional for RED-4793 vs save --- .../persistence/SMTPConfigurationService.java | 26 +++++++++++++---- .../EncryptSMTPPasswordsMigration11.java | 29 +++++-------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java index 1c4eaeda8..19a24bfd9 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/SMTPConfigurationService.java @@ -1,15 +1,14 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; -import javax.transaction.Transactional; - -import org.springframework.stereotype.Service; - import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.SMTPConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; @Slf4j @Service @@ -18,6 +17,8 @@ public class SMTPConfigurationService { private final SMTPRepository smtpRepository; + private final EncryptionDecryptionService encryptionDecryptionService; + @Transactional public void deleteConfiguration() { @@ -37,4 +38,19 @@ public class SMTPConfigurationService { return smtpRepository.save(smtpConfiguration); } + @Transactional + public void encryptPasswordIfNecessary() { + var smtpConfiguration = getConfiguration(); + try { + // this makes the migration idempotent, since an exception will be thrown if the password can't be decrypted + // this prevents double encryption if the migration runs more than once + + encryptionDecryptionService.decrypt(smtpConfiguration.getPassword()); + log.info("SMTP Password for id {} is already encrypted", smtpConfiguration.getId()); + } catch (Exception e) { + log.info("Encrypting SMTP Password for id {}", smtpConfiguration.getId()); + smtpConfiguration.setPassword(encryptionDecryptionService.encrypt(smtpConfiguration.getPassword())); + } + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/EncryptSMTPPasswordsMigration11.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/EncryptSMTPPasswordsMigration11.java index 5e2ec5d33..a9e1ec17b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/EncryptSMTPPasswordsMigration11.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/EncryptSMTPPasswordsMigration11.java @@ -1,13 +1,12 @@ package com.iqser.red.service.peristence.v1.server.migration.migrations; +import com.iqser.red.service.peristence.v1.server.migration.Migration; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.SMTPConfigurationService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.iqser.red.service.peristence.v1.server.migration.Migration; -import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository; - -import lombok.extern.slf4j.Slf4j; +import javax.transaction.Transactional; @Slf4j @Service @@ -17,32 +16,18 @@ public class EncryptSMTPPasswordsMigration11 extends Migration { private static final long VERSION = 11; @Autowired - private SMTPRepository smtpRepository; - - @Autowired - private EncryptionDecryptionService encryptionDecryptionService; + private SMTPConfigurationService smtpConfigurationService; public EncryptSMTPPasswordsMigration11() { - super(NAME, VERSION); } @Override + @Transactional protected void migrate() { - - var smtpConfigurations = smtpRepository.findAll(); - for (var smtpConfiguration : smtpConfigurations) { - try { - // this makes the migration idempotent, since an exception will be thrown if the password can't be decrypted - // this prevents double encryption if the migration runs more than once - encryptionDecryptionService.decrypt(smtpConfiguration.getPassword()); - } catch (Exception e) { - smtpConfiguration.setPassword(encryptionDecryptionService.encrypt(smtpConfiguration.getPassword())); - smtpRepository.save(smtpConfiguration); - } - } + smtpConfigurationService.encryptPasswordIfNecessary(); } }