luci-base: luci.js: register rpc interceptor to catch expired sessions
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
c3ddcbb542
commit
a0d1294566
1 changed files with 40 additions and 16 deletions
|
@ -850,19 +850,7 @@
|
|||
return (ft != null && ft != false);
|
||||
},
|
||||
|
||||
setupDOM: function(res) {
|
||||
var domEv = res[0],
|
||||
uiClass = res[1],
|
||||
rpcClass = res[2],
|
||||
formClass = res[3],
|
||||
rpcBaseURL = res[4];
|
||||
|
||||
rpcClass.setBaseURL(rpcBaseURL);
|
||||
|
||||
Request.addInterceptor(function(res) {
|
||||
if (res.status != 403 || res.headers.get('X-LuCI-Login-Required') != 'yes')
|
||||
return;
|
||||
|
||||
notifySessionExpiry: function() {
|
||||
Poll.stop();
|
||||
|
||||
L.ui.showModal(_('Session expired'), [
|
||||
|
@ -878,7 +866,43 @@
|
|||
}, _('To login…')))
|
||||
]);
|
||||
|
||||
throw 'Session expired';
|
||||
L.raise('SessionError', 'Login session is expired');
|
||||
},
|
||||
|
||||
setupDOM: function(res) {
|
||||
var domEv = res[0],
|
||||
uiClass = res[1],
|
||||
rpcClass = res[2],
|
||||
formClass = res[3],
|
||||
rpcBaseURL = res[4];
|
||||
|
||||
rpcClass.setBaseURL(rpcBaseURL);
|
||||
|
||||
rpcClass.addInterceptor(function(msg, req) {
|
||||
if (!L.isObject(msg) || !L.isObject(msg.error) || msg.error.code != -32002)
|
||||
return;
|
||||
|
||||
if (!L.isObject(req) || (req.object == 'session' && req.method == 'access'))
|
||||
return;
|
||||
|
||||
return rpcClass.declare({
|
||||
'object': 'session',
|
||||
'method': 'access',
|
||||
'params': [ 'scope', 'object', 'function' ],
|
||||
'expect': { access: true }
|
||||
})('uci', 'luci', 'read').catch(L.notifySessionExpiry);
|
||||
});
|
||||
|
||||
Request.addInterceptor(function(res) {
|
||||
var isDenied = false;
|
||||
|
||||
if (res.status == 403 && res.headers.get('X-LuCI-Login-Required') == 'yes')
|
||||
isDenied = true;
|
||||
|
||||
if (!isDenied)
|
||||
return;
|
||||
|
||||
L.notifySessionExpiry();
|
||||
});
|
||||
|
||||
return this.probeSystemFeatures().finally(this.initDOM);
|
||||
|
|
Loading…
Reference in a new issue