luci-app-chrony: allow non NTS variant also

Closes #7857

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
This commit is contained in:
Paul Donald
2025-07-08 01:32:39 +02:00
parent 834b5d06e3
commit c5736a30da
3 changed files with 42 additions and 24 deletions

View File

@@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for chrony
LUCI_DEPENDS:=+luci-base +chrony-nts
LUCI_DEPENDS:=+luci-base +chrony
PKG_LICENSE:=Apache-2.0

View File

@@ -7,7 +7,18 @@
return view.extend({
render(data) {
load() {
return fs.exec_direct('/usr/sbin/chronyd', ['-v']).then(output => {
const flags = ['IPv6', 'NTP', 'NTS', 'RTC'];
const features = Object.fromEntries(
flags.map(flag => [flag.toLowerCase(), output.includes(`+${flag}`)])
);
return features;
});
},
render(features) {
const docUrl = 'https://chrony-project.org/documentation.html';
let m, s, o;
@@ -28,6 +39,7 @@ return view.extend({
o.nocreate = true;
o.rmempty = false;
if (features.nts) {
// NTS
s = m.section(form.NamedSection, 'nts', 'nts', _('Network Time Security (NTS)'));
s.anonymous = true;
@@ -44,6 +56,7 @@ return view.extend({
o = s.option(form.FileUpload, 'trustedcerts', _('Trusted certificates'));
o.optional = true;
o.root_directory = '/etc';
}
// Stepping
s = m.section(form.NamedSection, 'makestep', 'makestep', _('Stepping'),
@@ -120,7 +133,7 @@ return view.extend({
_('Remote NTP servers for your chronyd'));
s.anonymous = true;
s.addremove = true;
insertTypedSectionOptions(m, s, o, 'server');
insertTypedSectionOptions(m, s, o, 'server', features);
// Pool entries
s = m.section(form.TypedSection, 'pool', _('Pool'),
@@ -128,7 +141,7 @@ return view.extend({
_('The pool name is expected to resolve to multiple addresses which might change over time.'));
s.anonymous = true;
s.addremove = true;
insertTypedSectionOptions(m, s, o, 'pool');
insertTypedSectionOptions(m, s, o, 'pool', features);
// Peer entries
s = m.section(form.TypedSection, 'peer', _('Peer'),
@@ -136,20 +149,20 @@ return view.extend({
_('A single symmetric association allows the peers to be both servers and clients to each other.'));
s.anonymous = true;
s.addremove = true;
insertTypedSectionOptions(m, s, o, 'peer');
insertTypedSectionOptions(m, s, o, 'peer', features);
// Servers assigned (to us) via DHCP
s = m.section(form.NamedSection, 'dhcp_ntp_server', 'dhcp_ntp_server', _('DHCP(v6)'),
_('Options for servers provided to this host via DHCP(v6) (via the WAN for example).'));
s.anonymous = true;
insertTypedSectionOptions(m, s, o, 'dhcp_ntp_server');
insertTypedSectionOptions(m, s, o, 'dhcp_ntp_server', features);
return m.render();
}
});
function insertTypedSectionOptions(m, s, o, type) {
function insertTypedSectionOptions(m, s, o, type, features) {
o = s.option(form.Flag, 'disabled', _('Disabled'));
o.default = o.disabled; // disabled default is disabled i.e., enabled
@@ -166,11 +179,13 @@ function insertTypedSectionOptions(m, s, o, type) {
o.default = o.disabled
o.depends('disabled', '0');
if (features.nts) {
o = s.option(form.Flag, 'nts', _('NTS'));
o.rmempty = true;
o.default = o.disabled
o.depends('disabled', '0');
}
}
o = s.option(form.Flag, 'prefer', _('Prefer'));
o.default = o.disabled;

View File

@@ -2,6 +2,9 @@
"luci-app-chrony": {
"description": "Grant UCI access for luci-app-chrony",
"read": {
"file": {
"/usr/sbin/chronyd -v" : [ "exec" ]
},
"uci": [ "chrony" ]
},
"write": {