From b6c3fbc7c0c858a94c2b819571481ce96dbba6e2 Mon Sep 17 00:00:00 2001 From: Davi Torres Date: Fri, 1 Aug 2025 16:07:45 -0400 Subject: [PATCH 1/6] Remove Domain/IP from Password Reset Link to custom Global Setting --- .../apache/cloudstack/user/UserPasswordResetManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 6574489c827d..e80237965e54 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -174,8 +174,8 @@ public void setResetTokenAndSend(UserAccount userAccount) { final String username = userAccount.getUsername(); final String subject = "Password Reset Request"; - String resetLink = String.format("%s/client/#/user/resetPassword?username=%s&token=%s", - ManagementServerAddresses.value().split(",")[0], username, resetToken); + String resetLink = String.format("/client/#/user/resetPassword?username=%s&token=%s", + username, resetToken); String content = getMessageBody(userAccount, resetToken, resetLink); SMTPMailProperties mailProperties = new SMTPMailProperties(); From 1745c338e90b5ab82adf24c138b97ce0306f5289 Mon Sep 17 00:00:00 2001 From: Davi Torres <90287660+daviftorres@users.noreply.github.com> Date: Sat, 2 Aug 2025 12:01:55 -0400 Subject: [PATCH 2/6] Update UserPasswordResetManagerImpl.java ManagementServerAddresses was removed. --- .../org/apache/cloudstack/user/UserPasswordResetManagerImpl.java | 1 - 1 file changed, 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 e80237965e54..6d83796042be 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -48,7 +48,6 @@ 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; From 5efad39f902303a5264579569de92d610f849320 Mon Sep 17 00:00:00 2001 From: Davi Torres Date: Tue, 5 Aug 2025 21:18:29 -0400 Subject: [PATCH 3/6] updated global setting example --- .../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 6d83796042be..5798f3946251 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -68,7 +68,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" + - "http://{{{resetLink}}}\n" + + "https://your_domain_here{{{resetLink}}}\n" + "If you did not request a password reset, please ignore this email.\n" + "\n" + "Regards,\n" + From b025a9ca9bc0039ca5dc709be3aed84e33fc7f2b Mon Sep 17 00:00:00 2001 From: Davi Torres <90287660+daviftorres@users.noreply.github.com> Date: Fri, 15 Aug 2025 14:02:39 -0400 Subject: [PATCH 4/6] Update server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java Co-authored-by: Suresh Kumar Anaparti --- .../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 5798f3946251..64fb56b06781 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -68,7 +68,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" + - "https://your_domain_here{{{resetLink}}}\n" + + "{{{domainUrl}}}{{{resetLink}}}\n" + "If you did not request a password reset, please ignore this email.\n" + "\n" + "Regards,\n" + From abd87c227025422ad45badc01343370e83ca1847 Mon Sep 17 00:00:00 2001 From: Davi Torres <90287660+daviftorres@users.noreply.github.com> Date: Fri, 15 Aug 2025 14:21:34 -0400 Subject: [PATCH 5/6] Update UserPasswordResetManager.java --- .../org/apache/cloudstack/user/UserPasswordResetManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManager.java b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManager.java index a42faf2835a5..c7ec7f0c4881 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManager.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManager.java @@ -65,6 +65,11 @@ public interface UserPasswordResetManager { "Password for SMTP server for sending emails for resetting password for ACS users", false, ConfigKey.Scope.Global); + ConfigKey UserPasswordResetDomainURL = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, + String.class, "user.password.reset.mail.domain.url", null, + "Domain URL for reset password links sent to the user via email", true, + ConfigKey.Scope.Global); + void setResetTokenAndSend(UserAccount userAccount); boolean validateAndResetPassword(UserAccount user, String token, String password); From 919f1f8a0dbc2987d10c305bae6310647bfec141 Mon Sep 17 00:00:00 2001 From: Davi Torres Date: Fri, 15 Aug 2025 14:30:48 -0400 Subject: [PATCH 6/6] Creates the variable --- .../apache/cloudstack/user/UserPasswordResetManagerImpl.java | 2 ++ 1 file changed, 2 insertions(+) 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 64fb56b06781..8a278f6e45d7 100644 --- a/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/user/UserPasswordResetManagerImpl.java @@ -94,6 +94,7 @@ public ConfigKey[] getConfigKeys() { UserPasswordResetSMTPUseAuth, UserPasswordResetSMTPUsername, UserPasswordResetSMTPPassword, + UserPasswordResetDomainURL, PasswordResetMailTemplate }; } @@ -172,6 +173,7 @@ 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 resetLink = String.format("/client/#/user/resetPassword?username=%s&token=%s", username, resetToken);