thingsboard-aplcache

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);