RED-4479 and RED-4793

This commit is contained in:
Timo Bejan 2022-09-25 22:56:01 +03:00
parent 8dbee13dfd
commit e967f7aabb
4 changed files with 97 additions and 1 deletions

View File

@ -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) {

View File

@ -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()));
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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());
}
}