Add DNS support

This commit is contained in:
lideming 2021-02-18 11:53:21 +08:00
parent 48aa9585b1
commit d6aa0e209f
5 changed files with 78 additions and 16 deletions

View file

@ -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 =

View file

@ -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);

35
src/views/dns.pug Normal file
View file

@ -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

View file

@ -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

View file

@ -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