diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 68766ff3829299e58f9ad2c982c3765cf15e1019..e7e6662fe691bcafb3d9185ecf2c88b04af1147f 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -1097,6 +1097,8 @@ ServerConnector.getUsers = function (forceRefresh) { self._users.push(self._usersByLogin[user.getLogin()]); } return self._users; + }).then(null, function (error) { + return self.processNetworkError(error); }); } diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js index 814989486559ea3a64430e82e2f2bac2a08de77c..ed0594d070b85d9cd8be94026d43f29a876800c5 100644 --- a/frontend-js/src/main/js/gui/Panel.js +++ b/frontend-js/src/main/js/gui/Panel.js @@ -83,11 +83,8 @@ Panel.prototype.createHelpButton = function () { Panel.prototype.disablePanel = function (message) { var self = this; - var searchQueryElement = self.getControlElement(PanelControlElementType.SEARCH_DIV); - var searchResultsElement = self.getControlElement(PanelControlElementType.SEARCH_RESULTS_DIV); - - searchQueryElement.style.visibility = "hidden"; - searchResultsElement.style.visibility = "hidden"; + $(self.getElement()).children().css("visibility", "hidden"); + $("[class='minerva-help-button']",self.getElement()).children().css("visibility", "visible"); var hideReasonDiv = document.createElement("div"); hideReasonDiv.className = "searchPanel"; @@ -97,7 +94,7 @@ Panel.prototype.disablePanel = function (message) { center.appendChild(messageDiv); hideReasonDiv.appendChild(center); - self.getElement().insertBefore(hideReasonDiv, searchQueryElement); + $(self.getElement()).prepend(hideReasonDiv); }; Panel.prototype.isDisabled = function () { diff --git a/frontend-js/src/main/js/gui/admin/EditUserDialog.js b/frontend-js/src/main/js/gui/admin/EditUserDialog.js index e4a51806b4541e2c63661dd69cf055b9023c37fc..f45581a4640c5e85e9ab88812e5c44fb5ca88b1e 100644 --- a/frontend-js/src/main/js/gui/admin/EditUserDialog.js +++ b/frontend-js/src/main/js/gui/admin/EditUserDialog.js @@ -127,7 +127,6 @@ EditUserDialog.prototype.addTab = function (params) { }); contentDiv.style.overflow = "auto"; - if (params.content !== undefined) { contentDiv.appendChild(params.content); } diff --git a/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js b/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js index 5f018fb7fe2885afc05b318f7f97d31b7b07cb4e..83f2ff058d6751c21f608acf42e30284dc5ade8e 100644 --- a/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/UsersAdminPanel.js @@ -4,6 +4,8 @@ var Promise = require('bluebird'); var AbstractAdminPanel = require('./AbstractAdminPanel'); var EditUserDialog = require('./EditUserDialog'); +var SecurityError = require('../../SecurityError'); + var User = require("../../map/data/User"); var Functions = require('../../Functions'); @@ -165,6 +167,12 @@ UsersAdminPanel.prototype.init = function () { var self = this; return ServerConnector.getUsers().then(function (users) { return self.setUsers(users); + }).catch(function (error) { + if (error instanceof SecurityError) { + self.disablePanel("You have no privilege to manage users"); + } else { + throw error; + } }); }; diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js index 22fc81ae7c319256c2f882850c25fa558320465d..3a476c3233001d645f573ca1e7fb858777d6f666 100644 --- a/frontend-js/src/test/js/ServerConnector-test.js +++ b/frontend-js/src/test/js/ServerConnector-test.js @@ -15,6 +15,7 @@ var NetworkError = require('../../main/js/NetworkError'); var Project = require('../../main/js/map/data/Project'); var Reaction = require('../../main/js/map/data/Reaction'); var ServerConnector = require('../../main/js/ServerConnector'); +var SecurityError = require('../../main/js/SecurityError'); var logger = require('./logger'); var chai = require('chai'); @@ -355,6 +356,22 @@ describe('ServerConnector', function () { assert.ok(user.getName() !== modifiedName); }); }); + it('access denied', function () { + var originalFun = ServerConnector._sendRequest; + ServerConnector._sendRequest = function () { + return Promise.reject(new NetworkError("", { + statusCode: HttpStatus.FORBIDDEN + })) + }; + return ServerConnector.getUsers().then(function () { + assert.notOk("Security error expected"); + }, function (error) { + assert.ok(error instanceof SecurityError); + } + ).finally(function () { + ServerConnector._sendRequest = originalFun; + }); + }); }); describe('uploadFile', function () { diff --git a/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js index 92410c1671356f7985c17170f31c7ada5eee791c..28f5ad6e20cae8d9b18bc0eda8fa2c9ed1bdbae6 100644 --- a/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js @@ -3,6 +3,7 @@ require("../../mocha-config"); var UsersAdminPanel = require('../../../../main/js/gui/admin/UsersAdminPanel'); +var SecurityError = require('../../../../main/js/SecurityError'); var ServerConnector = require('../../ServerConnector-mock'); var logger = require('../../logger'); @@ -10,22 +11,49 @@ var assert = require('assert'); describe('UsersAdminPanel', function () { - it('init', function () { - var usersTab; - var project; - return ServerConnector.getProject().then(function (result) { - project = result; - return ServerConnector.getConfiguration(); - }).then(function (configuration) { - usersTab = new UsersAdminPanel({ - element: testDiv, - project: project, - configuration: configuration + describe('init', function () { + it('default', function () { + var usersTab; + var project; + return ServerConnector.getProject().then(function (result) { + project = result; + return ServerConnector.getConfiguration(); + }).then(function (configuration) { + usersTab = new UsersAdminPanel({ + element: testDiv, + project: project, + configuration: configuration + }); + return usersTab.init(); + }).then(function () { + assert.equal(0, logger.getWarnings().length); + return usersTab.destroy(); + }); + }); + it('user without access', function () { + var usersTab; + var project; + var oldFun = ServerConnector.getUsers; + ServerConnector.getUsers = function () { + return Promise.reject(new SecurityError("Access denied.")); + }; + return ServerConnector.getProject().then(function (result) { + project = result; + return ServerConnector.getConfiguration(); + }).then(function (configuration) { + usersTab = new UsersAdminPanel({ + element: testDiv, + project: project, + configuration: configuration + }); + return usersTab.init(); + }).then(function () { + assert.equal(0, logger.getWarnings().length); + assert.ok(usersTab.getElement().innerHTML.indexOf("no privilege") >= 0); + return usersTab.destroy(); + }).finally(function () { + ServerConnector.getUsers = oldFun; }); - return usersTab.init(); - }).then(function () { - assert.equal(0, logger.getWarnings().length); - return usersTab.destroy(); }); });