mirror of
https://github.com/openwrt/luci.git
synced 2025-10-13 23:25:22 +00:00
See: https://github.com/openwrt/luci/issues/7310 Signed-off-by: Paul Donald <newtwen+github@gmail.com>
123 lines
3.7 KiB
JavaScript
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]);
|
|
}
|
|
});
|