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:
Jo-Philipp Wich 2019-09-11 09:30:00 +02:00
parent c3ddcbb542
commit a0d1294566

View file

@ -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);