luci-proto-wireguard: adapt to use uqr

If for some reason luci-lib-uqr is absent, the GUI shows that the proto
handler needs installing (since it now has a dep which is missing).

Suitable action is to install the lib or remove/install wireguard again.

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
This commit is contained in:
Paul Donald
2024-05-01 18:43:51 +02:00
parent b2e7441a60
commit 74f366a1e5
3 changed files with 14 additions and 28 deletions

View File

@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=Support for WireGuard VPN LUCI_TITLE:=Support for WireGuard VPN
LUCI_DEPENDS:=+wireguard-tools +ucode LUCI_DEPENDS:=+wireguard-tools +ucode +luci-lib-uqr
LUCI_PKGARCH:=all LUCI_PKGARCH:=all
PKG_LICENSE:=Apache-2.0 PKG_LICENSE:=Apache-2.0

View File

@@ -7,6 +7,7 @@
'require form'; 'require form';
'require network'; 'require network';
'require validation'; 'require validation';
'require uqr';
var generateKey = rpc.declare({ var generateKey = rpc.declare({
object: 'luci.wireguard', object: 'luci.wireguard',
@@ -64,28 +65,16 @@ function generateDescription(name, texts) {
]); ]);
} }
function invokeQREncode(data, code) { function buildSVGQRCode(data, code) {
return fs.exec_direct('/usr/bin/qrencode', [ // pixel size larger than 4 clips right and bottom edges of complex configs
'--inline', '--8bit', '--type=SVG', const options = {
'--output=-', '--', data pixelSize: 4,
]).then(function(svg) { whiteColor: 'white',
blackColor: 'black'
};
const svg = uqr.renderSVG(data, options);
code.style.opacity = ''; code.style.opacity = '';
dom.content(code, Object.assign(E(svg), { style: 'width:100%;height:auto' })); dom.content(code, Object.assign(E(svg), { style: 'width:100%;height:auto' }));
}).catch(function(error) {
code.style.opacity = '';
if (L.isObject(error) && error.name == 'NotFoundError') {
dom.content(code, [
Object.assign(E(qrIcon), { style: 'width:32px;height:32px;opacity:.2' }),
E('p', _('The <em>qrencode</em> package is required for generating an QR code image of the configuration.'))
]);
}
else {
dom.content(code, [
_('Unable to generate QR code: %s').format(L.isObject(error) ? error.message : error)
]);
}
});
} }
var cbiKeyPairGenerate = form.DummyValue.extend({ var cbiKeyPairGenerate = form.DummyValue.extend({
@@ -779,7 +768,7 @@ return network.registerProtocol('wireguard', {
conf.firstChild.data = configGenerator(endpoint.getValue(), ips.getValue(), eips.getValue(), dns.getValue()); conf.firstChild.data = configGenerator(endpoint.getValue(), ips.getValue(), eips.getValue(), dns.getValue());
code.style.opacity = '.5'; code.style.opacity = '.5';
invokeQREncode(conf.firstChild.data, code); buildSVGQRCode(conf.firstChild.data, code);
} }
}; };
@@ -833,7 +822,7 @@ return network.registerProtocol('wireguard', {
}, [ peer_config ]) }, [ peer_config ])
]); ]);
invokeQREncode(peer_config, node.firstChild); buildSVGQRCode(peer_config, node.firstChild);
return node; return node;
}; };

View File

@@ -2,9 +2,6 @@
"luci-proto-wireguard": { "luci-proto-wireguard": {
"description": "Grant access to LuCI Wireguard procedures", "description": "Grant access to LuCI Wireguard procedures",
"read": { "read": {
"file": {
"/usr/bin/qrencode --inline --8bit --type=SVG --output=- -- *": [ "exec" ]
},
"ubus": { "ubus": {
"luci.wireguard": [ "luci.wireguard": [
"getWgInstances" "getWgInstances"