0
0
mirror of https://github.com/openwrt/luci.git synced 2025-10-13 23:25:22 +00:00
Files
2025-07-03 18:57:33 +02:00

123 lines
3.7 KiB
JavaScript

'use strict';
'require form';
'require fs';
'require rpc';
'require uci';
'require view';
const callRcInit = rpc.declare({
object: 'rc',
method: 'init',
params: [ 'name', 'action' ],
expect: { result: false }
});
return view.extend({
load() {
return Promise.all([
uci.load('unbound'),
]);
},
render([data]) {
const requestPath = L.env.requestpath;
const zoneId = requestPath[requestPath.length-1] || '';
let found = false;
uci.sections('unbound', 'zone').forEach(s => {
if (s['.name'] === zoneId)
found = true;
});
if (requestPath[requestPath.length-2] !== 'zone-details' || !found) {
window.location.assign(L.url('admin/services/unbound/zones'));
}
const m = new form.Map('unbound', _('Directed Zone'),
_('Edit a forward, stub, or zone-file-cache zone for Unbound to use instead of recursion.'));
const s = m.section(form.NamedSection, zoneId, 'zone');
s.anonymous = true;
s.addremove = false;
const ena = s.option(form.Flag, 'enabled', _('Enabled'),
_('Enable this directed zone'));
ena.rmempty = false;
const flb = s.option(form.Flag, 'fallback', _('Fall Back'),
_('Allow open recursion when record not in zone'));
flb.rmempty = false;
const zty = s.option(form.ListValue, 'zone_type', _('Zone Type'));
zty.rmempty = false;
zty.value('auth_zone', _('Authoritative (zone file)'));
zty.value('stub_zone', _('Stub (forced recursion)'));
zty.value('forward_zone', _('Forward (simple handoff)'));
const znm = s.option(form.DynamicList, 'zone_name', _('Zone Names'),
_('Zone (Domain) names included in this zone combination'));
znm.placeholder = 'new.example.net.';
const srv = s.option(form.DynamicList, 'server', _('Servers'),
_('Servers for this zone; see README.md for optional form'));
srv.placeholder = '192.0.2.53';
const ast = s.option(form.ListValue, 'dns_assist', _('DNS Plugin'),
_('Check for local program to allow forward to localhost'));
ast.value('none', _('(none)'));
ast.value('bind', 'bind');
ast.value('dnsmasq', 'dnsmasq');
ast.value('ipset-dns', 'ipset-dns');
ast.value('nsd', 'nsd');
ast.value('unprotected-loop', 'unprotected-loop');
const rlv = s.option(form.Flag, 'resolv_conf', _("Use 'resolv.conf.auto'"),
_('Forward to upstream nameservers (ISP)'));
rlv.depends('zone_type', 'forward_zone');
const tlu = s.option(form.Flag, 'tls_upstream', _('DNS over TLS'),
_('Connect to servers using TLS'));
tlu.depends('zone_type', 'forward_zone');
const prt = s.option(form.Value, 'port', _('Server Port'),
_('Port servers will receive queries on'));
prt.depends('tls_upstream', '0');
prt.datatype = 'port';
prt.placeholder = '53';
const tlp = s.option(form.Value, 'tls_port', _('Server TLS Port'),
_('Port servers will receive queries on'));
tlp.depends('tls_upstream', '1');
tlp.datatype = 'port';
tlp.placeholder = '853';
const tli = s.option(form.Value, 'tls_index', _('TLS Name Index'),
_('Domain name to verify TLS certificate'));
tli.depends('tls_upstream', '1');
tli.placeholder = 'dns.example.net';
const url = s.option(form.Value, 'url_dir', _('Zone Download URL'),
_('Directory only part of URL'));
url.depends('zone_type', 'auth_zone');
url.placeholder = 'https://www.example.net/dl/zones/';
return m.render();
},
handleSaveApply(ev, mode) {
const requestPath = L.env.requestpath;
const zoneId = requestPath[requestPath.length-1] || '';
if (zoneId) {
const enabled = uci.get('unbound', zoneId, 'enabled');
const cmd = enabled ? 'reload' : 'stop';
const Fn = L.bind(() => {
callRcInit('unbound', cmd);
document.removeEventListener('uci-applied', Fn);
});
}
document.addEventListener('uci-applied', Fn);
this.super('handleSaveApply', [ev, mode]);
}
});