Sinatra/code/lib/data.js
2024-05-28 16:46:39 +00:00

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");
}
}
}