From ce40ea57c7431265291074aa3eaf5bf8b6e655bb Mon Sep 17 00:00:00 2001 From: Jayasanka Date: Fri, 11 Oct 2019 14:52:00 +0530 Subject: [PATCH] Fix server error issue when calling get logged-in user in APPM The following changes are with this commit, - Check authData object is null in UserHandler class - Add check logged-in user functionality to APPM UI --- .../react-app/src/App.js | 3 +- .../react-app/src/App.js | 26 ++++++++++------ .../ui/request/interceptor/UserHandler.java | 31 ++++++++++++------- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/App.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/App.js index cc0ab3486bf..0765dcff5f4 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/App.js +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.publisher.ui/react-app/src/App.js @@ -102,8 +102,9 @@ class App extends React.Component { window.location.origin + "/publisher-ui-request-handler/user", "platform=publisher" ).then(res => { + const pageURL = window.location.pathname; const lastURLSegment = pageURL.substr(pageURL.lastIndexOf('/') + 1); - if (lastURLSegment !== "login") { + if (lastURLSegment === "login") { window.location.href = window.location.origin + `/publisher/`; } else { this.getAndroidEnterpriseToken(config); diff --git a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/App.js b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/App.js index 4fc452939e2..9f4690c87a5 100644 --- a/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/App.js +++ b/components/application-mgt/org.wso2.carbon.device.application.mgt.store.ui/react-app/src/App.js @@ -78,22 +78,28 @@ class App extends React.Component { } checkUserLoggedIn = (config) => { - axios.get( - window.location.origin + config.serverConfig.invoker.uri + - config.serverConfig.invoker.publisher + "/applications/categories" + axios.post( + window.location.origin + "/store-ui-request-handler/user", + "platform=publisher" ).then(res => { - this.setState({ - loading: false, - config: config - }) + const pageURL = window.location.pathname; + const lastURLSegment = pageURL.substr(pageURL.lastIndexOf('/') + 1); + if (lastURLSegment === "login") { + window.location.href = window.location.origin + `/store/`; + } else { + this.setState({ + loading: false, + config: config + }); + } }).catch((error) => { if (error.hasOwnProperty("response") && error.response.status === 401) { const redirectUrl = encodeURI(window.location.href); const pageURL = window.location.pathname; const lastURLSegment = pageURL.substr(pageURL.lastIndexOf('/') + 1); - if(lastURLSegment!=="login"){ + if (lastURLSegment !== "login") { window.location.href = window.location.origin + `/store/login?redirect=${redirectUrl}`; - }else{ + } else { this.setState({ loading: false, config: config @@ -106,7 +112,7 @@ class App extends React.Component { }) } }); - } + }; render() { const {loading, error} = this.state; diff --git a/components/ui-request-interceptor/io.entgra.ui.request.interceptor/src/main/java/io/entgra/ui/request/interceptor/UserHandler.java b/components/ui-request-interceptor/io.entgra.ui.request.interceptor/src/main/java/io/entgra/ui/request/interceptor/UserHandler.java index e742e543fde..00f7a4914c6 100644 --- a/components/ui-request-interceptor/io.entgra.ui.request.interceptor/src/main/java/io/entgra/ui/request/interceptor/UserHandler.java +++ b/components/ui-request-interceptor/io.entgra.ui.request.interceptor/src/main/java/io/entgra/ui/request/interceptor/UserHandler.java @@ -43,32 +43,36 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; -@MultipartConfig @WebServlet("/user") public class UserHandler extends HttpServlet { +@MultipartConfig +@WebServlet("/user") +public class UserHandler extends HttpServlet { private static final Log log = LogFactory.getLog(UserHandler.class); private static final long serialVersionUID = 9050048549140517002L; - @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) { try { String platform = req.getParameter(HandlerConstants.PLATFORM); String serverUrl = req.getScheme() + HandlerConstants.SCHEME_SEPARATOR + req.getServerName() + HandlerConstants.COLON + System.getProperty("iot.gateway.https.port"); if (StringUtils.isBlank(platform)) { - ProxyResponse proxyResponse = new ProxyResponse(); - proxyResponse.setCode(HttpStatus.SC_BAD_REQUEST); - HandlerUtil.handleError(req, resp, serverUrl, platform, proxyResponse); + sendUnAuthorizeResponse(req, resp, serverUrl, platform); return; } HttpSession httpSession = req.getSession(false); if (httpSession == null) { - ProxyResponse proxyResponse = new ProxyResponse(); - proxyResponse.setCode(HttpStatus.SC_UNAUTHORIZED); - HandlerUtil.handleError(req, resp, serverUrl, platform, proxyResponse); + sendUnAuthorizeResponse(req, resp, serverUrl, platform); return; } AuthData authData = (AuthData) httpSession.getAttribute(HandlerConstants.SESSION_AUTH_DATA_KEY); + if (authData == null) { + sendUnAuthorizeResponse(req, resp, serverUrl, platform); + return; + } + String accessToken = authData.getAccessToken(); HttpPost tokenEndpoint = new HttpPost(serverUrl + HandlerConstants.INTROSPECT_ENDPOINT); @@ -94,9 +98,7 @@ import java.io.IOException; if (jTokenResult.isJsonObject()) { JsonObject jTokenResultAsJsonObject = jTokenResult.getAsJsonObject(); if (!jTokenResultAsJsonObject.get("active").getAsBoolean()) { - ProxyResponse proxyResponse = new ProxyResponse(); - proxyResponse.setCode(HttpStatus.SC_UNAUTHORIZED); - HandlerUtil.handleError(req, resp, serverUrl, platform, proxyResponse); + sendUnAuthorizeResponse(req, resp, serverUrl, platform); return; } ProxyResponse proxyResponse = new ProxyResponse(); @@ -110,4 +112,11 @@ import java.io.IOException; log.error("Error occurred while parsing the response. ", e); } } + + private void sendUnAuthorizeResponse(HttpServletRequest req, HttpServletResponse resp, String serverUrl, String platform) + throws IOException { + ProxyResponse proxyResponse = new ProxyResponse(); + proxyResponse.setCode(HttpStatus.SC_UNAUTHORIZED); + HandlerUtil.handleError(req, resp, serverUrl, platform, proxyResponse); + } }