Commit 4b15f7e5 authored by Ahmad Nemati's avatar Ahmad Nemati

init

parent 7bad5fd2
...@@ -4,13 +4,15 @@ let redis = require('./redis') ...@@ -4,13 +4,15 @@ let redis = require('./redis')
redis.init() redis.init()
const secret = 'secret'; // Replace with your shared secret const secret = 'secret'; // Replace with your shared secret
const port = 1812; // Default RADIUS authentication port const port = 1812; // Default RADIUS authentication port
const portAcc = 1813; // Default RADIUS authentication port
let reject = 'Access-Reject' let reject = 'Access-Reject'
let accept = 'Access-Accept' let accept = 'Access-Accept'
let maxConnection = 2 let maxConnection = 2
const server = dgram.createSocket('udp4'); const serverAuth = dgram.createSocket('udp4');
const serverAccounting = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => { serverAuth.on('message', (msg, rinfo) => {
const packet = radius.decode({packet: msg, secret}); const packet = radius.decode({packet: msg, secret});
if (packet.code !== 'Access-Request') { if (packet.code !== 'Access-Request') {
...@@ -25,18 +27,36 @@ server.on('message', (msg, rinfo) => { ...@@ -25,18 +27,36 @@ server.on('message', (msg, rinfo) => {
let ip = packet.attributes['Calling-Station-Id'] let ip = packet.attributes['Calling-Station-Id']
let user = {username, password, ip} let user = {username, password, ip}
// console.log('Received access request from:', username);
doAuth(packet, user, rinfo) doAuth(packet, user, rinfo)
}); });
server.on('listening', () => { serverAuth.on('listening', () => {
const address = server.address(); const address = serverAuth.address();
console.log('RADIUS server listening on port', address.port); console.log('RADIUS server Auth listening on port', address.port);
});
serverAccounting.on('message', (msg, rinfo) => {
const packet = radius.decode({packet: msg, secret});
console.log(packet)
if (packet.code !== 'Access-Request') {
console.error('Invalid packet type: ' + packet.code);
return;
}
});
serverAccounting.on('listening', () => {
const address = serverAuth.address();
console.log('RADIUS server Accounting listening on port', address.port);
}); });
server.bind(port); serverAccounting.bind(portAcc);
serverAuth.bind(port);
async function doAuth(packet, user, rinfo) { async function doAuth(packet, user, rinfo) {
let existsUser = authenticateUser(user.username) let existsUser = authenticateUser(user.username)
...@@ -46,18 +66,16 @@ async function doAuth(packet, user, rinfo) { ...@@ -46,18 +66,16 @@ async function doAuth(packet, user, rinfo) {
return return
} }
let keys = await redis.getAllKeysByUUID(user.username) let keys = await redis.getAllKeysByUUID(user.username)
console.log(keys)
for (let i=0;i<keys.length;i++) for (let i = 0; i < keys.length; i++) {
{ if (user.username + '_' + user.ip === keys[i]) {
if (user.username+'_'+user.ip ===keys[i])
{
console.log('uuid with ' + user.username + ' with ip:' + user.ip + ' granted') console.log('uuid with ' + user.username + ' with ip:' + user.ip + ' granted')
sendResponsePacket(packet, rinfo, accept) sendResponsePacket(packet, rinfo, accept)
redis.addIp(user.username, user.ip) redis.addIp(user.username, user.ip)
return return
} }
} }
if (keys.length >= 2) { if (keys.length >= maxConnection) {
console.log('uuid with ' + user.username + ' with ip:' + user.ip + ' reach limits') console.log('uuid with ' + user.username + ' with ip:' + user.ip + ' reach limits')
sendResponsePacket(packet, rinfo, reject) sendResponsePacket(packet, rinfo, reject)
return return
...@@ -83,5 +101,5 @@ function sendResponsePacket(packet, rinfo, code) { ...@@ -83,5 +101,5 @@ function sendResponsePacket(packet, rinfo, code) {
}); });
server.send(response, 0, response.length, rinfo.port, rinfo.address); serverAuth.send(response, 0, response.length, rinfo.port, rinfo.address);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment