luci-base,luci-mod-system: split ubus localtime into get and set call
authorJo-Philipp Wich <jo@mein.io>
Mon, 8 Jul 2019 15:07:11 +0000 (17:07 +0200)
committerJo-Philipp Wich <jo@mein.io>
Mon, 8 Jul 2019 15:07:11 +0000 (17:07 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/root/usr/libexec/rpcd/luci
modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json
modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js

index dba6df0cb9e1b9fe9c9117838e472ec66a2a73c9..55233d6d0a8bcae4262b90a5a32d53042a6edd09 100755 (executable)
@@ -37,14 +37,26 @@ local methods = {
                end
        },
 
-       localtime = {
+       getLocaltime = {
                call = function(args)
                        return { localtime = os.time() }
                end
        },
 
+       setLocaltime = {
+               args = { localtime = 0 },
+               call = function(args)
+                       local sys = require "luci.sys"
+                       local date = os.date("*t", args.localtime)
+                       if date then
+                               sys.call("date -s '%04d-%02d-%02d %02d:%02d:%02d' >/dev/null" %{ date.year, date.month, date.day, date.hour, date.min, date.sec })
+                               sys.call("/etc/init.d/sysfixtime restart >/dev/null")
+                       end
+                       return { localtime = args.localtime }
+               end
+       },
+
        timezone = {
-               args = { zonename = "UTC" },
                call = function(args)
                        local util  = require "luci.util"
                        local zones = require "luci.sys.zoneinfo"
index 6cbaa3d56d04f99b81b2caa292ce38ea44d139e5..a9baef8f9c14bd2f0c3d64434e1cbfaa8217f79e 100644 (file)
@@ -13,7 +13,7 @@
                "read": {
                        "ubus": {
                                "iwinfo": [ "info" ],
-                               "luci": [ "boardjson", "duid_hints", "host_hints", "ifaddrs", "initList", "leases", "leds", "netdevs", "offload_support", "usb" ],
+                               "luci": [ "boardjson", "duid_hints", "host_hints", "ifaddrs", "initList", "getLocaltime", "leases", "leds", "netdevs", "offload_support", "usb" ],
                                "network.device": [ "status" ],
                                "network.interface": [ "dump" ],
                                "network.wireless": [ "status" ],
@@ -23,7 +23,7 @@
                },
                "write": {
                        "ubus": {
-                               "luci": [ "initCall", "localtime", "timezone" ],
+                               "luci": [ "initCall", "setLocaltime", "timezone" ],
                                "uci": [ "add", "apply", "confirm", "delete", "order", "set" ]
                        },
                        "uci": [ "*" ]
index 4b833a3f834eff225929e599d7b5f2c997303ba8..6db973a8df9ef40e9316a33c8baee2e1f70214c7 100644 (file)
@@ -3,7 +3,8 @@
 'require rpc';
 'require form';
 
-var callInitList, callInitAction, callLocaltime, callTimezone, CBILocalTime;
+var callInitList, callInitAction, callTimezone,
+    callGetLocaltime, callSetLocaltime, CBILocalTime;
 
 callInitList = rpc.declare({
        object: 'luci',
@@ -24,9 +25,16 @@ callInitAction = rpc.declare({
        expect: { result: false }
 });
 
-callLocaltime = rpc.declare({
+callGetLocaltime = rpc.declare({
        object: 'luci',
-       method: 'localtime',
+       method: 'getLocaltime',
+       expect: { localtime: 0 }
+});
+
+callSetLocaltime = rpc.declare({
+       object: 'luci',
+       method: 'setLocaltime',
+       params: [ 'localtime' ],
        expect: { localtime: 0 }
 });
 
@@ -48,7 +56,7 @@ CBILocalTime = form.DummyValue.extend({
                                        this.blur();
                                        this.classList.add('spinning');
                                        this.disabled = true;
-                                       callLocaltime(Math.floor(Date.now() / 1000)).then(L.bind(function() {
+                                       callSetLocaltime(Math.floor(Date.now() / 1000)).then(L.bind(function() {
                                                this.classList.remove('spinning');
                                                this.disabled = false;
                                        }, this));
@@ -77,7 +85,7 @@ return L.view.extend({
                        callInitList('sysntpd'),
                        callInitList('zram'),
                        callTimezone(),
-                       callLocaltime(),
+                       callGetLocaltime(),
                        uci.load('luci'),
                        uci.load('system')
                ]);
@@ -276,7 +284,7 @@ return L.view.extend({
 
                return m.render().then(function(mapEl) {
                        L.Poll.add(function() {
-                               return callLocaltime().then(function(t) {
+                               return callGetLocaltime().then(function(t) {
                                        mapEl.querySelector('#localtime').innerHTML = new Date(t * 1000).toLocaleString();
                                });
                        });