luci-base: luci.js: cache determined RPC base url in session storage

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-07-09 07:31:40 +02:00
parent ffdafd4800
commit 66dfe64ca1

View file

@ -210,8 +210,7 @@
}); });
var requestQueue = [], var requestQueue = [];
rpcBaseURL = null;
function isQueueableRequest(opt) { function isQueueableRequest(opt) {
if (!classes.rpc) if (!classes.rpc)
@ -223,8 +222,7 @@
if (opt.nobatch === true) if (opt.nobatch === true)
return false; return false;
if (rpcBaseURL == null) var rpcBaseURL = Request.expandURL(classes.rpc.getBaseURL());
rpcBaseURL = Request.expandURL(classes.rpc.getBaseURL());
return (rpcBaseURL != null && opt.url.indexOf(rpcBaseURL) == 0); return (rpcBaseURL != null && opt.url.indexOf(rpcBaseURL) == 0);
} }
@ -544,6 +542,7 @@
var dummyElem = null, var dummyElem = null,
domParser = null, domParser = null,
originalCBIInit = null, originalCBIInit = null,
rpcBaseURL = null,
classes = {}; classes = {};
var LuCI = Class.extend({ var LuCI = Class.extend({
@ -581,7 +580,7 @@
this.require('ui'), this.require('ui'),
this.require('rpc'), this.require('rpc'),
this.require('form'), this.require('form'),
Request.get('/ubus/').catch(function() { return { status: 0 } }) this.probeRPCBaseURL()
]).then(this.setupDOM.bind(this)).catch(this.error); ]).then(this.setupDOM.bind(this)).catch(this.error);
originalCBIInit = window.cbi_init; originalCBIInit = window.cbi_init;
@ -754,15 +753,40 @@
}, },
/* DOM setup */ /* DOM setup */
probeRPCBaseURL: function() {
if (rpcBaseURL == null) {
try {
rpcBaseURL = window.sessionStorage.getItem('rpcBaseURL');
}
catch (e) { }
}
if (rpcBaseURL == null) {
rpcBaseURL = Request.get('/ubus/').then(function(res) {
return (rpcBaseURL = (res.status == 400) ? '/ubus/' : this.url('admin/ubus'));
}, function() {
return (rpcBaseURL = L.url('admin/ubus'));
}).then(function(url) {
try {
window.sessionStorage.setItem('rpcBaseURL', url);
}
catch (e) { }
return url;
});
}
return Promise.resolve(rpcBaseURL);
},
setupDOM: function(res) { setupDOM: function(res) {
var domEv = res[0], var domEv = res[0],
uiClass = res[1], uiClass = res[1],
rpcClass = res[2], rpcClass = res[2],
formClass = res[3], formClass = res[3],
ubusReply = res[4]; rpcBaseURL = res[4];
if (ubusReply.status == 400) rpcClass.setBaseURL(rpcBaseURL);
rpcClass.setBaseURL('/ubus/');
Request.addInterceptor(function(res) { Request.addInterceptor(function(res) {
if (res.status != 403 || res.headers.get('X-LuCI-Login-Required') != 'yes') if (res.status != 403 || res.headers.get('X-LuCI-Login-Required') != 'yes')