Files
2026-07-13 13:39:12 +08:00

46 lines
1.1 KiB
JavaScript

import bcrypt from "bcryptjs";
const MANAGEMENT_PASSWORD_SALT_ROUNDS = 12;
export async function hashManagementPassword(password) {
return bcrypt.hash(password, MANAGEMENT_PASSWORD_SALT_ROUNDS);
}
export function ensureSettingsSchema(db) {
db.prepare(
`CREATE TABLE IF NOT EXISTS key_value (
namespace TEXT NOT NULL,
key TEXT NOT NULL,
value TEXT NOT NULL,
PRIMARY KEY (namespace, key)
)`
).run();
}
export function updateSettings(db, updates) {
ensureSettingsSchema(db);
const insert = db.prepare(
"INSERT OR REPLACE INTO key_value (namespace, key, value) VALUES ('settings', ?, ?)"
);
const tx = db.transaction(() => {
for (const [key, value] of Object.entries(updates)) {
insert.run(key, JSON.stringify(value));
}
});
tx();
}
export function getSettings(db) {
ensureSettingsSchema(db);
const rows = db.prepare("SELECT key, value FROM key_value WHERE namespace = 'settings'").all();
const settings = {};
for (const row of rows) {
try {
settings[row.key] = JSON.parse(row.value);
} catch {
settings[row.key] = row.value;
}
}
return settings;
}