RED-4479 and RED-4793
This commit is contained in:
parent
8dbee13dfd
commit
e967f7aabb
@ -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) {
|
||||
|
||||
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user