From: charleswrayjr Date: Mon, 8 Sep 2025 16:07:27 +0000 (-0500) Subject: Testing vpn paths. X-Git-Url: https://git.phasecustomsoft.com/?a=commitdiff_plain;h=0d9be7e987dde0f686974947c29aeee72cbdb4c3;p=phs-api.git Testing vpn paths. --- diff --git a/src/controllers/vpn.controller.js b/src/controllers/vpn.controller.js index 0d5d9c2..620c219 100644 --- a/src/controllers/vpn.controller.js +++ b/src/controllers/vpn.controller.js @@ -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 }` } ); }