diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java index dc1539fe0..830067c98 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EmailService.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.Properties; import javax.mail.Address; +import javax.mail.Message; import javax.mail.Multipart; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; @@ -61,6 +62,7 @@ public class EmailService { msg.setContent(multipart); msg.saveChanges(); msg.setSentDate(new Date()); + msg.setRecipients(Message.RecipientType.TO, toAddress); sender.send(msg); } catch (Exception e) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/SMTPConfigurationController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/SMTPConfigurationController.java index 5201b6695..d555e87ea 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/SMTPConfigurationController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/SMTPConfigurationController.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.SMTPConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.service.EmailService; +import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.SMTPConfigurationService; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.SMTPConfiguration; import com.iqser.red.service.persistence.service.v1.api.resources.SMTPConfigurationResource; @@ -23,6 +24,8 @@ public class SMTPConfigurationController implements SMTPConfigurationResource { private final EmailService emailService; private final SMTPConfigurationService smtpConfigurationService; + private final EncryptionDecryptionService encryptionDecryptionService; + @Override public SMTPConfiguration getCurrentSMTPConfiguration(@RequestParam(value = MASK_PASSWORD, required = false, defaultValue = "true") boolean maskPassword) { var smtpConfiguration = smtpConfigurationService.getConfiguration(); @@ -39,7 +42,7 @@ public class SMTPConfigurationController implements SMTPConfigurationResource { } @Override - public void testSMTPConfiguration(@RequestParam(value = "TEST_EMAIL", required = false) String testEmail, @RequestBody SMTPConfiguration smtpConfiguration) { + public void testSMTPConfiguration(@RequestParam(value = TEST_EMAIL, required = false) String testEmail, @RequestBody SMTPConfiguration smtpConfiguration) { String targetEmail = null; if (StringUtils.isBlank(testEmail)) { @@ -50,6 +53,7 @@ public class SMTPConfigurationController implements SMTPConfigurationResource { } updatePassword(smtpConfiguration); + smtpConfiguration.setPassword(encryptionDecryptionService.decrypt(smtpConfiguration.getPassword())); emailService.send(smtpConfiguration, targetEmail, "Redaction Test Message", "This is a test message"); } @@ -59,6 +63,7 @@ public class SMTPConfigurationController implements SMTPConfigurationResource { } private void updatePassword(SMTPConfiguration smtpConfiguration) { + if (DEFAULT_PASSWORD.equals(smtpConfiguration.getPassword())) { try { var currentSMTPConfig = getCurrentSMTPConfiguration(false); @@ -66,6 +71,8 @@ public class SMTPConfigurationController implements SMTPConfigurationResource { } catch (Exception e) { log.debug("No current SMTP Config exists", e); } + }else{ + 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 new file mode 100644 index 000000000..af1595c7d --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/migration/migrations/EncryptSMTPPasswordsMigration11.java @@ -0,0 +1,50 @@ +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.EncryptionDecryptionService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class EncryptSMTPPasswordsMigration11 extends Migration { + + private static final String NAME = "Encrypt SMTP Config Passwords"; + private static final long VERSION = 11; + + @Autowired + private SMTPRepository smtpRepository; + + @Autowired + private EncryptionDecryptionService encryptionDecryptionService; + + + public EncryptSMTPPasswordsMigration11() { + super(NAME, VERSION); + } + + + @Override + 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); + } + } + } + +} + + + + + diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EncryptSMTPPasswordsMigrationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EncryptSMTPPasswordsMigrationTest.java new file mode 100644 index 000000000..b68f0a3ea --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EncryptSMTPPasswordsMigrationTest.java @@ -0,0 +1,37 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.peristence.v1.server.migration.migrations.EncryptSMTPPasswordsMigration11; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.SMTPConfigurationEntity; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.MigrationPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.SMTPRepository; +import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class EncryptSMTPPasswordsMigrationTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private EncryptSMTPPasswordsMigration11 encryptSMTPPasswordsMigration11; + + @Autowired + private SMTPRepository smtpRepository; + @Autowired + private MigrationPersistenceService migrationPersistenceService; + + @Test + public void testMigration() { + TenantContext.setTenantId("redaction"); + migrationPersistenceService.insertMigration("test", 10); + smtpRepository.save(SMTPConfigurationEntity.builder().password("asd").build()); + encryptSMTPPasswordsMigration11.run(true); + var config1 = smtpRepository.findAll().iterator().next(); + assertThat(config1.getPassword()).isNotEqualTo("asd"); + encryptSMTPPasswordsMigration11.run(true); + var config2 = smtpRepository.findAll().iterator().next(); + assertThat(config1.getPassword()).isEqualTo(config2.getPassword()); + } + +}