Files
next.orly.dev/scripts/docker-policy/cs-policy-daemon.js
mleku 3e7cc01d27
Some checks failed
Go / build (push) Has been cancelled
Go / release (push) Has been cancelled
make script stderr print into relay logs
2025-11-11 14:41:54 +00:00

62 lines
1.9 KiB
JavaScript

#!/usr/bin/env node
const fs = require('fs');
const readline = require('readline');
const filePath = '/home/orly/cs-policy-output.txt';
// Create readline interface to read from stdin
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
// Log that script started - to both file and stderr
fs.appendFileSync(filePath, `${Date.now()}: Policy script started\n`);
console.error('[cs-policy] Policy script started');
// Process each line of input (policy events)
rl.on('line', (line) => {
try {
// Log that we received an event (to file)
fs.appendFileSync(filePath, `${Date.now()}: Received event: ${line.substring(0, 100)}...\n`);
// Parse the policy event
const event = JSON.parse(line);
// Log event details including access type
const accessType = event.access_type || 'unknown';
const eventKind = event.kind || 'unknown';
const eventId = event.id || 'unknown';
// Log to both file and stderr (stderr appears in relay log)
fs.appendFileSync(filePath, `${Date.now()}: Event ID: ${eventId}, Kind: ${eventKind}, Access: ${accessType}\n`);
console.error(`[cs-policy] Processing event ${eventId.substring(0, 8)}, kind: ${eventKind}, access: ${accessType}`);
// Respond with "accept" to allow the event
const response = {
id: event.id,
action: "accept",
msg: ""
};
console.log(JSON.stringify(response));
} catch (err) {
// Log errors to both file and stderr
fs.appendFileSync(filePath, `${Date.now()}: Error: ${err.message}\n`);
console.error(`[cs-policy] Error processing event: ${err.message}`);
// Reject on error
console.log(JSON.stringify({
action: "reject",
msg: "Policy script error"
}));
}
});
rl.on('close', () => {
fs.appendFileSync(filePath, `${Date.now()}: Policy script stopped\n`);
console.error('[cs-policy] Policy script stopped');
});