ProxmoxAAS-API/db.js

85 lines
2.5 KiB
JavaScript
Raw Normal View History

2023-02-27 01:09:49 +00:00
const fs = require("fs");
filename = "localdb.json";
2023-02-27 01:28:01 +00:00
let db = {};
/**
* called at app startup, can be used to initialize any variables needed for database access
*/
2023-02-27 01:28:01 +00:00
function init () {
try {
db = JSON.parse(fs.readFileSync(filename));
2023-02-27 01:28:01 +00:00
}
catch {
fs.writeFileSync(filename, JSON.stringify(db));
}
}
/**
* user requests additional resources specified in k-v pairs
* @param {string} user user's proxmox username in the form username@authrealm
* @param {Object} resources k-v pairs with resource name as keys and resource ammount as values
2023-02-27 01:09:49 +00:00
* @returns {boolean} whether the user is approved to allocate requested resources
*/
2023-02-27 01:28:01 +00:00
function requestResources (user, resources) {
let approved = true;
Object.keys(resources).forEach((element) => {
if(!db[user][element]) { // if the resource does not exist in the user's entry, assume the user is not allowed to use it
approved = false;
}
else if (db[user][element] - resources[element] < 0) {
approved = false;
2023-02-27 01:28:01 +00:00
}
});
return approved;
2023-02-27 01:28:01 +00:00
}
2023-02-27 01:09:49 +00:00
/**
* user allocates additional resources specified in k-v pairs
* @param {string} user user's proxmox username in the form username@authrealm
* @param {Object} resources k-v pairs with resource name as keys and resource ammount as values
* @returns {boolean} true if resources were successfully allocated, false otherwise
*/
2023-02-27 01:28:01 +00:00
function allocateResources (user, resources) {
let newdb = {};
Object.assign(newdb, db);
Object.keys(resources).forEach((element) => {
console.log(newdb[user][element] + "-" + resources[element])
newdb[user][element] -= resources[element];
2023-02-27 01:28:01 +00:00
});
try {
fs.writeFileSync(filename, JSON.stringify(newdb));
Object.assign(db, newdb);
2023-02-27 01:28:01 +00:00
return true;
}
catch {
fs.writeFileSync(filename, JSON.stringify(db))
2023-02-27 01:28:01 +00:00
return false;
}
}
2023-02-27 01:09:49 +00:00
/**
* user releases allocated resources specified in k-v pairs
* @param {string} user user's proxmox username in the form username@authrealm
* @param {Object} resources k-v pairs with resource name as keys and resource ammount as values
2023-02-27 01:09:49 +00:00
* @returns {boolean} true if resources were successfully deallocated, false otherwise
*/
2023-02-27 01:28:01 +00:00
function releaseResources (user, resources) {
let newdb = {};
Object.assign(newdb, db);
Object.keys(resources).forEach((element) => {
newdb[user][element] += resources[element];
2023-02-27 01:28:01 +00:00
});
try {
fs.writeFileSync(filename, JSON.stringify(newdb));
Object.assign(db, newdb);
2023-02-27 01:28:01 +00:00
return true;
}
catch {
fs.writeFileSync(filename, JSON.stringify(db))
2023-02-27 01:28:01 +00:00
return false;
}
}
module.exports = {init, requestResources, allocateResources, releaseResources};