luci-proto-wireguard: adapt to use uqr
authorPaul Donald <newtwen+github@gmail.com>
Wed, 1 May 2024 16:43:51 +0000 (18:43 +0200)
committerPaul Donald <newtwen+github@gmail.com>
Fri, 25 Oct 2024 20:29:10 +0000 (22:29 +0200)
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>
(cherry picked from commit 74f366a1e54f54079fde6e4906e7307f199127e5)

protocols/luci-proto-wireguard/Makefile
protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js
protocols/luci-proto-wireguard/root/usr/share/rpcd/acl.d/luci-wireguard.json

index 12137fb19b9ddbc010f06b75efbf51c7b2eef18f..10a68a0af62a200a93970c952b96f1aefd0659b8 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=Support for WireGuard VPN
-LUCI_DEPENDS:=+wireguard-tools +ucode
+LUCI_DEPENDS:=+wireguard-tools +ucode +luci-lib-uqr
 LUCI_PKGARCH:=all
 
 PKG_PROVIDES:=luci-app-wireguard
index 9919687b929b536d2cfdcb88d230e948860e764c..05e0e275c7fc8dec1771d82042ec8186d80b6947 100644 (file)
@@ -7,6 +7,7 @@
 'require form';
 'require network';
 'require validation';
+'require uqr';
 
 var generateKey = rpc.declare({
        object: 'luci.wireguard',
@@ -64,28 +65,16 @@ function generateDescription(name, texts) {
        ]);
 }
 
-function invokeQREncode(data, code) {
-       return fs.exec_direct('/usr/bin/qrencode', [
-               '--inline', '--8bit', '--type=SVG',
-               '--output=-', '--', data
-       ]).then(function(svg) {
-               code.style.opacity = '';
-               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)
-                       ]);
-               }
-       });
+function buildSVGQRCode(data, code) {
+       // pixel size larger than 4 clips right and bottom edges of complex configs
+       const options = {
+               pixelSize: 4,
+               whiteColor: 'white',
+               blackColor: 'black'
+       };
+       const svg = uqr.renderSVG(data, options);
+       code.style.opacity = '';
+       dom.content(code, Object.assign(E(svg), { style: 'width:100%;height:auto' }));
 }
 
 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());
                                                code.style.opacity = '.5';
 
-                                               invokeQREncode(conf.firstChild.data, code);
+                                               buildSVGQRCode(conf.firstChild.data, code);
                                        }
                                };
 
@@ -833,7 +822,7 @@ return network.registerProtocol('wireguard', {
                                                }, [ peer_config ])
                                        ]);
 
-                                       invokeQREncode(peer_config, node.firstChild);
+                                       buildSVGQRCode(peer_config, node.firstChild);
 
                                        return node;
                                };
index e7187c0e4f49b3ebd8aaf9bff4d0184773240c2f..9c0b2d1df533f7ed17c3058b85ddf919fa060872 100644 (file)
@@ -2,9 +2,6 @@
        "luci-proto-wireguard": {
                "description": "Grant access to LuCI Wireguard procedures",
                "read": {
-                       "file": {
-                               "/usr/bin/qrencode --inline --8bit --type=SVG --output=- -- *": [ "exec" ]
-                       },
                        "ubus": {
                                "luci.wireguard": [
                                        "getWgInstances"