},
getStatus: async ( req, res, next ) => {
try {
- const { stdout } = await execPromise('systemctl is-active openvpn@server');
- res.json({ status: stdout.trim() });
+ const conn = new Client();
+ conn.on('ready', () => {
+ const command = `systemctl is-active openvpn@server`;
+ conn.exec( command, ( err, stream ) => {
+ if (err) {
+ conn.end();
+ return next( new createError( 500, `SSH command failed: ${ err.message }` ) );
+ }
+ let output = '';
+ stream.on( 'data', ( data ) => (output += data) );
+ stream.stderr.on( 'data', ( data ) => (output += data) );
+ stream.on( 'close', ( code ) => {
+ conn.end();
+ if (code === 0) {
+ res.json( { active:output.trim() === 'active' } );
+ } else {
+ next( new createError( 500, `Command failed: ${ output }` ) );
+ }
+ } );
+ } );
+ }).on('error', (err) => {
+ next(new createError(500, `SSH connection failed: ${err.message}`))
+ });
} catch (error) {
return next(new createError(500, `Failed to check VPN status: ${error.message}`));
}