109 lines
2.6 KiB
JavaScript
109 lines
2.6 KiB
JavaScript
import { readFileSync, writeFileSync } from "fs";
|
|
import { exit } from "process";
|
|
import { DB_BACKEND } from "./backends.js";
|
|
|
|
export default class LocalDB extends DB_BACKEND {
|
|
#path = null;
|
|
#data = null;
|
|
#defaultuser = null;
|
|
|
|
constructor (config) {
|
|
super();
|
|
const path = config.dbfile;
|
|
try {
|
|
this.#path = path;
|
|
this.#load();
|
|
this.#defaultuser = global.config.defaultuser;
|
|
}
|
|
catch {
|
|
console.log(`error: ${path} was not found. Please follow the directions in the README to initialize localdb.json.`);
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Load db from local file system. Reads from file path store in path.
|
|
*/
|
|
#load () {
|
|
this.#data = JSON.parse(readFileSync(this.#path));
|
|
}
|
|
|
|
/**
|
|
* Save db to local file system. Saves to file path stored in path.
|
|
*/
|
|
#save () {
|
|
writeFileSync(this.#path, JSON.stringify(this.#data));
|
|
}
|
|
|
|
addUser (user, attributes, params = null) {
|
|
const username = `${user.id}@${user.realm}`;
|
|
attributes = attributes || this.#defaultuser;
|
|
this.#data.users[username] = attributes;
|
|
this.#save();
|
|
}
|
|
|
|
getUser (user, params = null) {
|
|
const username = `${user.id}@${user.realm}`;
|
|
if (this.#data.users[username]) {
|
|
return this.#data.users[username];
|
|
}
|
|
else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
setUser (user, attributes, params = null) {
|
|
const username = `${user.id}@${user.realm}`;
|
|
if (this.#data.users[username]) {
|
|
this.#data.users[username] = attributes;
|
|
this.#save();
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
delUser (user, params = null) {
|
|
const username = `${user.id}@${user.realm}`;
|
|
if (this.#data.users[username]) {
|
|
delete this.#data.users[username];
|
|
this.#save();
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// group methods not implemented because db backend does not store groups
|
|
addGroup (group, atrributes, params = null) {}
|
|
getGroup (group, params = null) {}
|
|
setGroup (group, attributes, params = null) {}
|
|
delGroup (group, params = null) {}
|
|
|
|
// assume that adding to group also adds to group's pool
|
|
addUserToGroup (user, group, params = null) {
|
|
const username = `${user.id}@${user.realm}`;
|
|
if (this.#data.users[username]) {
|
|
this.#data.users[username].cluster.pools[group.id] = true;
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// assume that adding to group also adds to group's pool
|
|
delUserFromGroup (user, group, params = null) {
|
|
const username = `${user.id}@${user.realm}`;
|
|
if (this.#data.users[username] && this.#data.users[username].cluster.pools[group.id]) {
|
|
delete this.#data.users[username].cluster.pools[group.id];
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|