File: //data/silvera-firewall-app/debug_sync.js
const { Pool } = require('pg');
const fs = require('fs').promises;
const path = require('path');
const BRIDGE_DIR = '/app/bitninja_bridge';
const COMMAND_FILE = path.join(BRIDGE_DIR, 'command.txt');
const RESULT_FILE = path.join(BRIDGE_DIR, 'result.txt');
async function executeBitNinjaCommand(action, ip, comment = '') {
try {
const command = `${action} ${ip} ${comment}\n`;
await fs.writeFile(COMMAND_FILE, command);
let attempts = 0;
while (attempts < 30) {
try {
await fs.access(RESULT_FILE);
const result = await fs.readFile(RESULT_FILE, 'utf8');
await fs.unlink(RESULT_FILE);
return { success: true, message: result.trim() };
} catch {
await new Promise(resolve => setTimeout(resolve, 100));
attempts++;
}
}
throw new Error('BitNinja command timeout');
} catch (error) {
console.error('BitNinja bridge error:', error);
return { success: false, message: error.message };
}
}
async function getBitNinjaWhitelist() {
console.log('Testing getBitNinjaWhitelist function...');
try {
const result = await executeBitNinjaCommand('list', '');
console.log('Bridge result success:', result.success);
console.log('Bridge result message:', JSON.stringify(result.message));
if (!result.success) {
console.log('Bridge failed, returning empty array');
return [];
}
const lines = result.message.split('\n').filter(line => line.trim());
console.log('Parsed lines:', lines);
const ips = [];
for (const line of lines) {
const trimmedLine = line.trim();
console.log(`Testing line: "${trimmedLine}"`);
if (/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.test(trimmedLine)) {
console.log(`Valid IP: ${trimmedLine}`);
ips.push(trimmedLine);
} else {
console.log(`Invalid IP format: ${trimmedLine}`);
}
}
console.log('Final IPs:', ips);
return ips;
} catch (error) {
console.error('BitNinja list error:', error);
return [];
}
}
async function main() {
const ips = await getBitNinjaWhitelist();
console.log('=== RESULT ===');
console.log('Total IPs found:', ips.length);
console.log('IPs:', ips);
}
main().catch(console.error);