Allow for temporary, staff, and permanent operator changes.
Temporary uses a temp authtoken for a few minute timeout.
Staff uses a normal staff login authtoken for a multi-hour timeout.
Permanent is a staff change that disregards the previous login instead of
allowing it to be recovered by using the menu item again.
I also fixed things up so later timeouts can re-use the previous duration
and fixed up some title bar issues:
1 - Login screen shows version again (needed a document in the title set)
2 - Menu windows don't forget the server name
3 - Menu windows keep the same number for their lifetime
Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Signed-off-by: Bill Erickson <berick@esilibrary.com>
<!ENTITY staff.auth.verify.submit.accesskey "V">
<!ENTITY staff.auth.verify.retrieve.label "Retrieve">
<!ENTITY staff.auth.verify.retrieve.accesskey "R">
+<!ENTITY staff.auth.change_type.label "New Login Type:">
+<!ENTITY staff.auth.change_type.accesskey "N">
+<!ENTITY staff.auth.change_type_description "Temporary logins expire with a few minutes of inactivity. Staff logins are the same as the initial login into the staff client. Permanent will discard the existing login session and replace it with the new one.">
+<!ENTITY staff.auth.change_type_staff "Staff">
+<!ENTITY staff.auth.change_type_temporary "Temporary">
+<!ENTITY staff.auth.change_type_permanent "Permanent">
<!ENTITY staff.bills_current_payment_label "Current Payment">
<!ENTITY staff.bills_information "Information">
}
}
- window.title = authStrings.getFormattedString('staff.auth.titlebar.label', version);
+ window.document.title = authStrings.getFormattedString('staff.auth.titlebar.label', CLIENT_VERSION);
var x = document.getElementById('about_btn');
x.addEventListener(
'command',
} else {
if (network.get_new_session(offlineStrings.getString('menu.cmd_chg_session.label'),{'url_prefix':obj.url_prefix})) {
obj.data.stash_retrieve();
- obj.data.list.au[1] = JSON2js( temp_au );
- obj.data.stash('list');
- obj.data.previous_session = JSON2js( temp_ses );
- obj.data.previous_menu_perms = obj.data.menu_perms;
+ if (obj.data.session.is_perm === false) {
+ obj.data.list.au[1] = JSON2js( temp_au );
+ obj.data.stash('list');
+ obj.data.previous_session = JSON2js( temp_ses );
+ obj.data.previous_menu_perms = obj.data.menu_perms;
+ obj.data.stash('previous_session');
+ obj.data.stash('previous_menu_perms');
+ } else {
+ var temp_session_object = JSON2js( temp_ses );
+ network.simple_request('AUTH_DELETE', [ temp_session_object.key ] );
+ }
obj.data.menu_perms = false;
- obj.data.stash('previous_session');
- obj.data.stash('previous_menu_perms');
obj.data.stash('menu_perms');
}
}
JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
XML_HTTP_SERVER = g.data.server_unadorned;
- document.title = g.window.appshell_name_increment() + ': ' + g.data.list.au[0].usrname() + '@' + g.data.ws_name + '.' + g.data.server_unadorned;
+ window.egwinid = g.window.appshell_name_increment();
+ document.title = window.egwinid + ': ' + g.data.list.au[0].usrname() + '@' + g.data.ws_name + '.' + g.data.server_unadorned;
var delay = g.data.hash.aous["ui.general.idle_timeout"];
if (delay) setup_idle_observer(delay);
JSAN.use('util.window'); var win = new util.window();
var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
- var enumerator = windowManagerInterface.getEnumerator(null);
+ var enumerator = windowManagerInterface.getEnumerator('eg_menu');
var w; // set title on all appshell windows
while ( w = enumerator.getNext() ) {
- if (w.document.title.match(/^\d/)) {
- w.document.title =
- win.appshell_name_increment()
- + ': ' + data.list.au[0].usrname()
- + '@' + data.ws_name;
- + '.' + data.server_unadorned
- }
+ w.document.title =
+ w.egwinid
+ + ': ' + data.list.au[0].usrname()
+ + '@' + data.ws_name
+ + '.' + data.server_unadorned;
}
} catch(E) {
obj.error.standard_unexpected_error_alert(offlineStrings.getString('network.window_title.error'),E);
var url = urls.XUL_AUTH_SIMPLE;
if (typeof xulG != 'undefined' && typeof xulG.url_prefix == 'function') url = xulG.url_prefix( url );
JSAN.use('util.window'); var win = new util.window();
+ JSAN.use('OpenILS.data');
+ var data = new OpenILS.data(); data.init({'via':'stash'});
var my_xulG = win.open(
url,
//+ '?login_type=staff'
offlineStrings.getString('network.new_session.authorize'),
'chrome,resizable,modal,width=700,height=500',
{
- 'login_type' : 'staff',
+ 'login_type' : text ? (data.session.login_type ? data.session.login_type : 'staff') : 'ochange',
'desc_brief' : text ? offlineStrings.getString('network.new_session.expired') : offlineStrings.getString('network.new_session.operator_change'),
'desc_full' : text ? offlineStrings.getString('network.new_session.expired.prompt') : offlineStrings.getString('network.new_session.operator_change.prompt')
//'simple_auth' : (new Date()).toString(),
}
);
- JSAN.use('OpenILS.data');
- var data = new OpenILS.data(); data.init({'via':'stash'});
+ data.stash_retrieve();
if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
data.session.key = data.temporary_session.key;
data.session.authtime = data.temporary_session.authtime;
+ data.session.is_perm = data.temporary_session.is_perm; // For operator change, otherwise ignorable.
+ data.session.login_type = data.temporary_session.login_type; // For timeouts *after* operator change.
data.stash('session');
try {
var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
<![CDATA[
var offlineStrings = document.getElementById('offlineStrings');
+ var login_type = 'temp';
function my_init() {
try {
$('server').value = g.data.server_unadorned;
- addCSSClass(document.documentElement,xul_param('login_type'))
+ login_type = xul_param('login_type') || 'temp';
+ addCSSClass(document.documentElement,login_type)
+ if(login_type == 'ochange')
+ $('change_type_row').hidden = false;
if (xul_param('desc_brief')) {
$('desc').hidden = false;
function authorize() {
try {
+ var my_login_type = login_type;
+ var is_perm = false;
+ if(login_type == 'ochange') {
+ my_login_type = $('change_type').value;
+ if(my_login_type == 'perm') {
+ my_login_type = 'staff';
+ is_perm = true;
+ }
+ }
JSAN.use('auth.session');
g.session = new auth.session(
{
'password_prompt' : $('password'),
'server_prompt' : $('server'),
},
- xul_param('login_type') || 'temp'
+ my_login_type
);
g.session.on_init = function() {
try {
g.data.temporary_session = { // old way because of local chrome still out there
'key' : g.session.key,
'authtime' : g.session.authtime,
- 'usr' : js2JSON(staff)
+ 'usr' : js2JSON(staff),
+ 'is_perm' : is_perm,
+ 'login_type' : my_login_type
}
g.data.stash('temporary_session');
xulG.temporary_session = g.data.temporary_session;
<groupbox>
<caption label="&staff.main.simple_auth.authorization.label;"/>
<grid>
- <columns><column /><column /></columns>
+ <columns><column /><column /><column flex="1" /></columns>
<rows>
<row>
<label value="&common.username.label;" control="username" accesskey="&common.username.accesskey;"/>
<label value="&staff.auth.password_prompt;" control="password" accesskey="&staff.auth.password_prompt.accesskey;"/>
<textbox id="password" type="password"/>
</row>
+ <row id="change_type_row" hidden="true">
+ <label value="&staff.auth.change_type.label;" control="change_type" accesskey="&staff.auth.change_type.accesskey;"/>
+ <menulist id="change_type">
+ <menupopup>
+ <menuitem label="&staff.auth.change_type_temporary;" value="temp" selected="true"/>
+ <menuitem label="&staff.auth.change_type_staff;" value="staff"/>
+ <menuitem label="&staff.auth.change_type_permanent;" value="perm"/>
+ </menupopup>
+ </menulist>
+ <description>&staff.auth.change_type_description;</description>
+ </row>
<row>
<button label="&common.cancel;" accesskey="&common.cancel.accesskey;" oncommand="window.close()"/>
<button label="&staff.main.simple_auth.authorize.label;" accesskey="&staff.main.simple_auth.authorize.accesskey;" oncommand="authorize()"/>