ztncui/views/network_easy.pug
2017-12-13 22:05:07 +08:00

89 lines
3.7 KiB
Plaintext

//-
ztncui - ZeroTier network controller UI
Copyright (C) 2017 Key Networks (https://key-networks.com)
Licensed under GPLv3 - see LICENSE for details.
extends network_layout
block net_content
script.
function randomOctet() {
return Math.floor(Math.random() * 255);
}
function randomIPv4() {
const networkCIDR = document.getElementById('networkCIDR');
const CIDR = '10.' + randomOctet() + '.' + randomOctet() + '.0/24';
networkCIDR.value = CIDR;
CIDRtoPool(CIDR);
}
function int32toIPv4String(int32) {
let ipv4 = '';
ipv4 = ((int32 & 0xff000000)>>>24).toString();
ipv4 += '.' + ((int32 & 0x00ff0000)>>>16).toString();
ipv4 += '.' + ((int32 & 0x0000ff00)>>>8).toString();
ipv4 += '.' + (int32 & 0x000000ff).toString();
return ipv4;
}
function CIDRtoPool(CIDR) {
const [start, prefix] = CIDR.split('/');
if (undefined !== start && undefined !== prefix &&
prefix > 0 && prefix < 33 &&
/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(start)
){
const host32 = ((1 << (32 - parseInt(prefix))) - 1) >>> 0;
const net = start.split('.').map(oct => {return parseInt(oct)});
let net32 = 0 >>> 0;
net32 = (net[0]<<24) + (net[1]<<16) + (net[2]<<8) + (net[3]);
net32 &= ~host32;
bcast32 = net32 + host32;
const networkCIDR = document.getElementById('networkCIDR');
const poolStart = document.getElementById('poolStart');
const poolEnd = document.getElementById('poolEnd');
networkCIDR.value = int32toIPv4String(net32) + '/' + prefix;
poolStart.value = int32toIPv4String(net32 + 1);
poolEnd.value = int32toIPv4String(bcast32 - 1);
} else {
poolStart.value = 'Invalid network CIDR';
poolEnd.value = 'Invalid network CIDR';
}
}
if message
.alert.alert-info
strong= message
form(method='POST' action='')
.form-group
button.btn.btn-link.float-right(type='button' data-toggle='collapse' data-target='#help') Help
.collapse(id='help')
p Please note that this utility only supports IPv4 at this stage.
p Use the following button to automatically generate a random network address, otherwise fill in the network address CIDR manually and the IP assignment pool will be automatically calculated for you. You can manually alter these calculated values.
.form-group
button.btn.btn-primary(id='genIPv4' type='button' onclick='randomIPv4()') Generate network address
.form-group
label(for='networkCIDR') Network address in CIDR notation
input#networkCIDR.form-control(type='text' name='networkCIDR' onchange='CIDRtoPool(this.value)' placeholder='e.g. 10.11.12.0/24' value=(undefined===network.routes[0]? '' : network.routes[0].target))
.form-group
label(for='poolStart') Start of IP assignment pool
input#poolStart.form-control(type='text' name='poolStart' placeholder='e.g. 10.11.12.1' value=(undefined===network.ipAssignmentPools[0]? '' : network.ipAssignmentPools[0].ipRangeStart))
.form-group
label(for='poolEnd') End of IP assignment pool
input#poolEnd.form-control(type='text' name='poolEnd' placeholder='e.g. 10.11.12.254' value=(undefined===network.ipAssignmentPools[0]? '' : network.ipAssignmentPools[0].ipRangeEnd))
.form-group(style='padding-top: 10px')
button.btn.btn-primary(type='submit') Submit
= ' '
a.btn.btn-default(href='/controller/networks' name='cancel' role='button') Cancel
if errors
ul
for err in errors
li!= err.msg