Merge pull request #6352 from nevumx/add-wireguard-peer-addresses-config

luci-proto-wireguard: adding an Addresses option to the wireguard peer config generator
This commit is contained in:
Paul Donald 2023-12-04 17:34:40 +01:00 committed by GitHub
commit 9d746c75f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -692,7 +692,7 @@ return network.registerProtocol('wireguard', {
o.modalonly = true; o.modalonly = true;
o.createPeerConfig = function(section_id, endpoint, ips) { o.createPeerConfig = function(section_id, endpoint, ips, eips) {
var pub = s.formvalue(s.section, 'public_key'), var pub = s.formvalue(s.section, 'public_key'),
port = s.formvalue(s.section, 'listen_port') || '51820', port = s.formvalue(s.section, 'listen_port') || '51820',
prv = this.section.formvalue(section_id, 'private_key'), prv = this.section.formvalue(section_id, 'private_key'),
@ -708,6 +708,7 @@ return network.registerProtocol('wireguard', {
return [ return [
'[Interface]', '[Interface]',
'PrivateKey = ' + prv, 'PrivateKey = ' + prv,
eips && eips.length ? 'Address = ' + eips.join(', ') : '# Address not defined',
eport ? 'ListenPort = ' + eport : '# ListenPort not defined', eport ? 'ListenPort = ' + eport : '# ListenPort not defined',
'', '',
'[Peer]', '[Peer]',
@ -723,7 +724,8 @@ return network.registerProtocol('wireguard', {
var mapNode = ss.getActiveModalMap(), var mapNode = ss.getActiveModalMap(),
headNode = mapNode.parentNode.querySelector('h4'), headNode = mapNode.parentNode.querySelector('h4'),
configGenerator = this.createPeerConfig.bind(this, section_id), configGenerator = this.createPeerConfig.bind(this, section_id),
parent = this.map; parent = this.map,
eips = this.section.formvalue(section_id, 'allowed_ips');
return Promise.all([ return Promise.all([
network.getWANNetworks(), network.getWANNetworks(),
@ -754,7 +756,7 @@ return network.registerProtocol('wireguard', {
var qrm, qrs, qro; var qrm, qrs, qro;
qrm = new form.JSONMap({ config: { endpoint: hostnames[0], allowed_ips: ips } }, null, _('The generated configuration can be imported into a WireGuard client application to set up a connection towards this device.')); qrm = new form.JSONMap({ config: { endpoint: hostnames[0], allowed_ips: ips, addresses: eips } }, null, _('The generated configuration can be imported into a WireGuard client application to set up a connection towards this device.'));
qrm.parent = parent; qrm.parent = parent;
qrs = qrm.section(form.NamedSection, 'config'); qrs = qrm.section(form.NamedSection, 'config');
@ -764,9 +766,10 @@ return network.registerProtocol('wireguard', {
conf = this.map.findElement('.client-config'), conf = this.map.findElement('.client-config'),
endpoint = this.section.getUIElement(section_id, 'endpoint'), endpoint = this.section.getUIElement(section_id, 'endpoint'),
ips = this.section.getUIElement(section_id, 'allowed_ips'); ips = this.section.getUIElement(section_id, 'allowed_ips');
eips = this.section.getUIElement(section_id, 'addresses');
if (this.isValid(section_id)) { if (this.isValid(section_id)) {
conf.firstChild.data = configGenerator(endpoint.getValue(), ips.getValue()); conf.firstChild.data = configGenerator(endpoint.getValue(), ips.getValue(), eips.getValue());
code.style.opacity = '.5'; code.style.opacity = '.5';
invokeQREncode(conf.firstChild.data, code); invokeQREncode(conf.firstChild.data, code);
@ -784,9 +787,15 @@ return network.registerProtocol('wireguard', {
ips.forEach(function(ip) { qro.value(ip) }); ips.forEach(function(ip) { qro.value(ip) });
qro.onchange = handleConfigChange; qro.onchange = handleConfigChange;
qro = qrs.option(form.DynamicList, 'addresses', _('Addresses'), _('IP addresses for the peer to use inside the tunnel. Some clients require this setting.'));
qro.datatype = 'ipaddr';
qro.default = eips;
eips.forEach(function(eip) { qro.value(eip) });
qro.onchange = handleConfigChange;
qro = qrs.option(form.DummyValue, 'output'); qro = qrs.option(form.DummyValue, 'output');
qro.renderWidget = function() { qro.renderWidget = function() {
var peer_config = configGenerator(hostnames[0], ips); var peer_config = configGenerator(hostnames[0], ips, eips);
var node = E('div', { var node = E('div', {
'style': 'display:flex;flex-wrap:wrap;align-items:center;gap:.5em;width:100%' 'style': 'display:flex;flex-wrap:wrap;align-items:center;gap:.5em;width:100%'