From d6aa0e209f4136c43e76e37120cbf84a27f82a48 Mon Sep 17 00:00:00 2001 From: lideming Date: Thu, 18 Feb 2021 11:53:21 +0800 Subject: [PATCH] Add DNS support --- src/controllers/networkController.js | 24 +++++++++++++++++++ src/routes/zt_controller.js | 3 +++ src/views/dns.pug | 35 ++++++++++++++++++++++++++++ src/views/network_detail.pug | 26 ++++++++++----------- src/views/routes.pug | 6 ++--- 5 files changed, 78 insertions(+), 16 deletions(-) create mode 100644 src/views/dns.pug diff --git a/src/controllers/networkController.js b/src/controllers/networkController.js index c705053..2a7a6a6 100644 --- a/src/controllers/networkController.js +++ b/src/controllers/networkController.js @@ -443,6 +443,30 @@ exports.v6AssignMode = async function (req, res) { } } +// dns POST +exports.dns = async function (req, res) { + const navigate = { + active: 'networks', + whence: '' + }; + const dns = { + dns: { + domain: req.body.domain, + servers: req.body.servers + .split('\n') + .map(x => x.trim()) + .filter(x => !!x) + } + }; + try { + const network = await zt.network_object(req.params.nwid, dns); + navigate.whence = '/controller/network/' + network.nwid; + res.render('dns', {title: 'dns', navigate: navigate, network: network}); + } catch (err) { + res.render('dns', {title: 'dns', navigate: navigate, error: 'Error updating dns for network ' + req.params.nwid + ': ' + err}); + } +} + // Display detail page for specific member exports.member_detail = async function(req, res) { const navigate = diff --git a/src/routes/zt_controller.js b/src/routes/zt_controller.js index 44603da..e666b6f 100644 --- a/src/routes/zt_controller.js +++ b/src/routes/zt_controller.js @@ -43,6 +43,9 @@ router.get('/network/:nwid/routes/:target_ip/:target_prefix/delete', restrict, n // POST request for routes router.post('/network/:nwid/routes', restrict, networkController.routes); +// POST request for dns +router.post('/network/:nwid/dns', restrict, networkController.dns); + // POST request for private router.post('/network/:nwid/private', restrict, networkController.private); diff --git a/src/views/dns.pug b/src/views/dns.pug new file mode 100644 index 0000000..f0d4e53 --- /dev/null +++ b/src/views/dns.pug @@ -0,0 +1,35 @@ +//- + ztncui - ZeroTier network controller UI + Copyright (C) 2017-2018 Key Networks (https://key-networks.com) + Licensed under GPLv3 - see LICENSE for details. + +extends network_layout + +block net_content + - const dns = network.dns || {}; + form(method='POST' action='') + .form-group.row + .col-sm-12 + label(for='domain') Domain: + .col-sm-12 + input#domain.form-control(type='text' name='domain' value=dns.domain) + + .form-group.row + .col-sm-12 + label(for='servers') Servers: + .col-sm-12 + textarea#servers.form-control(type='text' name='servers' placeholder='(one IP address per line)') + = !dns.servers ? '' : dns.servers.join('\n') + + .form-group.row + .col-sm-12 + button.btn.btn-primary(type='submit') Submit + = ' ' + a.btn.btn-default(href=('/controller/network/' + network.nwid) name='cancel' role='button') Cancel + + if errors + .row + .col-sm-12 + ul + for err in errors + li!= err.msg diff --git a/src/views/network_detail.pug b/src/views/network_detail.pug index 13775e4..66e5311 100644 --- a/src/views/network_detail.pug +++ b/src/views/network_detail.pug @@ -9,11 +9,11 @@ block title //- don't display that title block net_content + - const nwurl = '/controller/network/' + network.nwid; if error b #{error} else - form(method='POST' action=(network.nwid + '/name')) - + form(method='POST' action=(nwurl + '/name')) .form-group.row .col-sm-2 label(for='name') Name: @@ -22,19 +22,19 @@ block net_content .col-sm-2.col-xs-3 button.btn.btn-primary(type='submit') Submit - - a.btn.btn-primary(style="margin: 5px" href=(network.nwid + '/private') role='button') + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/private') role='button') = network.private ? "Private" : "Public" - a.btn.btn-primary(style="margin: 5px" href=(network.nwid + '/easy') role='button') Easy setup - a.btn.btn-primary(style="margin: 5px" href=(network.nwid + '/routes') role='button') Routes - a.btn.btn-primary(style="margin: 5px" href=(network.nwid + '/ipAssignmentPools') role='button') Assignment Pools - a.btn.btn-primary(style="margin: 5px" href=(network.nwid + '/v4AssignMode') role='button') IPv4 Assign Mode - a.btn.btn-primary(style="margin: 5px" href=(network.nwid + '/v6AssignMode') role='button') IPv6 Assign Mode + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/easy') role='button') Easy setup + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/routes') role='button') Routes + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/ipAssignmentPools') role='button') Assignment Pools + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/v4AssignMode') role='button') IPv4 Assign Mode + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/v6AssignMode') role='button') IPv6 Assign Mode + a.btn.btn-primary(style="margin: 5px" href=(nwurl + '/dns') role='button') DNS if (members !== undefined) script. $(function() { - const url = "/controller/network/#{network.nwid}/members"; + const url = "#{nwurl}/members"; $('.authCheck').on('click', function() { $.post(url, {'id': this.value, 'auth': this.checked}); }); @@ -63,7 +63,7 @@ block net_content | IP assignment each member in members tr - - let url = '/controller/network/' + network.nwid + '/member/' + member.id + - const url = nwurl + '/member/' + member.id td a(href=url + '/delete') i.glyphicon.glyphicon-trash @@ -77,12 +77,12 @@ block net_content input.bridgeCheck(type='checkbox' value=member.id checked=(member.activeBridge? true : false)) td each ipAssignment in member.ipAssignments - a(href='/controller/network/' + network.nwid + '/member/' + member.id + '/ipAssignments') + a(href=nwurl + '/member/' + member.id + '/ipAssignments') each digit in ipAssignment = digit = ' ' else - a(href='/controller/network/' + network.nwid + '/member/' + member.id + '/ipAssignments') + a(href=nwurl + '/member/' + member.id + '/ipAssignments') | IP assignment else .alert.alert-info diff --git a/src/views/routes.pug b/src/views/routes.pug index 6eb5ad2..36c7c1f 100644 --- a/src/views/routes.pug +++ b/src/views/routes.pug @@ -27,19 +27,19 @@ block net_content form(method='POST' action='/controller/network/' + network.nwid + '/routes') .form-group.row - .col-sm-2 + .col-sm-12 label(for='target') Target: .col-sm-12 input#target.form-control(type='text' name='target' placeholder='e.g. 10.11.12.0/24' value=(undefined===route? '' : route.target)) .form-group.row - .col-sm-2 + .col-sm-12 label(for='via') Gateway: .col-sm-12 input#via.form-control(type='text' name='via' placeholder='e.g. 172.16.2.1 or leave blank if the target is the ZT network' value=(undefined===route? '' : route.via)) .form-group.row - .col-sm-2 + .col-sm-12 button.btn.btn-primary(type='submit') Submit = ' ' a.btn.btn-default(href=('/controller/network/' + network.nwid) name='cancel' role='button') Cancel