139 lines
3.8 KiB
JavaScript
Executable File
139 lines
3.8 KiB
JavaScript
Executable File
const fs = require ('fs');
|
|
const timeauth = require ('./time.js');
|
|
|
|
try {
|
|
var data = JSON.parse (fs.readFileSync ('./data.json').toString ());
|
|
log.write ('Opened data file');
|
|
}
|
|
catch (error) {
|
|
var data = {
|
|
users: []
|
|
};
|
|
fs.writeFileSync ('./data.json', JSON.stringify (data, null, 2));
|
|
}
|
|
|
|
const persistData = () => {
|
|
var content = {
|
|
users: []
|
|
};
|
|
Object.keys (users).forEach ((user) => {
|
|
content.users.push ({
|
|
username: user,
|
|
password: users[user].password,
|
|
vlan: users[user].vlan,
|
|
description: users[user].description,
|
|
rules: users[user].rules
|
|
});
|
|
});
|
|
fs.writeFileSync ('./data.json', JSON.stringify (content, null, 2));
|
|
}
|
|
|
|
users = {};
|
|
data.users.forEach ((e) => {
|
|
users[e.username] = {
|
|
password: e.password,
|
|
vlan: e.vlan,
|
|
description: e.description,
|
|
rules: e.rules
|
|
}
|
|
});
|
|
|
|
module.exports = {
|
|
authUser: (username, password) => {
|
|
if (config.mac_auth_only) {
|
|
username = username.toLowerCase ().replace (/[:-]/g, '');
|
|
password = password.toLowerCase ().replace (/[:-]/g, '');
|
|
}
|
|
if (users[username] && users[username].password == password) {
|
|
// Check time
|
|
var rules = users[username].rules || [];
|
|
if (timeauth.checkAuth (rules)) {
|
|
return {
|
|
vlan: users[username].vlan
|
|
};
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
createUser: (payload, callback) => {
|
|
try {
|
|
payload = JSON.parse (payload);
|
|
var username = payload.username;
|
|
var password = payload.password;
|
|
if (config.mac_auth_only) {
|
|
username = username.toLowerCase ().replace (/[:-]/g, '');
|
|
password = password.toLowerCase ().replace (/[:-]/g, '');
|
|
}
|
|
var description = payload.description || "";
|
|
var rules = payload.rules || [];
|
|
var vlan = payload.vlan;
|
|
users[username] = {
|
|
password: password,
|
|
vlan: vlan,
|
|
description: description,
|
|
rules: rules
|
|
};
|
|
persistData ();
|
|
callback ("OK\n\n", null);
|
|
}
|
|
catch (error) {
|
|
callback (null, "Error");
|
|
}
|
|
},
|
|
|
|
getUsers: (callback) => {
|
|
try {
|
|
var response = Object.keys (users).map ((username) => {
|
|
return {
|
|
username: username,
|
|
password: users[username].password,
|
|
description: users[username].description,
|
|
vlan: users[username].vlan
|
|
}
|
|
});
|
|
callback (response, null);
|
|
}
|
|
catch (error) {
|
|
log.write (error);
|
|
callback (null, "Not found");
|
|
}
|
|
},
|
|
|
|
getUser: (username, callback) => {
|
|
if (config.mac_auth_only) {
|
|
username = username.toLowerCase ().replace (/[:-]/g, '');
|
|
}
|
|
try {
|
|
var user = users[username];
|
|
callback (user, null);
|
|
}
|
|
catch (error) {
|
|
callback (null, error);
|
|
}
|
|
},
|
|
|
|
deleteUser: (username, callback) => {
|
|
if (config.mac_auth_only) {
|
|
username = username.toLowerCase ().replace (/[:-]/g, '');
|
|
}
|
|
if (users[username]) {
|
|
try {
|
|
delete users[username];
|
|
persistData ();
|
|
callback ("OK\n\n", null);
|
|
}
|
|
catch (error) {
|
|
callback (null, "Error");
|
|
}
|
|
}
|
|
else {
|
|
callback (null, "Not found");
|
|
}
|
|
}
|
|
} |