import { readFileSync, writeFileSync, existsSync } from 'fs'; export function load_mail_perms(file_path) { let allowed = []; if (file_path && existsSync(file_path)) { try { const parsed = JSON.parse(readFileSync(file_path, 'utf8')); if (!Array.isArray(parsed.allowed)) { throw new Error("'allowed' must be an array"); } allowed = parsed.allowed; } catch (err) { throw new Error(`Cannot load mail permissions from ${file_path}: ${err.message}`); } } function write() { if (!file_path) { return; } writeFileSync(file_path, JSON.stringify({ allowed }, null, '\t') + '\n', 'utf8'); } function check(user, to, topic) { return allowed.some(e => e.user === user && e.to === to && (e.topic === topic || e.topic === null)); } function add(user, to, topic) { if (!check(user, to, topic)) { allowed.push({ user, to, topic }); write(); } } function remove(user, to, topic) { const before = allowed.length; allowed = allowed.filter(e => !(e.user === user && e.to === to && e.topic === topic)); if (allowed.length !== before) { write(); } } function list() { return [...allowed]; } return { check, add, remove, list }; }