From 943f10149606363b88c4ca17c3e2f78c9ec45d32 Mon Sep 17 00:00:00 2001 From: Andrei Piankouski Date: Fri, 26 Apr 2024 10:08:26 +0300 Subject: [PATCH 1/6] EPMRPP-90118 || Improve Email configuration to take into account possible deployment under path --- .../com/epam/ta/reportportal/util/email/EmailService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java index 57368d34b9..2087d66864 100644 --- a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java +++ b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java @@ -56,6 +56,7 @@ import javax.mail.internet.InternetAddress; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileUrlResource; import org.springframework.core.io.Resource; import org.springframework.mail.javamail.JavaMailSender; @@ -83,6 +84,9 @@ public class EmailService extends JavaMailSenderImpl { private String from; private String rpHost; + @Value("${server.servlet.context.path:}") + private String path; + public EmailService(Properties javaMailProperties) { super.setJavaMailProperties(javaMailProperties); } @@ -209,7 +213,8 @@ String mergeFinishLaunchText(String url, Launch launch, Set pr private String getUrl(String baseUrl) { return ofNullable(rpHost).map(rh -> { - final UriComponents rpHostUri = UriComponentsBuilder.fromUriString(rh).build(); + String RPUrl = rpHost + path.replace("/api", ""); + final UriComponents rpHostUri = UriComponentsBuilder.fromUriString(RPUrl).build(); return UriComponentsBuilder.fromUriString(baseUrl).scheme(rpHostUri.getScheme()) .host(rpHostUri.getHost()).port(rpHostUri.getPort()).build().toUri().toASCIIString(); }).orElse(baseUrl); From 996e391304d542e43fafa95d069931ef087b0d99 Mon Sep 17 00:00:00 2001 From: Andrei Piankouski Date: Fri, 26 Apr 2024 10:30:13 +0300 Subject: [PATCH 2/6] EPMRPP-90118 || Improve Email configuration to take into account possible deployment under path --- .../core/launch/impl/FinishLaunchHandlerImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java index 8cf8982ab6..4adb679d6c 100644 --- a/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java @@ -38,6 +38,7 @@ import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; @@ -57,6 +58,9 @@ public class FinishLaunchHandlerImpl implements FinishLaunchHandler { private final FinishHierarchyHandler finishHierarchyHandler; private final ApplicationEventPublisher eventPublisher; + @Value("${server.servlet.context.path:}") + private String path; + @Autowired public FinishLaunchHandlerImpl(LaunchRepository launchRepository, @Qualifier("finishLaunchHierarchyHandler") @@ -107,7 +111,7 @@ public FinishLaunchRS finishLaunch(String launchId, FinishExecutionRQ finishLaun FinishLaunchRS response = new FinishLaunchRS(); response.setId(launch.getUuid()); response.setNumber(launch.getNumber()); - response.setLink(generateLaunchLink(baseUrl, projectDetails.getProjectName(), + response.setLink(generateLaunchLink(baseUrl + path.replace("/api", ""), projectDetails.getProjectName(), String.valueOf(launch.getId()) )); return response; From 51962b7aa86acfb3add8d5e72268f3aa3764ce8c Mon Sep 17 00:00:00 2001 From: Andrei Piankouski Date: Fri, 26 Apr 2024 11:18:55 +0300 Subject: [PATCH 3/6] EPMRPP-90118 || Improve Email configuration to take into account possible deployment under path --- .../core/launch/impl/FinishLaunchHandlerImpl.java | 9 +++++---- .../reportportal/core/launch/util/LinkGenerator.java | 6 ++++-- .../ta/reportportal/util/email/EmailService.java | 8 ++++++-- .../reportportal/util/email/MailServiceFactory.java | 8 +++++++- .../launch/impl/FinishLaunchHandlerImplTest.java | 12 ++++++++++++ 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java b/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java index 4adb679d6c..048859ab7b 100644 --- a/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java +++ b/src/main/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImpl.java @@ -58,17 +58,18 @@ public class FinishLaunchHandlerImpl implements FinishLaunchHandler { private final FinishHierarchyHandler finishHierarchyHandler; private final ApplicationEventPublisher eventPublisher; - @Value("${server.servlet.context.path:}") - private String path; + private final String path; @Autowired public FinishLaunchHandlerImpl(LaunchRepository launchRepository, @Qualifier("finishLaunchHierarchyHandler") FinishHierarchyHandler finishHierarchyHandler, - ApplicationEventPublisher eventPublisher) { + ApplicationEventPublisher eventPublisher, + @Value("${server.servlet.context-path:}") String path) { this.launchRepository = launchRepository; this.finishHierarchyHandler = finishHierarchyHandler; this.eventPublisher = eventPublisher; + this.path = path; } @Override @@ -111,7 +112,7 @@ public FinishLaunchRS finishLaunch(String launchId, FinishExecutionRQ finishLaun FinishLaunchRS response = new FinishLaunchRS(); response.setId(launch.getUuid()); response.setNumber(launch.getNumber()); - response.setLink(generateLaunchLink(baseUrl + path.replace("/api", ""), projectDetails.getProjectName(), + response.setLink(generateLaunchLink(baseUrl, path, projectDetails.getProjectName(), String.valueOf(launch.getId()) )); return response; diff --git a/src/main/java/com/epam/ta/reportportal/core/launch/util/LinkGenerator.java b/src/main/java/com/epam/ta/reportportal/core/launch/util/LinkGenerator.java index a62c06bb8a..a6d50b7c62 100644 --- a/src/main/java/com/epam/ta/reportportal/core/launch/util/LinkGenerator.java +++ b/src/main/java/com/epam/ta/reportportal/core/launch/util/LinkGenerator.java @@ -33,8 +33,10 @@ private LinkGenerator() { //static only } - public static String generateLaunchLink(String baseUrl, String projectName, String id) { - return StringUtils.isEmpty(baseUrl) ? null : baseUrl + UI_PREFIX + projectName + LAUNCHES + id; + public static String generateLaunchLink(String baseUrl, String path, String projectName, String id) { + path = "/".equals(path) ? "" : path.replace("/api", ""); + return StringUtils.isEmpty(baseUrl) ? null + : baseUrl + path + UI_PREFIX + projectName + LAUNCHES + id; } public static String composeBaseUrl(HttpServletRequest request) { diff --git a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java index 2087d66864..9829922840 100644 --- a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java +++ b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java @@ -84,7 +84,6 @@ public class EmailService extends JavaMailSenderImpl { private String from; private String rpHost; - @Value("${server.servlet.context.path:}") private String path; public EmailService(Properties javaMailProperties) { @@ -213,7 +212,8 @@ String mergeFinishLaunchText(String url, Launch launch, Set pr private String getUrl(String baseUrl) { return ofNullable(rpHost).map(rh -> { - String RPUrl = rpHost + path.replace("/api", ""); + String processedPath = "/".equals(path) ? "" : path.replace("/api", ""); + String RPUrl = rpHost + processedPath; final UriComponents rpHostUri = UriComponentsBuilder.fromUriString(RPUrl).build(); return UriComponentsBuilder.fromUriString(baseUrl).scheme(rpHostUri.getScheme()) .host(rpHostUri.getHost()).port(rpHostUri.getPort()).build().toUri().toASCIIString(); @@ -322,6 +322,10 @@ public void setRpHost(String rpHost) { this.rpHost = rpHost; } + public void setPath(String path) { + this.path = path; + } + public void sendCreateUserConfirmationEmail(CreateUserRQFull req, String basicUrl) { MimeMessagePreparator preparator = mimeMessage -> { MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "utf-8"); diff --git a/src/main/java/com/epam/ta/reportportal/util/email/MailServiceFactory.java b/src/main/java/com/epam/ta/reportportal/util/email/MailServiceFactory.java index 10102fd425..ba0d31de79 100644 --- a/src/main/java/com/epam/ta/reportportal/util/email/MailServiceFactory.java +++ b/src/main/java/com/epam/ta/reportportal/util/email/MailServiceFactory.java @@ -42,6 +42,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -63,14 +64,18 @@ public class MailServiceFactory { private final IntegrationRepository integrationRepository; private final IntegrationTypeRepository integrationTypeRepository; + private final String path; + @Autowired public MailServiceFactory(TemplateEngine templateEngine, BasicTextEncryptor encryptor, IntegrationRepository integrationRepository, - IntegrationTypeRepository integrationTypeRepository) { + IntegrationTypeRepository integrationTypeRepository, + @Value("${server.servlet.context-path:}") String path) { this.templateEngine = templateEngine; this.encryptor = encryptor; this.integrationRepository = integrationRepository; this.integrationTypeRepository = integrationTypeRepository; + this.path = path; } /** @@ -116,6 +121,7 @@ && ofNullable(config.get(EmailSettingsEnum.STAR_TLS_ENABLED.getAttribute())).map } EmailService service = new EmailService(javaMailProperties); + service.setPath(path); service.setTemplateEngine(templateEngine); EmailSettingsEnum.RP_HOST.getAttribute(config).ifPresent(service::setRpHost); diff --git a/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java b/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java index 5c8cf8ba3b..553a02dca5 100644 --- a/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java +++ b/src/test/java/com/epam/ta/reportportal/core/launch/impl/FinishLaunchHandlerImplTest.java @@ -47,12 +47,15 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.core.env.Environment; +import org.springframework.test.util.ReflectionTestUtils; /** * @author Ihar Kahadouski @@ -75,12 +78,21 @@ class FinishLaunchHandlerImplTest { @Mock private ApplicationEventPublisher publisher; + @Mock + private Environment env; + @InjectMocks private FinishLaunchHandlerImpl handler; @InjectMocks private StopLaunchHandlerImpl stopLaunchHandler; + @BeforeEach + void setUp() { + when(env.getProperty("server.servlet.context-path")).thenReturn("/"); + ReflectionTestUtils.setField(handler, "path", env.getProperty("server.servlet.context-path")); + } + @Test void finishLaunch() { FinishExecutionRQ finishExecutionRQ = new FinishExecutionRQ(); From b2c6f68ab389f3c796547731bf0c6114bcd17acc Mon Sep 17 00:00:00 2001 From: Andrei Piankouski Date: Fri, 26 Apr 2024 11:22:12 +0300 Subject: [PATCH 4/6] EPMRPP-90118 || Improve Email configuration to take into account possible deployment under path --- .../epam/ta/reportportal/util/email/MailServiceFactoryTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/epam/ta/reportportal/util/email/MailServiceFactoryTest.java b/src/test/java/com/epam/ta/reportportal/util/email/MailServiceFactoryTest.java index bf2b19941f..fdfa632755 100644 --- a/src/test/java/com/epam/ta/reportportal/util/email/MailServiceFactoryTest.java +++ b/src/test/java/com/epam/ta/reportportal/util/email/MailServiceFactoryTest.java @@ -79,7 +79,7 @@ void setUp() { basicTextEncryptor = new BasicTextEncryptor(); basicTextEncryptor.setPassword("123"); mailServiceFactory = new MailServiceFactory(templateEngine, basicTextEncryptor, - integrationRepository, integrationTypeRepository); + integrationRepository, integrationTypeRepository, "/"); } @Test From 97cbc83947b42fb6121df48702edb2d990b982fd Mon Sep 17 00:00:00 2001 From: Andrei Piankouski Date: Fri, 26 Apr 2024 12:13:14 +0300 Subject: [PATCH 5/6] EPMRPP-90118 || Improve Email configuration to take into account possible deployment under path --- .../com/epam/ta/reportportal/util/email/EmailService.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java index 9829922840..f35809e2b9 100644 --- a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java +++ b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java @@ -56,7 +56,6 @@ import javax.mail.internet.InternetAddress; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.FileUrlResource; import org.springframework.core.io.Resource; import org.springframework.mail.javamail.JavaMailSender; @@ -213,9 +212,9 @@ String mergeFinishLaunchText(String url, Launch launch, Set pr private String getUrl(String baseUrl) { return ofNullable(rpHost).map(rh -> { String processedPath = "/".equals(path) ? "" : path.replace("/api", ""); - String RPUrl = rpHost + processedPath; - final UriComponents rpHostUri = UriComponentsBuilder.fromUriString(RPUrl).build(); - return UriComponentsBuilder.fromUriString(baseUrl).scheme(rpHostUri.getScheme()) + String updatedBaseUrl = processedPath + baseUrl; + final UriComponents rpHostUri = UriComponentsBuilder.fromUriString(rpHost).build(); + return UriComponentsBuilder.fromUriString(updatedBaseUrl).scheme(rpHostUri.getScheme()) .host(rpHostUri.getHost()).port(rpHostUri.getPort()).build().toUri().toASCIIString(); }).orElse(baseUrl); } From 6c71da85b27db5420dc6b5b4000a572498bdd605 Mon Sep 17 00:00:00 2001 From: Andrei Piankouski Date: Fri, 26 Apr 2024 12:34:04 +0300 Subject: [PATCH 6/6] EPMRPP-90118 || Improve Email configuration to take into account possible deployment under path --- .../epam/ta/reportportal/util/email/EmailService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java index f35809e2b9..ce44357ff5 100644 --- a/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java +++ b/src/main/java/com/epam/ta/reportportal/util/email/EmailService.java @@ -212,10 +212,13 @@ String mergeFinishLaunchText(String url, Launch launch, Set pr private String getUrl(String baseUrl) { return ofNullable(rpHost).map(rh -> { String processedPath = "/".equals(path) ? "" : path.replace("/api", ""); - String updatedBaseUrl = processedPath + baseUrl; final UriComponents rpHostUri = UriComponentsBuilder.fromUriString(rpHost).build(); - return UriComponentsBuilder.fromUriString(updatedBaseUrl).scheme(rpHostUri.getScheme()) - .host(rpHostUri.getHost()).port(rpHostUri.getPort()).build().toUri().toASCIIString(); + return UriComponentsBuilder.newInstance() + .scheme(rpHostUri.getScheme()) + .host(rpHostUri.getHost()) + .port(rpHostUri.getPort()) + .path(processedPath) + .build().toUri().toASCIIString() + baseUrl; }).orElse(baseUrl); }