Files
claude-code-conduit/server/mail_perms.mjs
mikael-lovqvists-claude-agent d06e11197a Support wildcard topic in mail permissions
topic: null in a permission entry now matches any topic, allowing
broad grants without specifying a specific topic. set-mail-permission
topic param is now optional; omitting it stores null (wildcard).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 23:00:40 +00:00

50 lines
1.2 KiB
JavaScript

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 };
}