89 lines
3.7 KiB
Plaintext
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
|