1 dump('entering auth/controller.js\n');
4 if (typeof auth == 'undefined') auth = {};
5 auth.controller = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 this.w = params.window;
12 auth.controller.prototype = {
14 'init' : function () {
16 var obj = this; // so the 'this' in event handlers don't confuse us
19 JSAN.use('OpenILS.data');
20 obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
23 JSAN.use('util.controller'); obj.controller = new util.controller();
39 'cmd_standalone_import' : [
42 obj.standalone_import();
45 'cmd_standalone_export' : [
48 obj.standalone_export();
54 obj.debug('clear_cache');
60 obj.debug('js_console');
75 'cmd_close_window' : [
84 obj.test_server( obj.controller.view.server_prompt.value );
92 obj.controller.view.cmd_ssl_exception.setAttribute('hidden','true');
93 var x = new XMLHttpRequest();
94 x.open("GET",'chrome://pippki/content/exceptionDialog.xul',false);
96 obj.controller.view.cmd_ssl_exception.setAttribute('hidden','false');
98 obj.controller.view.cmd_ssl_exception.setAttribute('hidden','true');
103 'cmd_ssl_exception' : [
107 'chrome://pippki/content/exceptionDialog.xul',
109 'chrome,centerscreen,modal',
111 'location' : 'https://' + obj.controller.view.server_prompt.value,
112 'prefetchCert' : true
115 obj.test_server( obj.controller.view.server_prompt.value );
126 for (var s in obj.data.ws_info) {
127 var mi = document.createElement('menuitem');
128 mi.setAttribute('label',s);
129 mi.setAttribute('value',s);
139 'password_prompt' : [
145 function(e) { return function() {} }
147 'apply_locale_btn' : [
149 function(e) { return function() {} }
153 function(e) { return function() {} }
157 function(e) { return function() {
162 function(e) { return function() {
164 JSAN.use('util.widgets'); util.widgets.remove_children(e);
165 var x = document.createElement('description');
168 && obj.data.ws_info[ obj.controller.view.server_prompt.value ]) {
169 var ws = obj.data.ws_info[ obj.controller.view.server_prompt.value ];
171 document.createTextNode(
172 ws.name /*+ ' @ ' + ws.lib_shortname*/
175 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
176 JSAN.use('util.file'); var file = new util.file('last_ws_server');
177 file.set_object(obj.controller.view.server_prompt.value);
181 document.createTextNode(
182 document.getElementById('authStrings').getString('staff.auth.controller.not_configured')
193 function(e) { return function() {
200 obj.controller.view.name_prompt.focus();
202 function handle_keypress(ev) {
204 if (ev.keyCode && ev.keyCode == 13) {
206 case obj.controller.view.server_prompt:
208 obj.controller.view.name_prompt.focus(); obj.controller.view.name_prompt.select();
210 case obj.controller.view.name_prompt:
212 obj.controller.view.password_prompt.focus(); obj.controller.view.password_prompt.select();
214 case obj.controller.view.password_prompt:
216 obj.controller.view.submit_button.focus();
227 obj.controller.view.server_prompt.addEventListener(
230 obj.test_server(ev.target.value);
231 obj.controller.render('ws_deck');
235 obj.controller.view.server_prompt.addEventListener(
238 obj.controller.view.name_prompt.focus();
239 obj.controller.view.name_prompt.select();
240 obj.test_server(ev.target.value);
241 obj.controller.render('ws_deck');
246 // This talks to our ILS
247 JSAN.use('auth.session');
248 obj.session = new auth.session(obj.controller.view);
250 obj.controller.render();
251 obj.test_server( obj.controller.view.server_prompt.value );
252 obj.controller.render('ws_deck');
254 if (typeof this.on_init == 'function') {
255 this.error.sdump('D_AUTH','auth.controller.on_init()\n');
260 'test_server' : function(url) {
263 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
264 JSAN.use('util.file'); var file = new util.file('last_ws_server');
265 if (file._file.exists()) {
266 url = file.get_object(); file.close();
267 obj.controller.view.server_prompt.value = url;
270 obj.controller.view.submit_button.disabled = true;
271 obj.controller.view.server_prompt.disabled = true;
272 var s = document.getElementById('status');
273 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.testing_hostname'));
274 s.setAttribute('style','color: orange;');
275 document.getElementById('version').value = '';
277 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.prompt_hostname'));
278 s.setAttribute('style','color: red;');
279 obj.controller.view.server_prompt.disabled = false;
280 obj.controller.view.server_prompt.focus();
284 if ( ! url.match(/^https:\/\//) ) url = 'https://' + url;
285 var x = new XMLHttpRequest();
286 dump('server url = ' + url + '\n');
287 x.open("GET",url,true);
288 x.onreadystatechange = function() {
290 if (x.readyState != 4) return;
291 s.setAttribute('value', document.getElementById('authStrings').getFormattedString('staff.auth.controller.status', [x.status, x.statusText]));
292 if (x.status == 200) {
293 s.setAttribute('style','color: green;');
295 s.setAttribute('style','color: red;');
297 obj.test_version(url);
299 obj.controller.view.server_prompt.disabled = false;
300 obj.controller.view.server_prompt.focus();
301 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_hostname'));
302 s.setAttribute('style','color: red;');
303 obj.error.sdump('D_ERROR',E);
308 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_hostname'));
309 s.setAttribute('style','color: brown;');
310 obj.error.sdump('D_ERROR',E);
311 obj.controller.view.server_prompt.disabled = false;
312 obj.controller.view.server_prompt.focus();
316 'test_version' : function(url) {
318 var s = document.getElementById('version');
319 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.testing_version'));
320 s.setAttribute('style','color: orange;');
322 var x = new XMLHttpRequest();
323 var url2 = url + '/xul/server/';
324 dump('version url = ' + url2 + '\n');
325 x.open("GET",url2,true);
326 x.onreadystatechange = function() {
328 if (x.readyState != 4) return;
329 s.setAttribute('value', document.getElementById('authStrings').getFormattedString('staff.auth.controller.status', [x.status, x.statusText]));
330 if (x.status == 200) {
331 s.setAttribute('style','color: green;');
332 obj.controller.view.submit_button.disabled = false;
334 s.setAttribute('style','color: red;');
335 obj.test_upgrade_instructions(url);
337 obj.controller.view.server_prompt.disabled = false;
339 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_version'));
340 s.setAttribute('style','color: red;');
341 obj.error.sdump('D_ERROR',E);
342 obj.controller.view.server_prompt.disabled = false;
347 s.setAttribute('value', document.getElementById('authStrings').getString('staff.auth.controller.error_version'));
348 s.setAttribute('style','color: brown;');
349 obj.error.sdump('D_ERROR',E);
350 obj.controller.view.server_prompt.disabled = false;
354 'test_upgrade_instructions' : function(url) {
357 var x = new XMLHttpRequest();
358 var url2 = url + '/xul/versions.html';
359 dump('upgrade url = ' + url2 + '\n');
360 x.open("GET",url2,true);
361 x.onreadystatechange = function() {
363 if (x.readyState != 4) return;
364 if (x.status == 200) {
365 window.open('data:text/html,'+window.escape(x.responseText),'upgrade','chrome,resizable,modal,centered');
367 alert(document.getElementById('authStrings').getString('staff.auth.controller.version_mismatch'));
369 obj.controller.view.server_prompt.disabled = false;
371 obj.error.sdump('D_ERROR',E);
372 obj.controller.view.server_prompt.disabled = false;
377 obj.error.sdump('D_ERROR',E);
378 obj.controller.view.server_prompt.disabled = false;
382 'login' : function() {
386 this.error.sdump('D_AUTH',
387 document.getElementById('authStrings').getFormattedString(
388 'staff.auth.controller.error_login', [
389 this.controller.view.name_prompt.value,
390 this.controller.view.password_prompt.value,
391 this.controller.view.server_prompt.value
395 this.controller.view.server_prompt.disabled = true;
396 this.controller.view.name_prompt.disabled = true;
397 this.controller.view.password_prompt.disabled = true;
398 this.controller.view.submit_button.disabled = true;
399 this.controller.view.apply_locale_btn.disabled = true;
400 XML_HTTP_SERVER = this.controller.view.server_prompt.value;
404 if (typeof this.on_login == 'function') {
405 this.error.sdump('D_AUTH','auth.controller.session.on_init = ' +
406 'auth.controller.on_login\n');
407 this.session.on_init = this.on_login;
408 this.session.on_error = function() { obj.logoff(); };
414 var error = '!! ' + E + '\n';
415 this.error.sdump('D_ERROR',error);
418 if (E == 'open-ils.auth.authenticate.init returned false\n') {
419 this.controller.view.server_prompt.focus();
420 this.controller.view.server_prompt.select();
423 if (typeof this.on_login_error == 'function') {
424 this.error.sdump('D_AUTH','auth.controller.on_login_error()\n');
425 this.on_login_error(E);
431 'standalone' : function() {
434 if (typeof this.on_standalone == 'function') {
438 var error = '!! ' + E + '\n';
439 obj.error.sdump('D_ERROR',error);
444 'standalone_import' : function() {
447 if (typeof this.on_standalone_import == 'function') {
448 obj.on_standalone_import();
451 var error = '!! ' + E + '\n';
452 obj.error.sdump('D_ERROR',error);
457 'standalone_export' : function() {
460 if (typeof this.on_standalone_export == 'function') {
461 obj.on_standalone_export();
464 var error = '!! ' + E + '\n';
465 obj.error.sdump('D_ERROR',error);
470 'debug' : function(action) {
473 if (typeof this.on_debug == 'function') {
474 obj.on_debug(action);
477 var error = '!! ' + E + '\n';
478 obj.error.sdump('D_ERROR',error);
483 'logoff' : function() {
485 this.error.sdump('D_AUTH','logoff' + this.w + '\n');
486 this.controller.view.progress_bar.value = 0;
487 this.controller.view.progress_bar.setAttribute('real','0.0');
488 this.controller.view.submit_button.disabled = false;
489 this.controller.view.apply_locale_btn.disabled = false;
490 this.controller.view.password_prompt.disabled = false;
491 this.controller.view.password_prompt.value = '';
492 this.controller.view.name_prompt.disabled = false;
493 this.controller.view.name_prompt.focus();
494 this.controller.view.name_prompt.select();
495 this.controller.view.server_prompt.disabled = false;
497 var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
498 var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
499 var enumerator = windowManagerInterface.getEnumerator(null);
501 var w; // close all other windows
502 while ( w = enumerator.getNext() ) {
503 if (w != window) w.close();
506 this.controller.render('ws_deck');
508 this.session.close();
510 /* FIXME - need some locking or object destruction for the async tests */
511 /* this.test_server( this.controller.view.server_prompt.value ); */
513 if (typeof this.on_logoff == 'function') {
514 this.error.sdump('D_AUTH','auth.controller.on_logoff()\n');
519 'close' : function() {
521 this.error.sdump('D_AUTH','close' + this.w + '\n');
523 if (window.confirm(document.getElementById('authStrings').getString('staff.auth.controller.confirm_close'))) {
525 this.w.close(); /* Probably won't go any further */
527 if (typeof this.on_close == 'function') {
528 this.error.sdump('D_AUTH','auth.controller.on_close()\n');
536 dump('exiting auth/controller.js\n');