HEX
Server: LiteSpeed
System: Linux CentOS-79-64-minimal 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: vishn3436 (5293)
PHP: 8.0.15
Disabled: NONE
Upload Files
File: //data/silvera-firewall-app/test_force_sync.js
const { Pool } = require('pg');
const fs = require('fs').promises;
const path = require('path');

const pool = new Pool({
  host: 'database',
  port: 5432,
  database: 'silvera_firewall',
  user: 'admin',
  password: 'silvera_firewall_2024',
});

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 < 60) { // Longer timeout for force sync
      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, 1000)); // Wait 1 second
        attempts++;
      }
    }
    
    throw new Error('BitNinja command timeout');
  } catch (error) {
    console.error('BitNinja bridge error:', error);
    return { success: false, message: error.message };
  }
}

async function testForceSync() {
  try {
    console.log('šŸ”„ Testing FORCE SYNC functionality...');
    console.log('āš ļø  This will restart BitNinja service and take ~15-20 seconds');
    
    const startTime = Date.now();
    
    // Test force sync
    const result = await executeBitNinjaCommand('force_sync', '');
    
    const endTime = Date.now();
    const duration = Math.round((endTime - startTime) / 1000);
    
    console.log(`šŸ”„ FORCE SYNC completed in ${duration} seconds`);
    console.log('Success:', result.success);
    console.log('Raw result:');
    console.log(result.message);
    
    if (result.success) {
      // Parse IPs
      const lines = result.message.split('\n').filter(line => line.trim());
      const ips = [];
      
      for (const line of lines) {
        const trimmedLine = line.trim();
        if (trimmedLine.startsWith('Starting force sync')) continue;
        
        if (/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.test(trimmedLine)) {
          ips.push(trimmedLine);
        }
      }
      
      console.log(`\nāœ… FORCE SYNC Results:`);
      console.log(`šŸ“Š Found ${ips.length} verified IPs:`);
      ips.forEach(ip => console.log(`   šŸ” ${ip}`));
      
      // Compare with database
      const dbResult = await pool.query("SELECT ip_address FROM ip_whitelist ORDER BY ip_address");
      const dbIPs = dbResult.rows.map(row => row.ip_address);
      
      console.log(`\nšŸ“Š Database has ${dbIPs.length} IPs:`);
      dbIPs.forEach(ip => console.log(`   šŸ’¾ ${ip}`));
      
      console.log(`\nšŸ” Comparison:`);
      const matches = ips.every(ip => dbIPs.includes(ip)) && dbIPs.every(ip => ips.includes(ip));
      console.log(`${matches ? 'āœ… PERFECT MATCH' : 'āŒ MISMATCH'}`);
      
      if (!matches) {
        const missing = ips.filter(ip => !dbIPs.includes(ip));
        const extra = dbIPs.filter(ip => !ips.includes(ip));
        if (missing.length) console.log(`Missing in DB: ${missing.join(', ')}`);
        if (extra.length) console.log(`Extra in DB: ${extra.join(', ')}`);
      }
    }
    
    process.exit(0);
  } catch (error) {
    console.error('Force sync test failed:', error);
    process.exit(1);
  }
}

testForceSync();