[PATCH PROOF luci] luci-base: switch to the new ubus API

Rafał Miłecki zajec5 at gmail.com
Tue Sep 15 03:15:51 EDT 2020


From: Rafał Miłecki <rafal at milecki.pl>

This is proof of concept for the new uhttpd ubus API. It switches LuCI
(in a bit hacky way) to the new API.

Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
 .../htdocs/luci-static/resources/luci.js      |  5 +++
 .../htdocs/luci-static/resources/rpc.js       | 31 +++++--------------
 2 files changed, 12 insertions(+), 24 deletions(-)

diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js
index e285f999e..9d2c52d77 100644
--- a/modules/luci-base/htdocs/luci-static/resources/luci.js
+++ b/modules/luci-base/htdocs/luci-static/resources/luci.js
@@ -739,11 +739,13 @@
 				if (!opt.cache)
 					opt.url += ((/\?/).test(opt.url) ? '&' : '?') + (new Date()).getTime();
 
+/*
 				if (isQueueableRequest(opt)) {
 					requestQueue.push([opt, rejectFn, resolveFn]);
 					requestAnimationFrame(flushRequestQueue);
 					return;
 				}
+*/
 
 				if ('username' in opt && 'password' in opt)
 					opt.xhr.open(opt.method, opt.url, true, opt.username, opt.password);
@@ -758,6 +760,9 @@
 				if ('timeout' in opt)
 					opt.xhr.timeout = +opt.timeout;
 
+				if ('authorization' in opt)
+					opt.xhr.setRequestHeader('Authorization', 'Bearer %s'.format(opt.authorization));
+
 				if ('credentials' in opt)
 					opt.xhr.withCredentials = !!opt.credentials;
 
diff --git a/modules/luci-base/htdocs/luci-static/resources/rpc.js b/modules/luci-base/htdocs/luci-static/resources/rpc.js
index 7bfc91336..5d9569d87 100644
--- a/modules/luci-base/htdocs/luci-static/resources/rpc.js
+++ b/modules/luci-base/htdocs/luci-static/resources/rpc.js
@@ -18,8 +18,8 @@ var rpcRequestID = 1,
  */
 return baseclass.extend(/** @lends LuCI.rpc.prototype */ {
 	/* privates */
-	call: function(req, cb, nobatch) {
-		var q = '';
+	call: function(object, req, cb) {
+		var q = 'call/%s'.format(object);
 
 		if (Array.isArray(req)) {
 			if (req.length == 0)
@@ -33,13 +33,10 @@ return baseclass.extend(/** @lends LuCI.rpc.prototype */ {
 						req[i].params[2]
 					);
 		}
-		else if (req.params) {
-			q += '/%s.%s'.format(req.params[1], req.params[2]);
-		}
 
 		return request.post(rpcBaseURL + q, req, {
 			timeout: (L.env.rpctimeout || 20) * 1000,
-			nobatch: nobatch,
+			authorization: rpcSessionID,
 			credentials: true
 		}).then(cb, cb);
 	},
@@ -89,16 +86,7 @@ return baseclass.extend(/** @lends LuCI.rpc.prototype */ {
 			return req.reject(e);
 		}
 
-		if (!req.object && !req.method) {
-			ret = msg.result;
-		}
-		else if (Array.isArray(msg.result)) {
-			if (req.raise && msg.result[0] !== 0)
-				L.raise('RPCError', 'RPC call to %s/%s failed with ubus code %d: %s',
-					req.object, req.method, msg.result[0], this.getStatusText(msg.result[0]));
-
-			ret = (msg.result.length > 1) ? msg.result[1] : msg.result[0];
-		}
+		ret = msg.result;
 
 		if (req.expect) {
 			for (var key in req.expect) {
@@ -332,17 +320,12 @@ return baseclass.extend(/** @lends LuCI.rpc.prototype */ {
 				var msg = {
 					jsonrpc: '2.0',
 					id:      rpcRequestID++,
-					method:  'call',
-					params:  [
-						rpcSessionID,
-						options.object,
-						options.method,
-						params
-					]
+					method:  options.method,
+					params:  params
 				};
 
 				/* call rpc */
-				rpc.call(msg, rpc.parseCallReply.bind(rpc, req), options.nobatch);
+				rpc.call(options.object, msg, rpc.parseCallReply.bind(rpc, req));
 			});
 		}, this, this, options);
 	},
-- 
2.27.0




More information about the openwrt-devel mailing list