conn.on( 'ready', () => {
const commands = [
`cd /etc/openvpn/easy-rsa`,
- `sudo ./easyrsa --batch build-client-full ${clientName} nopass`,
- staticIp ? `echo "ifconfig-push ${staticIp} 255.255.255.0" | tee -a /etc/openvpn/ccd/${clientName}` : 'true',
- `cp /etc/openvpn/client-template.txt /etc/openvpn/clients/${clientName}.ovpn`,
- `echo "<ca>" | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `sudo cat pki/ca.crt | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `echo "</ca>\n<cert>" | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `sudo cat pki/issued/${clientName}.crt | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `echo "</cert>\n<key>" | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `sudo cat pki/private/${clientName}.key | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `echo "</key>" | tee -a /etc/openvpn/clients/${clientName}.ovpn`,
- `cp /etc/openvpn/clients/${clientName}.ovpn /home/charles/clients/${clientName}.ovpn`,
- `cat /etc/openvpn/clients/${clientName}.ovpn`,
+ `sudo ./easyrsa --batch build-client-full ${ clientName } nopass`,
+ staticIp ? `echo "ifconfig-push ${ staticIp } 255.255.255.0" | tee -a /etc/openvpn/ccd/${ clientName }` : 'true',
+ `cp /etc/openvpn/client-template.txt /etc/openvpn/clients/${ clientName }.ovpn`,
+ `echo "<ca>" | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `sudo cat pki/ca.crt | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `echo "</ca>\n<cert>" | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `sudo cat pki/issued/${ clientName }.crt | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `echo "</cert>\n<key>" | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `sudo cat pki/private/${ clientName }.key | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `echo "</key>" | tee -a /etc/openvpn/clients/${ clientName }.ovpn`,
+ `cp /etc/openvpn/clients/${ clientName }.ovpn /home/charles/clients/${ clientName }.ovpn`,
+ `cat /etc/openvpn/clients/${ clientName }.ovpn`,
];
conn.exec( commands.join( ' && ' ), ( err, stream ) => {
next( error );
} ).connect( sshConfig );
},
- getAvailableClients: async ( req, res, next ) => {
+ getAvailableClients:async ( req, res, next ) => {
const conn = new Client();
conn.on( 'ready', () => {
const commands = [
'ls /home/charles/clients/* 2>/dev/null || true'
];
conn.exec( commands.join( ' && ' ), ( err, stream ) => {
- if (err) {
- conn.end();
- const error = new createError( 500, `SSH command failed` );
- next( error );
- }
+ if (err) {
+ conn.end();
+ const error = new createError( 500, `SSH command failed` );
+ next( error );
+ }
let output = '';
- stream.on('data', (data) => (output += data));
- stream.stderr.on('data', (data) => (output += data));
- stream.on('close', async (code) => {
+ stream.on( 'data', ( data ) => (output += data) );
+ stream.stderr.on( 'data', ( data ) => (output += data) );
+ stream.on( 'close', async ( code ) => {
conn.end();
if (code !== 0) {
- return next(new createError(500, `Command failed: ${output}`));
+ return next( new createError( 500, `Command failed: ${ output }` ) );
}
const clients = [];
- const ccdFiles = output.split('\n').filter(line => !line.endsWith('.crt') && !line.endsWith('.ovpn')).filter( l => !l.startsWith('.') && l !== '' && !l.endsWith('server'));
- const crtFiles = output.split('\n').filter(line => line.endsWith('.crt')).filter( l => !l.startsWith('.') && l !== '' && !l.endsWith('server.crt'));
- const ovpnFiles = output.split('\n').filter(line => line.endsWith('.ovpn')).filter( l => !l.startsWith('.') && l !== '');
+ const ccdFiles = output.split( '\n' ).filter( line => !line.endsWith( '.crt' ) && !line.endsWith( '.ovpn' ) ).filter( l => !l.startsWith( '.' ) && l !== '' && !l.endsWith( 'server' ) );
+ const crtFiles = output.split( '\n' ).filter( line => line.endsWith( '.crt' ) ).filter( l => !l.startsWith( '.' ) && l !== '' && !l.endsWith( 'server.crt' ) );
+ const ovpnFiles = output.split( '\n' ).filter( line => line.endsWith( '.ovpn' ) ).filter( l => !l.startsWith( '.' ) && l !== '' );
// Process .ccd files for static IPs
for (const ccdFile of ccdFiles) {
}
}
res.json( { clients } );
- });
+ } );
} );
} ).on( 'error', ( err ) => {
const error = new createError( 500, `SSH connection failed: ${ err.message }` );
next( error );
- } ).connect( sshConfig )
+ } ).connect( sshConfig );
},
getClients:async ( req, res, next ) => {
const conn = new Client();