cisco-vpn
Version:
Wrapper around the Cisco AnyConnect VPN client.
34 lines (31 loc) • 1.41 kB
JavaScript
const { exec } = require('child_process')
const { writeFile } = require('fs')
const tmp = require('tmp')
const x = require('throw-if-missing')
module.exports = ({ exe = 'C:/Program Files (x86)/Cisco/Cisco AnyConnect Secure Mobility Client/vpncli.exe',
server = x`server`, username = x`username`, password = x`password` }) => {
return {
connect: () => new Promise((resolve, reject) =>
tmp.file({ prefix: 'vpn-', postfix: '.txt' }, (err, path, fd, cleanup) => {
if (err) reject(err)
else writeFile(path, `${username}\n${password}\n`, err => {
if (err) reject(err)
else exec(`"${exe}" connect ${server} -s < ${path}`, (err, stdout) => {
cleanup()
if (err) reject(err)
else if (!stdout.trim().endsWith('state: Connected')) reject(new Error(stdout))
else resolve()
})
})
})
),
disconnect: () => new Promise((resolve, reject) =>
exec(`"${exe}" disconnect`, (err, stdout) => {
if (err) reject(err)
else if (!stdout.trim().endsWith('state: Disconnected')) reject(new Error(stdout))
else resolve()
})
)
}
}