From da32ca761c651292d272355d7c5aae10b5e7e1ab Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 8 Sep 2017 14:08:29 +0200 Subject: [PATCH] when user logout session auth key is cleared --- CHANGELOG | 5 ++++ frontend-js/.idea/frontend-js.iml | 1 + frontend-js/src/main/js/ServerConnector.js | 22 +++++++++-------- frontend-js/testFiles/apiCalls/doLogout | 1 + persist/src/db/11.0.1/fix_db_20170908.sql | 1 + .../mapviewer/api/users/UserController.java | 24 +++++++++++++++---- 6 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 frontend-js/testFiles/apiCalls/doLogout create mode 100644 persist/src/db/11.0.1/fix_db_20170908.sql diff --git a/CHANGELOG b/CHANGELOG index 5ddd8c6f4e..1eb8ddc1b4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +minerva (11.0.1) stable; urgency=medium + * Bug fix: logout caused issues with session data + + -- Piotr Gawron <piotr.gawron@uni.lu> Fri, 08 Sep 2017 12:00:00 +0200 + minerva (11.0.0) stable; urgency=medium * Bug fix: security issue - access to specific map can be restricted diff --git a/frontend-js/.idea/frontend-js.iml b/frontend-js/.idea/frontend-js.iml index 24643cc374..69ef67a424 100644 --- a/frontend-js/.idea/frontend-js.iml +++ b/frontend-js/.idea/frontend-js.iml @@ -3,6 +3,7 @@ <component name="NewModuleRootManager"> <content url="file://$MODULE_DIR$"> <excludeFolder url="file://$MODULE_DIR$/.tmp" /> + <excludeFolder url="file://$MODULE_DIR$/dist" /> <excludeFolder url="file://$MODULE_DIR$/temp" /> <excludeFolder url="file://$MODULE_DIR$/tmp" /> </content> diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 8e87692ac1..36f7e29957 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -248,15 +248,14 @@ ServerConnector.getToken = function (token) { var self = this; token = self.getSessionData(null).getToken(); - if (token === undefined) { + var login = self.getSessionData(null).getLogin() + if (token === undefined || login === undefined) { return self.login(); } else { // if the project is not initialized then check if we can download data // using current token if (self.getSessionData().getProject() === null) { - return self.getConfiguration({ - token: token - }).then(function () { + return self.getConfiguration().then(function () { return token; }, function () { return self.login(); @@ -376,6 +375,12 @@ ServerConnector.loginUrl = function () { }); }; +ServerConnector.logoutUrl = function () { + return this.getApiUrl({ + type: "/doLogout", + }); +}; + ServerConnector.getSuggestedQueryListUrl = function (queryParams, filterParams) { return this.getApiUrl({ url: this.getBioEntitiesUrl(queryParams) + "suggestedQueryList/", @@ -603,10 +608,7 @@ ServerConnector.getUserUrl = function (queryParams, filterParams) { }); }; -ServerConnector.getConfiguration = function (params) { - if (params === undefined) { - params = {}; - } +ServerConnector.getConfiguration = function () { var self = this; if (this._configuration === undefined) { return self.readFile(self.getConfigurationUrl()).then(function (content) { @@ -947,7 +949,7 @@ ServerConnector.getClosestElementsByCoordinates = function (params) { ServerConnector.login = function (login, password) { var self = this; var params = {}; - if (login !== undefined) { + if (login !== undefined && login !== "") { params.login = login; params.password = password; } else { @@ -970,7 +972,7 @@ ServerConnector.logout = function () { var self = this; self.getSessionData().setToken(undefined); self.getSessionData().setLogin(undefined); - return Promise.resolve(); + return self.readFile(self.logoutUrl()); }; ServerConnector.getElementsByQuery = function (params) { diff --git a/frontend-js/testFiles/apiCalls/doLogout b/frontend-js/testFiles/apiCalls/doLogout new file mode 100644 index 0000000000..1a36cf5fc2 --- /dev/null +++ b/frontend-js/testFiles/apiCalls/doLogout @@ -0,0 +1 @@ +{"status":"ok"} \ No newline at end of file diff --git a/persist/src/db/11.0.1/fix_db_20170908.sql b/persist/src/db/11.0.1/fix_db_20170908.sql new file mode 100644 index 0000000000..a33b6ad89d --- /dev/null +++ b/persist/src/db/11.0.1/fix_db_20170908.sql @@ -0,0 +1 @@ +-- empty file to force directory to be commited to git repo diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserController.java b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserController.java index a7b6b76983..d85484790e 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserController.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserController.java @@ -78,11 +78,27 @@ public class UserController extends BaseController { } @RequestMapping(value = "/doLogout", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE }) - public Map<String, String> logout(@CookieValue(value = Configuration.AUTH_TOKEN) String token) throws SecurityException { + public Map<String, String> logout(@CookieValue(value = Configuration.AUTH_TOKEN) String token, + HttpServletResponse response // + ) throws SecurityException, IOException { userService.logout(token); - Map<String, String> response = new HashMap<>(); - response.put("status", "OK"); - return response; + Map<String, String> result = new HashMap<>(); + result.put("status", "OK"); + + final Boolean useSecureCookie = false; + final String cookiePath = "/"; + + Cookie cookie = new Cookie("MINERVA_AUTH_TOKEN", token); + + cookie.setSecure(useSecureCookie); + cookie.setMaxAge(0); + cookie.setPath(cookiePath); + + response.addCookie(cookie); + response.getWriter().write("{\"status\":\"OK\"}"); + response.getWriter().flush(); + response.getWriter().close(); + return result; } /** -- GitLab