From 1ac76814136b5c2a5eed726fcba799d9b2c552f1 Mon Sep 17 00:00:00 2001 From: Sonia Zorba <sonia.zorba@inaf.it> Date: Wed, 10 Nov 2021 18:23:43 +0100 Subject: [PATCH] Improved error message when attempting to open forbidden node --- .../vospace/ui/controller/NodesController.java | 16 +++++++++++++++- vospace-ui-frontend/src/api/server/index.js | 2 +- vospace-ui-frontend/src/store.js | 10 ++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java index 2dbb673..abcb6dd 100644 --- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java +++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java @@ -10,7 +10,9 @@ import it.inaf.ia2.vospace.ui.client.VOSpaceClient; import it.inaf.ia2.vospace.ui.data.Job; import it.inaf.ia2.vospace.ui.data.ListNodeData; import it.inaf.ia2.vospace.ui.data.MoveOrCopyRequest; +import it.inaf.ia2.vospace.ui.exception.PermissionDeniedException; import it.inaf.ia2.vospace.ui.exception.VOSpaceException; +import it.inaf.ia2.vospace.ui.exception.VOSpaceStatusException; import it.inaf.ia2.vospace.ui.service.MainNodesHtmlGenerator; import it.inaf.ia2.vospace.ui.service.MoveOrCopyNodeModalHtmlGenerator; import it.inaf.oats.vospace.datamodel.NodeUtils; @@ -72,7 +74,19 @@ public class NodesController extends BaseController { ListNodeData listNodeData = new ListNodeData(); - Node node = client.getNode(path); + Node node; + try { + node = client.getNode(path); + } catch (VOSpaceStatusException ex) { + if (ex.getHttpStatus() == 403) { + String message = "You cannot access this node"; + if (principal.getAccessToken() != null && principal.isTokenExpired()) { + message += ". Token is expired, please repeat the login."; + } + throw new PermissionDeniedException(message); + } + throw ex; + } listNodeData.setWritable(NodeUtils.checkIfWritable(node, principal.getName(), principal.getGroups())); diff --git a/vospace-ui-frontend/src/api/server/index.js b/vospace-ui-frontend/src/api/server/index.js index 4d09ab4..fb22961 100644 --- a/vospace-ui-frontend/src/api/server/index.js +++ b/vospace-ui-frontend/src/api/server/index.js @@ -66,7 +66,7 @@ export default { headers: { 'Cache-Control': 'no-cache' } - }, (typeof loading !== 'undefined') ? loading : true, true); + }, (typeof loading !== 'undefined') ? loading : true, true, true); }, loadJobs() { let url = BASE_API_URL + 'jobs'; diff --git a/vospace-ui-frontend/src/store.js b/vospace-ui-frontend/src/store.js index c2d82b9..ccdf1a3 100644 --- a/vospace-ui-frontend/src/store.js +++ b/vospace-ui-frontend/src/store.js @@ -145,12 +145,22 @@ export default new Vuex.Store({ }, actions: { setPath({ state, commit, dispatch }, path) { + let previousPath = state.path; commit('setPath', path); commit('setNodesLoading', true); client.getNode(state.path) .then(res => { dispatch('setNodes', res); }) + .catch(error => { + if (error.response && error.response.data) { + main.showError(error.response.data.message); + } else { + main.showError('Error while accessing node'); + } + commit('setPath', previousPath); + commit('setLoading', false); + }) .finally(() => commit('setNodesLoading', false)); }, setNodes({ commit, dispatch }, res) { -- GitLab