Mercurial > hg > digilib
changeset 1596:5f306566ebe7
new annotation user login dialog that doesn't show the password in clear.
author | robcast |
---|---|
date | Fri, 10 Feb 2017 20:05:32 +0100 |
parents | d1921b08fedb |
children | 4e22d3adf4c8 4326b99b471f |
files | webapp/src/main/webapp/jquery/jquery.digilib.annotator.js webapp/src/main/webapp/jquery/jquery.digilib.css webapp/src/main/webapp/jquery/jquery.digilib.dialogs.js |
diffstat | 3 files changed, 136 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.annotator.js Fri Feb 10 14:24:52 2017 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.annotator.js Fri Feb 10 20:05:32 2017 +0100 @@ -31,7 +31,7 @@ */ (function($) { // version of this plugin - var version = 'jquery.digilib.annotator.js 1.3.5'; + var version = 'jquery.digilib.annotator.js 1.3.6'; // affine geometry var geom = null; @@ -107,21 +107,26 @@ console.error("setAnnotationUser: No Auth plugin!!"); return; } - // set new user in digilib and Annotator Auth plugin - setAnnotationUser(data, auth, user, password); - // get new token - auth.token = null; - auth._unsafeToken = null; - // save new token in cookie - auth.withToken(function (tkn) { - data.dlOpts.annotationToken = auth.token; - fn.storeOptions(data); - // clear annotations - data.annotations = []; - annotator.plugins.Store.annotations = []; - // reload annotations - annotator.plugins.Store.pluginInit(); - }); + if (user == null) { + if (fn.showUserPasswordDialog != null) { + fn.showUserPasswordDialog(data, "Please enter user name and password for annotation server.", + function (userInput, passInput) { + console.debug("got username and password for annotation auth."); + setAnnotationUser(data, auth, userInput, passInput); + }); + } else { + // fall back to JS-prompt + user = window.prompt("Please authenticate (Cancel to log out): User name", data.settings.annotationUser); + if (user != null && user != 'anonymous') { + // password entered in JS-prompt + password = window.prompt("Please authenticate: Password (Beware! Password is visible!)", ''); + } + setAnnotationUser(data, auth, user, password); + } + } else { + // set new user in digilib and Annotator Auth plugin + setAnnotationUser(data, auth, user, password); + } }, /** @@ -234,41 +239,51 @@ * @param password password (optional) */ var setAnnotationUser = function (data, auth, user, password) { - if (user == null) { - // user name entered in JS-prompt - user = window.prompt("Please authenticate (Cancel to log out): User name", data.settings.annotationUser); - if (user != null && user != 'anonymous') { - // password entered in JS-prompt - password = window.prompt("Please authenticate: Password", ''); - // set params for Auth plugin - auth.options.requestData.password = password; - // try to use the safe url for the password - if (data.settings.annotationSafeTokenUrl != null) { - auth.options.tokenUrl = data.settings.annotationSafeTokenUrl; - } else { - console.warn("Sending token password over standard-URL!"); - } - } else { - // use anonymous user - user = 'anonymous'; - delete auth.options.requestData.password; - if (data.settings.annotationSafeTokenUrl != null) { - // reset url to unsafe - auth.options.tokenUrl = data.settings.annotationTokenUrl; - } - } + if (user != null && user != '' && user != 'anonymous') { + // set params for Auth plugin + auth.options.requestData.password = password; + // try to use the safe url for the password + if (data.settings.annotationSafeTokenUrl != null) { + auth.options.tokenUrl = data.settings.annotationSafeTokenUrl; + } else { + console.warn("Sending token password over standard-URL!"); + } + } else { + // use anonymous user + user = 'anonymous'; + delete auth.options.requestData.password; + if (data.settings.annotationSafeTokenUrl != null) { + // reset url to unsafe + auth.options.tokenUrl = data.settings.annotationTokenUrl; + } } + console.debug("setting annotation user to "+user); // set user in digilib data.settings.annotationUser = user; data.dlOpts.annotationUser = user; fn.storeOptions(data); + var annotator = data.annotator; // set params for Auth plugin auth.options.requestData.user = user; // set params for Permissions plugin - var perms = data.annotator.plugins.Permissions; + var perms = annotator.plugins.GroupPermissions || annotator.plugins.Permissions; if (perms != null) { perms.setUser(user); } + // get new token + auth.token = null; + auth._unsafeToken = null; + // save new token in cookie + auth.withToken(function (tkn) { + console.debug("setting new annotation token.", tkn, auth.token); + data.dlOpts.annotationToken = auth.token; + fn.storeOptions(data); + // clear annotations + data.annotations = []; + data.annotator.plugins.Store.annotations = []; + // reload annotations + data.annotator.plugins.Store.pluginInit(); + }); }; @@ -559,7 +574,7 @@ var getHandleUnauthorized = function (data) { return function (auth) { // prompt for user name and set user - setAnnotationUser(data, auth); + actions.setAnnotationUser(data); // then try again return true; };
--- a/webapp/src/main/webapp/jquery/jquery.digilib.css Fri Feb 10 14:24:52 2017 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.css Fri Feb 10 20:05:32 2017 +0100 @@ -211,6 +211,20 @@ margin: 0px 10px; } +div.dl-digilib #dl-userpass { + background-color: silver; + width: 300px; + padding: 10px; + border: 1px solid black; + position: absolute; + display: none; + z-index: 100; + } + +div.dl-digilib #dl-userpass div { + padding-top: 10px; + } + div.dl-digilib .dl-error { color: red; background-color: maroon;
--- a/webapp/src/main/webapp/jquery/jquery.digilib.dialogs.js Fri Feb 10 14:24:52 2017 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.dialogs.js Fri Feb 10 20:05:32 2017 +0100 @@ -60,6 +60,11 @@ // shows ScaleModeSelector dialogScaleMode : function (data) { fn.showScaleModeDialog(data); + }, + + // shows user name and password dialog + dialogUserPassword : function (data) { + fn.showUserPasswordDialog(data); } }; @@ -83,7 +88,7 @@ <div id="'+cssPrefix+'calibrationError" class="'+cssPrefix+'calibration-error">Please enter a numeric value like this: 12.3</div>\ </div>\ </div>'; - $calDiv = $(html); + var $calDiv = $(html); $calDiv.appendTo($elem); var $input = $calDiv.find('#'+cssPrefix+'calibrationInput'); var $ok = $calDiv.find('#'+cssPrefix+'calibrationOk'); @@ -134,7 +139,7 @@ <div id="'+cssPrefix+'scalemode" style="display:none; z-index:1000; position:absolute">\ <select class="'+cssPrefix+'scalemode" />\ </div>'; - $scaleDiv = $(html); + var $scaleDiv = $(html); $scaleDiv.appendTo($elem); var mode = fn.getScaleMode(data); var $select = $scaleDiv.find('select'); @@ -169,6 +174,64 @@ } }; + + /** + * creates and displays HTML structure for user name and password dialog. + */ + var showUserPasswordDialog = function (data, msg, callback) { + var $elem = data.$elem; + var settings = data.settings; + var cssPrefix = settings.cssPrefix; + var userpassId = cssPrefix+'userpass'; + if (fn.isOnScreen(data, '#'+userpassId)) return; // already onscreen + var html = '\ + <div id="'+userpassId+'" class="'+cssPrefix+'userpass">\ + <div>'+msg+'</div>\ + <div>User name: <input type="text" id="'+cssPrefix+'userInput" size="19"/></div>\ + <div>Password: <input type="password" id="'+cssPrefix+'passInput" size="20"/></div>\ + <div style="text-align:center">\ + <button class="'+cssPrefix+'button" id="'+cssPrefix+'userpassOk">OK</button>\ + <button class="'+cssPrefix+'button" id="'+cssPrefix+'userpassCancel">Cancel</button>\ + </div>\ + </div>'; + var $calDiv = $(html); + $calDiv.appendTo($elem); + var $userInput = $calDiv.find('#'+cssPrefix+'userInput'); + var $passInput = $calDiv.find('#'+cssPrefix+'passInput'); + var $ok = $calDiv.find('#'+cssPrefix+'userpassOk'); + var $cancel = $calDiv.find('#'+cssPrefix+'userpassCancel'); + var handler = function(event) { + // var _data = data; + if (event.keyCode == 27 || event.target.id == cssPrefix+'userpassCancel') { + fn.withdraw($calDiv); + return false; + } + if (event.keyCode == 13 || event.target.id == cssPrefix+'userpassOk') { + var user = $userInput.val(); + var pass = $passInput.val(); + fn.withdraw($calDiv); + if (callback != null) { + callback(user, pass); + } + return false; + } + }; + $ok.on("click.dialog", handler); + $cancel.on("click.dialog", handler); + $userInput.on("keypress.dialog", handler); + $passInput.on("keypress.dialog", handler); + $userInput.on("focus.dialog", handler); + $passInput.on("focus.dialog", handler); + $calDiv.fadeIn(); + fn.centerOnScreen(data, $calDiv); + $userInput.focus(); + return $calDiv; + }; + + + /** + * Hook dialogs into buttons. + */ var setButtonActions = function () { if (fn.setButtonAction == null) { console.debug('dialogs: could not assign button actions. Maybe jquery.digilib.buttons.js was not loaded?'); @@ -194,6 +257,7 @@ // export functions fn.showCalibrationDialog = showCalibrationDialog; fn.showScaleModeDialog = showScaleModeDialog; + fn.showUserPasswordDialog = showUserPasswordDialog; }; // plugin initialization