From ed34842f9d029f4b7af760852eea87f5a714f548 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Fri, 14 Nov 2025 12:56:23 +0530 Subject: [PATCH 1/2] Fix url in password reset email --- .../user/UserPasswordResetManagerImpl.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java index 618ad5c86572..a0470a96ef54 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -48,6 +48,7 @@ import java.util.Set; import java.util.UUID; +import static org.apache.cloudstack.config.ApiServiceConfiguration.ManagementServerAddresses; import static org.apache.cloudstack.resourcedetail.UserDetailVO.PasswordResetToken; import static org.apache.cloudstack.resourcedetail.UserDetailVO.PasswordResetTokenExpiryDate; @@ -68,7 +69,7 @@ public class UserPasswordResetManagerImpl extends ManagerBase implements UserPas new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, String.class, "user.password.reset.mail.template", "Hello {{username}}!\n" + "You have requested to reset your password. Please click the following link to reset your password:\n" + - "{{{domainUrl}}}{{{resetLink}}}\n" + + "{{{resetLink}}}\n" + "If you did not request a password reset, please ignore this email.\n" + "\n" + "Regards,\n" + @@ -179,10 +180,14 @@ public void setResetTokenAndSend(UserAccount userAccount) { final String email = userAccount.getEmail(); final String username = userAccount.getUsername(); final String subject = "Password Reset Request"; - final String domainUrl = UserPasswordResetDomainURL.value(); + String domainUrl = UserPasswordResetDomainURL.value(); + if (StringUtils.isBlank(domainUrl)) { + domainUrl = ManagementServerAddresses.value().split(",")[0]; + } + domainUrl = domainUrl.replaceAll("/+$", ""); - String resetLink = String.format("/client/#/user/resetPassword?username=%s&token=%s", - username, resetToken); + String resetLink = String.format("%s/client/#/user/resetPassword?username=%s&token=%s", + domainUrl, username, resetToken); String content = getMessageBody(userAccount, resetToken, resetLink); SMTPMailProperties mailProperties = new SMTPMailProperties(); From 8c22f8459ed3a94fa4b08081561b380db2ab17e7 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Fri, 14 Nov 2025 13:17:29 +0530 Subject: [PATCH 2/2] Update server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../apache/cloudstack/user/UserPasswordResetManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java index a0470a96ef54..d42664e91a09 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -184,7 +184,7 @@ public void setResetTokenAndSend(UserAccount userAccount) { if (StringUtils.isBlank(domainUrl)) { domainUrl = ManagementServerAddresses.value().split(",")[0]; } - domainUrl = domainUrl.replaceAll("/+$", ""); + domainUrl = domainUrl.trim().replaceAll("/+$", ""); String resetLink = String.format("%s/client/#/user/resetPassword?username=%s&token=%s", domainUrl, username, resetToken);