summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xmodules/luci-base/root/usr/libexec/rpcd/luci16
-rw-r--r--modules/luci-base/root/usr/share/rpcd/acl.d/luci-base.json4
-rw-r--r--modules/luci-mod-system/htdocs/luci-static/resources/view/system/system.js20
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();
});
});