luci-base: use actual JSON-RPC for verifying ubus RPC URL

Sending GET request to the main RPC base URL and expecting HTTP response
code 400 had two flaws:
1. It was not verifying actual JSON-RPC interface availability
2. It did not allow implementing support for new requests

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Rafał Miłecki 2020-09-14 18:31:07 +02:00
parent 5ca328440b
commit bc6e4dfe29

View file

@ -2553,10 +2553,16 @@
rpcBaseURL = Session.getLocalData('rpcBaseURL'); rpcBaseURL = Session.getLocalData('rpcBaseURL');
if (rpcBaseURL == null) { if (rpcBaseURL == null) {
var msg = {
jsonrpc: '2.0',
id: 'init',
method: 'list',
params: undefined
};
var rpcFallbackURL = this.url('admin/ubus'); var rpcFallbackURL = this.url('admin/ubus');
rpcBaseURL = Request.get(env.ubuspath).then(function(res) { rpcBaseURL = Request.post(env.ubuspath, msg, { nobatch: true }).then(function(res) {
return (rpcBaseURL = (res.status == 400) ? env.ubuspath : rpcFallbackURL); return (rpcBaseURL = res.status == 200 ? env.ubuspath : rpcFallbackURL);
}, function() { }, function() {
return (rpcBaseURL = rpcFallbackURL); return (rpcBaseURL = rpcFallbackURL);
}).then(function(url) { }).then(function(url) {