Details
diff --git a/application/src/main/java/org/thingsboard/server/controller/AuthController.java b/application/src/main/java/org/thingsboard/server/controller/AuthController.java
index 3aaa694..5ef52c2 100644
--- a/application/src/main/java/org/thingsboard/server/controller/AuthController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/AuthController.java
@@ -124,14 +124,7 @@ public class AuthController extends BaseController {
HttpServletRequest request) throws ThingsboardException {
try {
UserCredentials userCredentials = userService.requestPasswordReset(email);
- String scheme = request.getScheme();
- if (request.getHeader("x-forwarded-proto") != null) {
- scheme = request.getHeader("x-forwarded-proto");
- }
- String baseUrl = String.format("%s://%s:%d",
- scheme,
- request.getServerName(),
- request.getServerPort());
+ String baseUrl = constructBaseUrl(request);
String resetPasswordUrl = String.format("%s/api/noauth/resetPassword?resetToken=%s", baseUrl,
userCredentials.getResetToken());
@@ -175,14 +168,7 @@ public class AuthController extends BaseController {
UserCredentials credentials = userService.activateUserCredentials(activateToken, encodedPassword);
User user = userService.findUserById(credentials.getUserId());
SecurityUser securityUser = new SecurityUser(user, credentials.isEnabled());
- String scheme = request.getScheme();
- if (request.getHeader("x-forwarded-proto") != null) {
- scheme = request.getHeader("x-forwarded-proto");
- }
- String baseUrl = String.format("%s://%s:%d",
- scheme,
- request.getServerName(),
- request.getServerPort());
+ String baseUrl = constructBaseUrl(request);
String loginUrl = String.format("%s/login", baseUrl);
String email = user.getEmail();
mailService.sendAccountActivatedEmail(loginUrl, email);
@@ -216,14 +202,7 @@ public class AuthController extends BaseController {
userCredentials = userService.saveUserCredentials(userCredentials);
User user = userService.findUserById(userCredentials.getUserId());
SecurityUser securityUser = new SecurityUser(user, userCredentials.isEnabled());
- String scheme = request.getScheme();
- if (request.getHeader("x-forwarded-proto") != null) {
- scheme = request.getHeader("x-forwarded-proto");
- }
- String baseUrl = String.format("%s://%s:%d",
- scheme,
- request.getServerName(),
- request.getServerPort());
+ String baseUrl = constructBaseUrl(request);
String loginUrl = String.format("%s/login", baseUrl);
String email = user.getEmail();
mailService.sendPasswordWasResetEmail(loginUrl, email);
diff --git a/application/src/main/java/org/thingsboard/server/controller/BaseController.java b/application/src/main/java/org/thingsboard/server/controller/BaseController.java
index 2f63967..5647b52 100644
--- a/application/src/main/java/org/thingsboard/server/controller/BaseController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/BaseController.java
@@ -57,6 +57,7 @@ import org.thingsboard.server.service.component.ComponentDiscoveryService;
import org.thingsboard.server.service.security.model.SecurityUser;
import javax.mail.MessagingException;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Optional;
@@ -381,4 +382,23 @@ public abstract class BaseController {
checkTenantId(rule.getTenantId());
return rule;
}
+
+ protected String constructBaseUrl(HttpServletRequest request) {
+ String scheme = request.getScheme();
+ if (request.getHeader("x-forwarded-proto") != null) {
+ scheme = request.getHeader("x-forwarded-proto");
+ }
+ int serverPort = request.getServerPort();
+ if (request.getHeader("x-forwarded-port") != null) {
+ try {
+ serverPort = request.getIntHeader("x-forwarded-port");
+ } catch (NumberFormatException e) {}
+ }
+
+ String baseUrl = String.format("%s://%s:%d",
+ scheme,
+ request.getServerName(),
+ serverPort);
+ return baseUrl;
+ }
}
diff --git a/application/src/main/java/org/thingsboard/server/controller/UserController.java b/application/src/main/java/org/thingsboard/server/controller/UserController.java
index 3a0c401..124c8e0 100644
--- a/application/src/main/java/org/thingsboard/server/controller/UserController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/UserController.java
@@ -77,14 +77,7 @@ public class UserController extends BaseController {
User savedUser = checkNotNull(userService.saveUser(user));
if (sendEmail) {
UserCredentials userCredentials = userService.findUserCredentialsByUserId(savedUser.getId());
- String scheme = request.getScheme();
- if (request.getHeader("x-forwarded-proto") != null) {
- scheme = request.getHeader("x-forwarded-proto");
- }
- String baseUrl = String.format("%s://%s:%d",
- scheme,
- request.getServerName(),
- request.getServerPort());
+ String baseUrl = constructBaseUrl(request);
String activateUrl = String.format("%s/api/noauth/activate?activateToken=%s", baseUrl,
userCredentials.getActivateToken());
String email = savedUser.getEmail();
@@ -111,14 +104,7 @@ public class UserController extends BaseController {
User user = checkNotNull(userService.findUserByEmail(email));
UserCredentials userCredentials = userService.findUserCredentialsByUserId(user.getId());
if (!userCredentials.isEnabled()) {
- String scheme = request.getScheme();
- if (request.getHeader("x-forwarded-proto") != null) {
- scheme = request.getHeader("x-forwarded-proto");
- }
- String baseUrl = String.format("%s://%s:%d",
- scheme,
- request.getServerName(),
- request.getServerPort());
+ String baseUrl = constructBaseUrl(request);
String activateUrl = String.format("%s/api/noauth/activate?activateToken=%s", baseUrl,
userCredentials.getActivateToken());
mailService.sendActivationEmail(activateUrl, email);