luci-app-libreswan: small refactor
authorPaul Donald <newtwen+github@gmail.com>
Fri, 22 Nov 2024 23:24:10 +0000 (00:24 +0100)
committerPaul Donald <newtwen+github@gmail.com>
Fri, 22 Nov 2024 23:25:47 +0000 (00:25 +0100)
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
(cherry picked from commit a4a5cf6af7035a21abc98959747f157a0b453fb5)

applications/luci-app-libreswan/htdocs/luci-static/resources/view/libreswan/overview.js
applications/luci-app-libreswan/htdocs/luci-static/resources/view/libreswan/tunnels.js

index 61a2e4cbccce1f150f419c341962bd92b194e0d2..399e55af97f9a2945403158f1842d5f7cea541e1 100644 (file)
@@ -11,14 +11,19 @@ var callLibreswanStatus = rpc.declare({
 });
 
 function secondsToString(seconds) {
-       var str = '';
-       var numdays = Math.floor(seconds / 86400);
-       var numhours = Math.floor((seconds % 86400) / 3600);
-       var numminutes = Math.floor(((seconds % 86400) % 3600) / 60);
-       var numseconds = ((seconds % 86400) % 3600) % 60;
+       const numdays = Math.floor(seconds / 86400);
+       seconds %= 86400;
+       const numhours = Math.floor(seconds / 3600);
+       seconds %= 3600;
+       const numminutes = Math.floor(seconds / 60);
+       const numseconds = seconds % 60;
 
-       str = (numdays ? numdays + 'd ' : '') + (numhours ? numhours + 'h ' : '') + (numminutes ? numminutes + 'm ' : '') +  numseconds + 's';
-       return str;
+       return [
+               numdays ? `${numdays}d` : '',
+               numhours ? `${numhours}h` : '',
+               numminutes ? `${numminutes}m` : '',
+               `${numseconds}s`
+       ].filter(Boolean).join(' ');
 }
 
 return view.extend({
index 762e17cee748c1a47699ca6cb07ca1ef849f4a4f..a2d5fd849386e6fb2c075c5294dbce4ece3553da 100644 (file)
@@ -8,23 +8,17 @@
 'require tools.widgets as widgets';
 
 function calculateNetwork(addr, mask) {
-       addr = validation.parseIPv4(String(addr));
-
-       if (!isNaN(mask))
-               mask = validation.parseIPv4(network.prefixToMask(+mask));
-       else
-               mask = validation.parseIPv4(String(mask));
-
-       if (addr == null || mask == null)
-               return null;
-
-       return  [
-                       addr[0] & (mask[0] >>> 0 & 255),
-                       addr[1] & (mask[1] >>> 0 & 255),
-                       addr[2] & (mask[2] >>> 0 & 255),
-                       addr[3] & (mask[3] >>> 0 & 255)
-               ].join('.') + '/' +
-               network.maskToPrefix(mask.join('.'));
+       const parsedAddr = validation.parseIPv4(String(addr));
+       if (parsedAddr == null) return null;
+
+       const parsedMask = !isNaN(mask)
+               ? validation.parseIPv4(network.prefixToMask(+mask))
+               : validation.parseIPv4(String(mask));
+       if (parsedMask == null) return null;
+
+       const networkAddr = parsedAddr.map((byte, i) => byte & (parsedMask[i] >>> 0 & 255));
+
+       return `${networkAddr.join('.')}/${network.maskToPrefix(parsedMask.join('.'))}`;
 }
 
 return view.extend({
@@ -91,15 +85,14 @@ return view.extend({
 
                o = s.taboption('general', form.Value, 'left', _('Left IP/Device'));
                o.datatype = 'or(string, ipaddr)';
-               for (var i = 0; i < netDevs.length; i++) {
-                       var addrs = netDevs[i].getIPAddrs();
-                       for (var j = 0; j < addrs.length; j++) {
-                               o.value(addrs[j].split('/')[0]);
-                       }
-               }
-               for (var i = 0; i < netDevs.length; i++) {
-                       o.value('%' + netDevs[i].device);
-               }
+               netDevs.forEach(netDev => {
+                       netDev.getIPAddrs().forEach(addr => {
+                               o.value(addr.split('/')[0]);
+                       });
+               });
+               netDevs.forEach(netDev => {
+                       o.value(`%${netDev.device}`);
+               });
                o.value('%defaultroute');
                o.optional = false;
                o.depends({ 'left_interface' : '' });
@@ -122,12 +115,11 @@ return view.extend({
 
                o = s.taboption('general', form.Value, 'leftsourceip', _('Local Source IP'));
                o.datatype = 'ipaddr';
-               for (var i = 0; i < netDevs.length; i++) {
-                       var addrs = netDevs[i].getIPAddrs();
-                       for (var j = 0; j < addrs.length; j++) {
-                               o.value(addrs[j].split('/')[0]);
-                       }
-               }
+               netDevs.forEach(netDev => {
+                       netDev.getIPAddrs().forEach(addr => {
+                               o.value(addr.split('/')[0]);
+                       });
+               });
                o.optional = false;
                o.modalonly = true;
 
@@ -180,6 +172,13 @@ return view.extend({
                }
                o.modalonly = true;
 
+               function timevalidate(section_id, value) {
+                       if (!/^[0-9]{1,3}[smhd]$/.test(value)) {
+                               return _('Acceptable values are an integer followed by m, h, d');
+                       }
+                       return true;
+               }
+
                o = s.taboption('advanced', form.Value, 'ikelifetime', _('IKE Life Time'), _('Acceptable values are an integer followed by m, h, d'));
                o.default = '8h';
                o.value('1h', '1h');
@@ -191,12 +190,7 @@ return view.extend({
                o.value('24h', '24h');
                o.modalonly = false;
                o.modalonly = true;
-               o.validate = function(section_id, value) {
-                       if (!/^[0-9]{1,3}[smhd]$/.test(value)) {
-                               return _('Acceptable values are an integer followed by m, h, d');
-                       }
-                       return true;
-               }
+               o.validate = timevalidate;
 
                o = s.taboption('advanced', form.Flag, 'rekey', _('Rekey'));
                o.default = false;
@@ -213,12 +207,7 @@ return view.extend({
                o.value('60m', '60m');
                o.modalonly = false;
                o.modalonly = true;
-               o.validate = function(section_id, value) {
-                       if (!/^[0-9]{1,3}[smhd]$/.test(value)) {
-                               return _('Acceptable values are an integer followed by m, h, d');
-                       }
-                       return true;
-               }
+               o.validate = timevalidate;
 
                o = s.taboption('advanced', form.ListValue, 'dpdaction', _('DPD Action'));
                o.default = 'restart';
@@ -265,17 +254,17 @@ return view.extend({
                o.rmempty = true;
                o.modalonly = true;
                o.value('');
-               for (var i = 0; i < interfaces.length; i++) {
-                       if ((interfaces[i]['proto'] == "vti") && interfaces[i]['ikey'] && interfaces[i]['okey']) {
-                               o.value(interfaces[i]['.name'], 'VTI - ' + interfaces[i]['.name']);
+               interfaces.forEach(iface => {
+                       const { proto, ikey, okey, ifid, ['.name']: name } = iface;
+
+                       if (proto === "vti" && ikey && okey) {
+                               o.value(name, `VTI - ${name}`);
                        }
 
-                       if ((interfaces[i]['proto'] == "xfrm")
-                               && interfaces[i]['ifid']
-                               && interfaces[i]['.name'].match('ipsec' + interfaces[i]['ifid'])) {
-                               o.value(interfaces[i]['.name'], 'XFRM - ' + interfaces[i]['.name']);
+                       if (proto === "xfrm" && ifid && name.match(`ipsec${ifid}`)) {
+                               o.value(name, `XFRM - ${name}`);
                        }
-               }
+               });
 
                o = s.taboption('advanced', form.Flag, 'update_peeraddr', _('Update Peer Address'),
                        _('Auto Update Peer Address of VTI interface'));