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 3aaa6949ea..5ef52c236d 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 2f63967b98..5647b52e96 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 3a0c401673..124c8e03b5 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);