From acbc031a6d1a41fc0a40a4f175bc80a49affc251 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Mon, 8 Jul 2019 17:07:11 +0200 Subject: [PATCH] luci-base,luci-mod-system: split ubus localtime into get and set call Signed-off-by: Jo-Philipp Wich --- modules/luci-base/root/usr/libexec/rpcd/luci | 16 +++++++++++++-- .../root/usr/share/rpcd/acl.d/luci-base.json | 4 ++-- .../resources/view/system/system.js | 20 +++++++++++++------ 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/modules/luci-base/root/usr/libexec/rpcd/luci b/modules/luci-base/root/usr/libexec/rpcd/luci index dba6df0cb..55233d6d0 100755 --- a/modules/luci-base/root/usr/libexec/rpcd/luci +++ b/modules/luci-base/root/usr/libexec/rpcd/luci @@ -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" diff --git a/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json b/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json index 6cbaa3d56..a9baef8f9 100644 --- a/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json +++ b/modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json @@ -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": [ "*" ] diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js index 4b833a3f8..6db973a8d 100644 --- a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js +++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js @@ -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(); }); }); -- 2.25.1