43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
/**
|
|
* Persist allow/deny patterns next to agent sessions.
|
|
*/
|
|
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const { ensureAgentRoot, ensureDir } = require('../lib/paths.js');
|
|
const rules = require('./perm-rules.js');
|
|
|
|
function rulesFile() {
|
|
return path.join(ensureDir(ensureAgentRoot()), 'permission-rules.json');
|
|
}
|
|
|
|
function load() {
|
|
try {
|
|
const raw = JSON.parse(fs.readFileSync(rulesFile(), 'utf8'));
|
|
return Array.isArray(raw) ? raw : [];
|
|
} catch (_) {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
function save(list) {
|
|
const next = Array.isArray(list) ? list : [];
|
|
fs.writeFileSync(rulesFile(), JSON.stringify(next, null, 2));
|
|
return next;
|
|
}
|
|
|
|
function resolve(tool, args) {
|
|
return rules.resolve(load(), tool, args);
|
|
}
|
|
|
|
function remember(tool, args, decision) {
|
|
return save(rules.addRule(load(), tool, args, decision));
|
|
}
|
|
|
|
function rememberAlways(tool) {
|
|
const args = String(tool) === 'run_terminal_cmd' ? { command: '*' } : { path: '*' };
|
|
return remember(tool, args, 'allow');
|
|
}
|
|
|
|
module.exports = { rulesFile, load, save, resolve, remember, rememberAlways };
|