You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.0 KiB
JavaScript
187 lines
5.0 KiB
JavaScript
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) |