]> PHS Git Server - phs-api.git/commitdiff
Testing vpn paths.
authorcharleswrayjr <charleswrayjr@gmail.com>
Mon, 8 Sep 2025 16:07:27 +0000 (11:07 -0500)
committercharleswrayjr <charleswrayjr@gmail.com>
Mon, 8 Sep 2025 16:07:27 +0000 (11:07 -0500)
src/controllers/vpn.controller.js

index 0d5d9c22510d53844723fed7471c3caedcc2fc7f..620c219253782b4284cfc200d9fa43ea29c23d55 100644 (file)
@@ -87,19 +87,54 @@ module.exports = {
         stream.on( 'close', ( code ) => {
           conn.end();
           if (code === 0) {
-            const lines = output.split( '\n' );
+            const parseVpnStatus = (output) => {
+              // Split once and reuse
+              const lines = output.split('\n').map(line => line.trim()).filter(Boolean);
+
+              // Find indices using a single pass
+              let sIndex = -1, mIndex = -1, eIndex = -1;
+              lines.forEach((line, i) => {
+                if (sIndex === -1 && line.startsWith('Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since')) sIndex = i;
+                else if (mIndex === -1 && line.startsWith('ROUTING TABLE')) mIndex = i;
+                else if (eIndex === -1 && line.startsWith('GLOBAL STATS')) eIndex = i;
+              });
+
+              // Early return if indices not found
+              if (sIndex === -1 || mIndex === -1 || eIndex === -1) return [];
+
+              // Parse clients and routing table together in a single pass
+              const clientsMap = new Map();
+              for (let i = sIndex + 1; i < mIndex; i++) {
+                const parts = lines[i].split(',');
+                clientsMap.set(parts[0], {
+                  name: parts[0],
+                  ip: parts[1],
+                  connectedSince: parts[4],
+                  virtual_ip: ''
+                });
+              }
+
+              // Assign virtual IPs
+              for (let i = mIndex + 2; i < eIndex; i++) {
+                const parts = lines[i].split(',');
+                const client = clientsMap.get(parts[1]);
+                if (client) client.virtual_ip = parts[0];
+              }
+
+              res.json(clientsMap.values());
+            };
+            /*const lines = output.split( '\n' );
             const sIndex = lines.findIndex( line => line.startsWith( 'Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since' ) );
             const mIndex = lines.findIndex( line => line.startsWith( 'ROUTING TABLE' ) );
             const eIndex = lines.findIndex( line => line.startsWith( 'GLOBAL STATS' ) );
             const C = [...lines].slice(sIndex +1, mIndex).filter( line => line.trim() );
             const R = [...lines].slice(mIndex +2, eIndex).filter( line => line.trim() );
-            console.log('clients: ', C, ' routes: ', R );
             const clients = C.map( line => {
               const parts = line.split( ',' );
               const vLine = R.find( l => l.includes( parts[0] ) && l !== line );
               return { name:parts[0], ip:parts[1], virtual_ip:vLine.split( ',' )[0], connectedSince:parts[4] };
             } );
-            res.json( { clients } );
+            res.json( { clients } );*/
           } else {
             res.status( 500 ).json( { error:`Command failed: ${ output }` } );
           }