diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java index d0ca088..775f86a 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/ControllerAdvice.java @@ -1,8 +1,6 @@ package com.knecon.fforesight.tenantusermanagement.controller; -import java.util.Arrays; -import java.util.Objects; -import java.util.stream.Collectors; +import javax.ws.rs.BadRequestException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -29,4 +27,10 @@ public class ControllerAdvice { return new ResponseEntity<>(new ErrorMessage(e.getReason()), e.getStatusCode()); } + @ExceptionHandler(BadRequestException.class) + public ResponseEntity handleBadRequestException(BadRequestException e) { + + return new ResponseEntity<>(new ErrorMessage(e.getMessage()), HttpStatus.BAD_REQUEST); + } + } diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/external/SMTPConfigurationController.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/external/SMTPConfigurationController.java index e61ac6f..65601e2 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/external/SMTPConfigurationController.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/external/SMTPConfigurationController.java @@ -64,7 +64,6 @@ public class SMTPConfigurationController implements SMTPConfigurationResource, P realmService.realm(TenantContext.getTenantId()).update(realmRepresentation); } - @SneakyThrows @Override @PreAuthorize("hasAuthority('" + WRITE_SMTP_CONFIGURATION + "')") public SMTPResponse testSMTPConfiguration(@RequestBody SMTPConfiguration smtpConfiguration) { diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/EmailService.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/EmailService.java index 3d707ff..e517714 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/EmailService.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/EmailService.java @@ -55,6 +55,9 @@ public class EmailService { if (auth) { props.setProperty("mail.smtp.auth", "true"); + if (!config.get("user").equals(address)) { + throw new BadRequestException("User and from email should be the same"); + } } if (ssl) { @@ -118,9 +121,7 @@ public class EmailService { return SMTPResponse.builder() .statusCode(200); } catch (Exception e) { - return SMTPResponse.builder() - .statusCode(400) - .reasonPhrase(e.getMessage()); + throw new BadRequestException(e.getMessage()); } finally { if (transport != null) { try { diff --git a/src/test/java/com/knecon/fforesight/tests/SMTPConfigurationTest.java b/src/test/java/com/knecon/fforesight/tests/SMTPConfigurationTest.java index 2918b54..e85546b 100644 --- a/src/test/java/com/knecon/fforesight/tests/SMTPConfigurationTest.java +++ b/src/test/java/com/knecon/fforesight/tests/SMTPConfigurationTest.java @@ -1,6 +1,7 @@ package com.knecon.fforesight.tests; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -31,7 +32,7 @@ public class SMTPConfigurationTest extends AbstractTenantUserManagementIntegrati var currentSMTPConfiguration = smtpConfigurationClient.getCurrentSMTPConfiguration(); assertThat(currentSMTPConfiguration.getPassword()).matches("\\**"); - assertThat(currentSMTPConfiguration.getUser()).isEqualTo("user"); + assertThat(currentSMTPConfiguration.getUser()).isEqualTo("from@knecon.com"); assertThat(currentSMTPConfiguration.getHost()).isEqualTo("test.knecon.com"); assertThat(currentSMTPConfiguration.isSsl()).isFalse(); assertThat(currentSMTPConfiguration.isStarttls()).isTrue(); @@ -49,13 +50,20 @@ public class SMTPConfigurationTest extends AbstractTenantUserManagementIntegrati SMTPConfiguration smtpConfiguration = provideTestSMTPConfiguration(); - var response = smtpConfigurationClient.testSMTPConfiguration(smtpConfiguration); + assertThatThrownBy(() -> smtpConfigurationClient.testSMTPConfiguration(smtpConfiguration)).hasMessageContaining("Couldn't connect to host, port: test.knecon.com, 25; timeout 10000"); - // Fails because we are not using a smtp config - assertThat(response.getStatusCode()).isEqualTo(400); - assertThat(response.getReasonPhrase()).isEqualTo("Couldn't connect to host, port: test.knecon.com, 25; timeout 10000"); - assertThat(response.getRecipientEmail()).isEqualTo("from@knecon.com"); - assertThat(response.isAdminEmail()).isFalse(); + TenantContext.clear(); + } + + @Test + public void testSMTPConnectionWithDifferentEmails() { + + TenantContext.setTenantId(AbstractTenantUserManagementIntegrationTest.TEST_TENANT_ID); + + SMTPConfiguration smtpConfiguration = provideTestSMTPConfiguration(); + smtpConfiguration.setUser("invalid"); + + assertThatThrownBy(() -> smtpConfigurationClient.testSMTPConfiguration(smtpConfiguration)).hasMessageContaining("User and from email should be the same"); TenantContext.clear(); } @@ -67,7 +75,7 @@ public class SMTPConfigurationTest extends AbstractTenantUserManagementIntegrati smtpConfiguration.setFrom("from@knecon.com"); smtpConfiguration.setHost("test.knecon.com"); smtpConfiguration.setPassword("secret"); - smtpConfiguration.setUser("user"); + smtpConfiguration.setUser("from@knecon.com"); smtpConfiguration.setStarttls(true); smtpConfiguration.setSsl(false);