Commit d751ace71cabc64ab16b1286693c579a1487fbdf

Authored by Igor Kulikov
1 parent efb03e49

Use x-forwarded-port header to detect base URL port.

... ... @@ -124,14 +124,7 @@ public class AuthController extends BaseController {
124 124 HttpServletRequest request) throws ThingsboardException {
125 125 try {
126 126 UserCredentials userCredentials = userService.requestPasswordReset(email);
127   - String scheme = request.getScheme();
128   - if (request.getHeader("x-forwarded-proto") != null) {
129   - scheme = request.getHeader("x-forwarded-proto");
130   - }
131   - String baseUrl = String.format("%s://%s:%d",
132   - scheme,
133   - request.getServerName(),
134   - request.getServerPort());
  127 + String baseUrl = constructBaseUrl(request);
135 128 String resetPasswordUrl = String.format("%s/api/noauth/resetPassword?resetToken=%s", baseUrl,
136 129 userCredentials.getResetToken());
137 130
... ... @@ -175,14 +168,7 @@ public class AuthController extends BaseController {
175 168 UserCredentials credentials = userService.activateUserCredentials(activateToken, encodedPassword);
176 169 User user = userService.findUserById(credentials.getUserId());
177 170 SecurityUser securityUser = new SecurityUser(user, credentials.isEnabled());
178   - String scheme = request.getScheme();
179   - if (request.getHeader("x-forwarded-proto") != null) {
180   - scheme = request.getHeader("x-forwarded-proto");
181   - }
182   - String baseUrl = String.format("%s://%s:%d",
183   - scheme,
184   - request.getServerName(),
185   - request.getServerPort());
  171 + String baseUrl = constructBaseUrl(request);
186 172 String loginUrl = String.format("%s/login", baseUrl);
187 173 String email = user.getEmail();
188 174 mailService.sendAccountActivatedEmail(loginUrl, email);
... ... @@ -216,14 +202,7 @@ public class AuthController extends BaseController {
216 202 userCredentials = userService.saveUserCredentials(userCredentials);
217 203 User user = userService.findUserById(userCredentials.getUserId());
218 204 SecurityUser securityUser = new SecurityUser(user, userCredentials.isEnabled());
219   - String scheme = request.getScheme();
220   - if (request.getHeader("x-forwarded-proto") != null) {
221   - scheme = request.getHeader("x-forwarded-proto");
222   - }
223   - String baseUrl = String.format("%s://%s:%d",
224   - scheme,
225   - request.getServerName(),
226   - request.getServerPort());
  205 + String baseUrl = constructBaseUrl(request);
227 206 String loginUrl = String.format("%s/login", baseUrl);
228 207 String email = user.getEmail();
229 208 mailService.sendPasswordWasResetEmail(loginUrl, email);
... ...
... ... @@ -57,6 +57,7 @@ import org.thingsboard.server.service.component.ComponentDiscoveryService;
57 57 import org.thingsboard.server.service.security.model.SecurityUser;
58 58
59 59 import javax.mail.MessagingException;
  60 +import javax.servlet.http.HttpServletRequest;
60 61 import javax.servlet.http.HttpServletResponse;
61 62 import java.util.List;
62 63 import java.util.Optional;
... ... @@ -381,4 +382,23 @@ public abstract class BaseController {
381 382 checkTenantId(rule.getTenantId());
382 383 return rule;
383 384 }
  385 +
  386 + protected String constructBaseUrl(HttpServletRequest request) {
  387 + String scheme = request.getScheme();
  388 + if (request.getHeader("x-forwarded-proto") != null) {
  389 + scheme = request.getHeader("x-forwarded-proto");
  390 + }
  391 + int serverPort = request.getServerPort();
  392 + if (request.getHeader("x-forwarded-port") != null) {
  393 + try {
  394 + serverPort = request.getIntHeader("x-forwarded-port");
  395 + } catch (NumberFormatException e) {}
  396 + }
  397 +
  398 + String baseUrl = String.format("%s://%s:%d",
  399 + scheme,
  400 + request.getServerName(),
  401 + serverPort);
  402 + return baseUrl;
  403 + }
384 404 }
... ...
... ... @@ -77,14 +77,7 @@ public class UserController extends BaseController {
77 77 User savedUser = checkNotNull(userService.saveUser(user));
78 78 if (sendEmail) {
79 79 UserCredentials userCredentials = userService.findUserCredentialsByUserId(savedUser.getId());
80   - String scheme = request.getScheme();
81   - if (request.getHeader("x-forwarded-proto") != null) {
82   - scheme = request.getHeader("x-forwarded-proto");
83   - }
84   - String baseUrl = String.format("%s://%s:%d",
85   - scheme,
86   - request.getServerName(),
87   - request.getServerPort());
  80 + String baseUrl = constructBaseUrl(request);
88 81 String activateUrl = String.format("%s/api/noauth/activate?activateToken=%s", baseUrl,
89 82 userCredentials.getActivateToken());
90 83 String email = savedUser.getEmail();
... ... @@ -111,14 +104,7 @@ public class UserController extends BaseController {
111 104 User user = checkNotNull(userService.findUserByEmail(email));
112 105 UserCredentials userCredentials = userService.findUserCredentialsByUserId(user.getId());
113 106 if (!userCredentials.isEnabled()) {
114   - String scheme = request.getScheme();
115   - if (request.getHeader("x-forwarded-proto") != null) {
116   - scheme = request.getHeader("x-forwarded-proto");
117   - }
118   - String baseUrl = String.format("%s://%s:%d",
119   - scheme,
120   - request.getServerName(),
121   - request.getServerPort());
  107 + String baseUrl = constructBaseUrl(request);
122 108 String activateUrl = String.format("%s/api/noauth/activate?activateToken=%s", baseUrl,
123 109 userCredentials.getActivateToken());
124 110 mailService.sendActivationEmail(activateUrl, email);
... ...