From 6b41fb9c0eb726533a017552bf8ce8da0ae82535 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Thu, 1 Oct 2020 18:06:20 +0300 Subject: [PATCH] Refactored and used MiscUtils --- ...tomOAuth2AuthorizationRequestResolver.java | 12 +--- .../server/controller/OAuth2Controller.java | 3 +- .../thingsboard/server/utils/MiscUtils.java | 24 +++++-- .../thingsboard/server/utils/WebUtils.java | 70 ------------------- .../HybridClientRegistrationRepository.java | 2 + 5 files changed, 24 insertions(+), 87 deletions(-) delete mode 100644 application/src/main/java/org/thingsboard/server/utils/WebUtils.java diff --git a/application/src/main/java/org/thingsboard/server/config/CustomOAuth2AuthorizationRequestResolver.java b/application/src/main/java/org/thingsboard/server/config/CustomOAuth2AuthorizationRequestResolver.java index e8c59efde8..3d807fbdef 100644 --- a/application/src/main/java/org/thingsboard/server/config/CustomOAuth2AuthorizationRequestResolver.java +++ b/application/src/main/java/org/thingsboard/server/config/CustomOAuth2AuthorizationRequestResolver.java @@ -32,13 +32,12 @@ import org.springframework.security.oauth2.core.oidc.endpoint.OidcParameterNames import org.springframework.security.web.util.UrlUtils; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.stereotype.Service; -import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import org.thingsboard.server.dao.oauth2.OAuth2Configuration; -import org.thingsboard.server.utils.WebUtils; +import org.thingsboard.server.utils.MiscUtils; import javax.servlet.http.HttpServletRequest; import java.nio.charset.StandardCharsets; @@ -198,13 +197,8 @@ public class CustomOAuth2AuthorizationRequestResolver implements OAuth2Authoriza private String getRedirectUri(HttpServletRequest request) { String loginProcessingUri = oauth2Configuration != null ? oauth2Configuration.getLoginProcessingUrl() : DEFAULT_LOGIN_PROCESSING_URI; - - String scheme = WebUtils.getScheme(request); - String host = WebUtils.getHost(request); - String port = WebUtils.getPort(request); - log.trace("Scheme - {}, host - {}, port - {}.", scheme, host, port); - String requestHost = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort(); - return requestHost + loginProcessingUri; + String baseUrl= MiscUtils.constructBaseUrl(request); + return baseUrl + loginProcessingUri; } /** diff --git a/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java b/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java index d94a706440..bb3a87ef92 100644 --- a/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java +++ b/application/src/main/java/org/thingsboard/server/controller/OAuth2Controller.java @@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.oauth2.OAuth2ClientInfo; import org.thingsboard.server.common.data.oauth2.OAuth2ClientsParams; import org.thingsboard.server.common.data.oauth2.SchemeType; import org.thingsboard.server.queue.util.TbCoreComponent; +import org.thingsboard.server.utils.MiscUtils; import javax.servlet.http.HttpServletRequest; import java.util.List; @@ -37,7 +38,7 @@ public class OAuth2Controller extends BaseController { @ResponseBody public List getOAuth2Clients(HttpServletRequest request) throws ThingsboardException { try { - return oAuth2Service.getOAuth2Clients(request.getScheme(), request.getServerName()); + return oAuth2Service.getOAuth2Clients(MiscUtils.getScheme(request), MiscUtils.getDomainName(request)); } catch (Exception e) { throw handleException(e); } diff --git a/application/src/main/java/org/thingsboard/server/utils/MiscUtils.java b/application/src/main/java/org/thingsboard/server/utils/MiscUtils.java index ed13ca603d..ad242c96e5 100644 --- a/application/src/main/java/org/thingsboard/server/utils/MiscUtils.java +++ b/application/src/main/java/org/thingsboard/server/utils/MiscUtils.java @@ -49,12 +49,27 @@ public class MiscUtils { } public static String constructBaseUrl(HttpServletRequest request) { - String scheme = request.getScheme(); + return String.format("%s://%s:%d", + getScheme(request), + getDomainName(request), + getPort(request)); + } + public static String getScheme(HttpServletRequest request){ + String scheme = request.getScheme(); String forwardedProto = request.getHeader("x-forwarded-proto"); if (forwardedProto != null) { scheme = forwardedProto; } + return scheme; + } + + public static String getDomainName(HttpServletRequest request){ + return request.getServerName(); + } + + public static int getPort(HttpServletRequest request){ + String forwardedProto = request.getHeader("x-forwarded-proto"); int serverPort = request.getServerPort(); if (request.getHeader("x-forwarded-port") != null) { @@ -72,11 +87,6 @@ public class MiscUtils { break; } } - - String baseUrl = String.format("%s://%s:%d", - scheme, - request.getServerName(), - serverPort); - return baseUrl; + return serverPort; } } diff --git a/application/src/main/java/org/thingsboard/server/utils/WebUtils.java b/application/src/main/java/org/thingsboard/server/utils/WebUtils.java deleted file mode 100644 index 31d61634af..0000000000 --- a/application/src/main/java/org/thingsboard/server/utils/WebUtils.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright © 2016-2020 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.utils; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; - -import javax.servlet.http.HttpServletRequest; - -@Slf4j -public class WebUtils { - private static final String X_FORWARDED_HOST_HEADER_KEY = "x-forwarded-host"; - private static final String X_FORWARDED_PORT_HEADER_KEY = "x-forwarded-port"; - private static final String X_FORWARDED_PROTO_HEADER_KEY = "x-forwarded-proto"; - - public static String getHost(HttpServletRequest request) { - String forwardedHost = request.getHeader(X_FORWARDED_HOST_HEADER_KEY); - log.trace("Forwarded host - {}.", forwardedHost); - if (!StringUtils.isEmpty(forwardedHost)) { - if (forwardedHost.contains(":")) { - return forwardedHost.substring(0, forwardedHost.indexOf(":")); - } else { - return forwardedHost; - } - } else { - return request.getServerName(); - } - } - - public static String getScheme(HttpServletRequest request) { - String forwardedProto = request.getHeader(X_FORWARDED_PROTO_HEADER_KEY); - log.trace("Forwarded proto - {}.", forwardedProto); - if (!StringUtils.isEmpty(forwardedProto)) { - return forwardedProto; - } else { - return request.getServerName(); - } - } - - public static String getPort(HttpServletRequest request) { - String forwardedPort = request.getHeader(X_FORWARDED_PORT_HEADER_KEY); - log.trace("Forwarded port - {}.", forwardedPort); - if (!StringUtils.isEmpty(forwardedPort)) { - return forwardedPort; - } - String forwardedHost = request.getHeader(X_FORWARDED_HOST_HEADER_KEY); - if (!StringUtils.isEmpty(forwardedHost)) { - if (forwardedHost.contains(":")) { - return forwardedHost.substring(forwardedHost.indexOf(":")); - } else { - return "HTTP".equals(getScheme(request).toUpperCase()) ? - "80" : "443"; - } - } - return Integer.toString(request.getServerPort()); - } -} diff --git a/dao/src/main/java/org/thingsboard/server/dao/oauth2/HybridClientRegistrationRepository.java b/dao/src/main/java/org/thingsboard/server/dao/oauth2/HybridClientRegistrationRepository.java index 93c4c47df0..4c9d44a5bc 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/oauth2/HybridClientRegistrationRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/oauth2/HybridClientRegistrationRepository.java @@ -27,6 +27,7 @@ import java.util.UUID; @Component public class HybridClientRegistrationRepository implements ClientRegistrationRepository { + private static final String defaultRedirectUriTemplate = "{baseUrl}/login/oauth2/code/{registrationId}"; @Autowired private OAuth2Service oAuth2Service; @@ -52,6 +53,7 @@ public class HybridClientRegistrationRepository implements ClientRegistrationRep .userNameAttributeName(localClientRegistration.getUserNameAttributeName()) .jwkSetUri(localClientRegistration.getJwkSetUri()) .clientAuthenticationMethod(new ClientAuthenticationMethod(localClientRegistration.getClientAuthenticationMethod())) + .redirectUriTemplate(defaultRedirectUriTemplate) .build(); } }