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);
|
return (ft != null && ft != false);
|
||||||
},
|
},
|
||||||
|
|
||||||
setupDOM: function(res) {
|
notifySessionExpiry: function() {
|
||||||
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;
|
|
||||||
|
|
||||||
Poll.stop();
|
Poll.stop();
|
||||||
|
|
||||||
L.ui.showModal(_('Session expired'), [
|
L.ui.showModal(_('Session expired'), [
|
||||||
|
@ -878,7 +866,43 @@
|
||||||
}, _('To login…')))
|
}, _('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);
|
return this.probeSystemFeatures().finally(this.initDOM);
|
||||||
|
|
Loading…
Reference in a new issue