]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/auth/session.js
User activity tracking: ingress, auth.verify, and login agent
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / auth / session.js
1 dump('entering auth/session.js\n');
2 // vim:sw=4:ts=4:noet:
3
4 if (typeof auth == 'undefined') auth = {};
5 auth.session = function (view,login_type) {
6
7     JSAN.use('util.error'); this.error = new util.error();
8     JSAN.use('util.network'); this.network = new util.network();
9     this.view = view;
10     this.login_type = login_type || 'staff';
11
12     return this;
13 };
14
15 auth.session.prototype = {
16
17     'init' : function () {
18
19         var obj = this;
20
21         try {
22             var init = this.network.request(
23                 api.AUTH_INIT.app,
24                 api.AUTH_INIT.method,
25                 [ this.view.name_prompt.value ]
26             );
27
28             if (init) {
29                 if (xulG._data) { delete xulG._data; } // quick kludge; we were re-using a poisoned OpenILS.data (from ws_info.xul?) where js2JSON (and maybe other stuff) does not exist
30                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
31
32                 var params = { 
33                     'username' : this.view.name_prompt.value,
34                     'password' : hex_md5(
35                         init +
36                         hex_md5(
37                             this.view.password_prompt.value
38                         )
39                     ),
40                     'type' : 'temp',
41                     'agent' : 'staffclient'
42                 };
43
44                 if (data.ws_info[ this.view.server_prompt.value ]) {
45                     params.type = this.login_type;
46                     params.workstation = data.ws_info[ this.view.server_prompt.value ].name;
47                     data.ws_name = params.workstation; data.stash('ws_name');
48                 }
49
50                 var robj = this.network.simple_request( 'AUTH_COMPLETE', [ params ]);
51
52                 switch (Number(robj.ilsevent)) {
53                     case 0:
54                         this.key = robj.payload.authtoken;
55                         this.authtime = robj.payload.authtime;
56                     break;
57                     case 1520 /* WORKSTATION_NOT_FOUND */:
58                         alert(document.getElementById('authStrings').getFormattedString('staff.auth.session.unregistered', [params.workstation]));
59                         delete(params.workstation);
60                         delete(data.ws_info[ this.view.server_prompt.value ]);
61                         data.stash('ws_info');
62                         data.ws_name = null; data.stash('ws_name');
63                         params.type = 'temp';
64                         // We need to get a new seed
65                         init = this.network.request(
66                             api.AUTH_INIT.app,
67                             api.AUTH_INIT.method,
68                             [ this.view.name_prompt.value ]
69                         );
70                         if(init) {
71                             params.password = hex_md5(init + hex_md5( this.view.password_prompt.value ));
72                         }
73                         robj = this.network.simple_request('AUTH_COMPLETE',[ params ]);
74                         if (robj.ilsevent == 0) {
75                             this.key = robj.payload.authtoken;
76                             this.authtime = robj.payload.authtime;
77                         } else {
78                             //this.error.standard_unexpected_error_alert('auth.session.init',robj);
79                             throw(robj);
80                         }
81                     break;
82                     default:
83                     //obj.error.standard_unexpected_error_alert('auth.session.init',robj);
84                     throw(robj);
85                     break;
86                 }
87
88                 this.error.sdump('D_AUTH','auth.session.key = ' + this.key + '\n');
89
90                 if (typeof this.on_init == 'function') {
91                     this.error.sdump('D_AUTH','auth.session.on_init()\n');
92                     this.on_init();
93                 }
94
95             } else {
96
97                 var error = document.getElementById('authStrings').getString('staff.auth.session.init_false') + '\n';
98                 this.error.sdump('D_ERROR',error);
99                 throw(error);
100             }
101
102         } catch(E) {
103             alert(document.getElementById('authStrings').getString('staff.auth.session.login_failed'));
104             //obj.error.standard_unexpected_error_alert('Error on auth.session.init()',E); 
105
106             if (typeof this.on_init_error == 'function') {
107                 this.error.sdump('D_AUTH','auth.session.on_init_error()\n');
108                 this.on_init_error(E);
109             }
110             if (typeof this.on_error == 'function') {
111                 this.error.sdump('D_AUTH','auth.session.on_error()\n');
112                 this.on_error();
113             }
114
115             //throw(E);
116             /* This was for testing
117             if (typeof this.on_init == 'function') {
118                 this.error.sdump('D_AUTH','auth.session.on_init() despite error\n');
119                 this.on_init();
120             }
121             */
122         }
123     },
124
125     'close' : function () { 
126         var obj = this;
127         obj.error.sdump('D_AUTH','auth.session.close()\n'); 
128         try {
129             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
130             Components.classes["@mozilla.org/cookiemanager;1"]
131                 .getService(Components.interfaces.nsICookieManager).removeAll();
132         } catch(E) {
133             dump('Error in auth/session.js, close(): ' + E + '\n');
134         }
135         if (obj.key) obj.network.request(
136             api.AUTH_DELETE.app,
137             api.AUTH_DELETE.method,
138             [ obj.key ],
139             function(req) {}
140         );
141         obj.key = null;
142         if (typeof obj.on_close == 'function') {
143             obj.error.sdump('D_AUTH','auth.session.on_close()\n');
144             obj.on_close();
145         }
146     }
147
148 }
149
150 dump('exiting auth/session.js\n');