const express = require('express') const { Routeros } = require("routeros-node"); const bodyparser = require('body-parser'); const app = express() const routeros = new Routeros({ host: "203.83.6.82", port: 8728, user: "admin", password: "HYPerLINk6", }); var conn = null; routeros.connect().then(s => { conn = s; }); app.use(bodyparser.json()); app.get('/api/kms-clients/:ip?', async function (req, res) { var command = [ "/ip/firewall/address-list/print", "?list=kms-allowed" ] if (req.params.user) { command.push(`?address=${req.params.user}`) } result = await conn.write(command); res.json(result) }) app.post('/api/kms-clients', async function (req, res) { if (!req.body.address.match(/[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\/?[0-9]{0,2}/)) { return res.status(400).json({ "Error": "Invalid IP Address" }) } var command = [ "/ip/firewall/address-list/add", "=list=kms-allowed", `=address=${req.body.address}`, `=comment=${req.body.comment}`, ] if (req.params.user) { command.push(`?address=${req.params.user}`) } result = await conn.write(command); res.json(result) }) app.get('/api/vpn-active/:user?', async function (req, res) { var command = [ "/ppp/active/print" ] if (req.params.user) { command.push(`?name=${req.params.user}`) } result = await conn.write(command); res.json(result) }) app.delete('/api/vpn-active/:user', async function (req, res) { var command = [ "/ppp/active/print", `?name=${req.params.user}` ] result = await conn.write(command); var user = result.filter(i => { return i.name == req.params.user }) if (user.length !== 1) { // return res.send(400).json({"Error": "User is not active"}) // nope } else { try { console.log(user[0]) console.log(`=.id=${user[0]['.id']}`) var command = [ "/ppp/active/remove", `=.id=${user[".id"]}` ] result = await conn.write(command); } catch (e) { console.error(e) } } res.json(result) }) app.get('/api/vpn-sessions/:user?', async function (req, res) { // const conn = await routeros.connect(); var command = [ "/user-manager/session/print" ] if (req.params.user) { command.push(`?user=${req.params.user}`) } result = await conn.write(command); res.json(result) }) app.get('/api/vpn-users/:user?', async function (req, res) { // const conn = await routeros.connect(); var command = [ "/user-manager/user/print" ] if (req.params.user) { command.push(`?name=${req.params.user}`) } var result = await conn.write(command); const allowedFields = ['name', 'group', 'attributes', 'comment', '.id'] var users = []; result.forEach(user => { var userObject = {} Object.keys(user).forEach(key => { if (allowedFields.includes(key)) userObject[key] = user[key] }) users.push(userObject); }) res.json(users) }) app.post('/api/vpn-users', (req, res) => { // console.log(req.body); const allowedFields = ['name', 'password', 'otp-secret', 'group', '.id'] var userObject = {}; Object.keys(req.body).forEach(k => { if (allowedFields.includes(k)) userObject[k] = req.body[k] }) res.send(userObject) }) async function run() { const routeros = new Routeros({ host: "203.83.6.82", port: 8728, user: "admin", password: "HYPerLINk6", }); try { // connect to RouterOS const conn = await routeros.connect(); // if connected successfully will return the connected instance/socket, console.log("conn===>", conn); // after that we can write the query // const usersHotspot = await conn.write([ // "/user-manager/user/add", // "=name=aaron", // "=password=Falz1982", // "=group=vpn"]); const usersHotspot = await conn.write([ "/user-manager/session/print", "?user=ben" // "=name=aaron", // "=password=Falz1982", // "=group=vpn" ]); console.log(usersHotspot); } catch (error) { // if it fails will return an error here console.log("error===>", error); } finally { // dont forget to close connection routeros.destroy(); // console.log(conn) } // return conn; } // run(); // console.log(conn) function generateTOTPKey(length) { const base32Characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; let key = ''; for (let i = 0; i < length; i++) { const randomIndex = Math.floor(Math.random() * base32Characters.length); key += base32Characters.charAt(randomIndex); } return key; } console.log(generateTOTPKey(32)) app.listen(3001)