mirror of
https://github.com/orangecoding/fredy.git
synced 2026-06-16 12:31:07 +00:00
87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
import { JSONFileSync } from 'lowdb/node';
|
|
import { getDirName } from '../../utils.js';
|
|
import * as hasher from '../security/hash.js';
|
|
import { nanoid } from 'nanoid';
|
|
import * as jobStorage from './jobStorage.js';
|
|
import path from 'path';
|
|
import LowdashAdapter from './LowDashAdapter.js';
|
|
|
|
const defaultData = {
|
|
user: [
|
|
//you probably want to change the default password ;)
|
|
{
|
|
id: nanoid(),
|
|
lastLogin: Date.now(),
|
|
username: 'admin',
|
|
password: hasher.hash('admin'),
|
|
isAdmin: true,
|
|
},
|
|
],
|
|
};
|
|
|
|
const file = path.join(getDirName(), '../', 'db/users.json');
|
|
const adapter = new JSONFileSync(file);
|
|
const db = new LowdashAdapter(adapter, defaultData);
|
|
|
|
db.read();
|
|
|
|
export const getUsers = (withPassword) => {
|
|
const jobs = jobStorage.getJobs();
|
|
return db.chain
|
|
.get('user')
|
|
.value()
|
|
.map((user) => ({
|
|
//we dont want the password in the frontend, even tho it's hashed
|
|
...user,
|
|
password: withPassword ? user.password : null,
|
|
numberOfJobs: jobs.filter((job) => job.userId === user.id).length,
|
|
}));
|
|
};
|
|
export const getUser = (id) => {
|
|
const jobs = jobStorage.getJobs();
|
|
const user = db.chain
|
|
.get('user')
|
|
.find((user) => user.id === id)
|
|
.value();
|
|
if (user == null) {
|
|
return null;
|
|
}
|
|
return {
|
|
...user,
|
|
numberOfJobs: jobs.filter((job) => job.userId === user.id).length,
|
|
};
|
|
};
|
|
export const upsertUser = ({ username, password, userId, isAdmin }) => {
|
|
const user = db.chain
|
|
.get('user')
|
|
.filter((u) => u.id !== userId)
|
|
.value();
|
|
user.push({
|
|
id: userId || nanoid(),
|
|
username,
|
|
lastLogin: user.lastLogin,
|
|
password: hasher.hash(password),
|
|
isAdmin,
|
|
});
|
|
db.chain.set('user', user).value();
|
|
db.write();
|
|
};
|
|
export const setLastLoginToNow = ({ userId }) => {
|
|
db.chain
|
|
.get('user')
|
|
.find((u) => u.id === userId)
|
|
.assign({ lastLogin: Date.now() })
|
|
.value();
|
|
db.write();
|
|
};
|
|
export const removeUser = (userId) => {
|
|
const user = db.chain.get('user').value();
|
|
db.chain
|
|
.set(
|
|
'user',
|
|
user.filter((u) => u.id !== userId)
|
|
)
|
|
.value();
|
|
db.write();
|
|
};
|