]> PHS Git Server - phs-api.git/commitdiff
Adding start, stop, and restart to vpn.
authorcharleswrayjr <charleswrayjr@gmail.com>
Mon, 15 Sep 2025 04:59:37 +0000 (23:59 -0500)
committercharleswrayjr <charleswrayjr@gmail.com>
Mon, 15 Sep 2025 04:59:37 +0000 (23:59 -0500)
src/controllers/vpn.controller.js
src/routes/vpn.routes.js

index 8b4f888a871ccfd6d618b979585a23e1bdaeb0a2..8655ff9978a3d82001d35340051c5e15aaa3d7cd 100644 (file)
@@ -357,10 +357,59 @@ module.exports = {
       return next(new createError(500, `Failed to check VPN status: ${error.message}`));
     }
   },
+  stop: async ( req, res, next ) => {
+    try {
+      const conn = new Client();
+      conn.on( 'ready', () => {
+        const command = `sudo systemctl stop openvpn@server`;
+        conn.exec( command, ( err, stream ) => {
+          if (err) {
+            conn.end();
+            return next( new createError( 500, `SSH command failed: ${ err.message }` ) );
+          }
+          res.json({ message: 'VPN stopped successfully' });
+        } );
+      }).on('error', (err) => {
+        next(new createError(500, `SSH connection failed: ${err.message}`))
+      }).connect(sshConfig);
+    } catch (error) {
+      return next(new createError(500, `Failed to stop VPN: ${error.message}`));
+    }
+  },
+  start: async ( req, res, next ) => {
+    try {
+      const conn = new Client();
+      conn.on( 'ready', () => {
+        const command = `sudo systemctl start openvpn@server`;
+        conn.exec( command, ( err, stream ) => {
+          if (err) {
+            conn.end();
+            return next( new createError( 500, `SSH command failed: ${ err.message }` ) );
+          }
+          res.json({ message: 'VPN started successfully' });
+        } );
+      }).on('error', (err) => {
+        next(new createError(500, `SSH connection failed: ${err.message}`))
+      }).connect(sshConfig);
+    } catch (error) {
+      return next(new createError(500, `Failed to start VPN: ${error.message}`));
+    }
+  },
   restart: async ( req, res, next ) => {
     try {
-      await execPromise('systemctl restart openvpn@server');
-      res.json({ message: 'VPN restarted successfully' });
+      const conn = new Client();
+      conn.on( 'ready', () => {
+        const command = `sudo systemctl restart openvpn@server`;
+        conn.exec( command, ( err, stream ) => {
+          if (err) {
+            conn.end();
+            return next( new createError( 500, `SSH command failed: ${ err.message }` ) );
+          }
+          res.json({ message: 'VPN restarted successfully' });
+        } );
+      }).on('error', (err) => {
+        next(new createError(500, `SSH connection failed: ${err.message}`))
+      }).connect(sshConfig);
     } catch (error) {
       return next(new createError(500, `Failed to restart VPN: ${error.message}`));
     }
index eab5035c4e5116740a988379390b0e90203c21d5..9d0408aeccad92e311332c97d5f589069fbe547e 100644 (file)
@@ -11,6 +11,8 @@ module.exports = ( passport ) => {
   router.get( '/clients', vpnController.getClients );
   router.get( '/available-clients', vpnController.getAvailableClients );
   router.put( '/disconnect', vpnController.disconnect );
+  router.put( '/stop', vpnController.stop );
+  router.put( '/start', vpnController.start );
   router.put( '/restart', vpnController.restart );
 
   return router;