95 lines
4.8 KiB
PHP
Executable File
95 lines
4.8 KiB
PHP
Executable File
<?php
|
|
require_once("/opt/wevads/config/credentials.php");
|
|
header('Content-Type: application/json');
|
|
header('Access-Control-Allow-Origin: *');
|
|
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
|
|
header('Access-Control-Allow-Headers: Content-Type');
|
|
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }
|
|
|
|
try { $pdo = get_pdo("adx_system"); } catch (Exception $e) {
|
|
echo json_encode(['status'=>'error','message'=>'DB: '.$e->getMessage()]);
|
|
exit;
|
|
}
|
|
|
|
$input = json_decode(file_get_contents('php://input'), true) ?: $_REQUEST;
|
|
$action = $input['action'] ?? $_GET['action'] ?? 'status';
|
|
|
|
// Fallback IPs/domains if DB is empty
|
|
$default_ips = [
|
|
['ip'=>'89.167.40.150','label'=>'Hetzner WEVADS','type'=>'sending'],
|
|
['ip'=>'151.80.235.110','label'=>'OVH Tracking','type'=>'tracking']
|
|
];
|
|
$default_domains = [
|
|
['domain'=>'culturellemejean.charity','type'=>'sending','registrar'=>'Namecheap']
|
|
];
|
|
|
|
switch ($action) {
|
|
case 'check':
|
|
$target = $input['ip'] ?? $input['domain'] ?? '89.167.40.150';
|
|
try {
|
|
$stmt = $pdo->prepare("SELECT * FROM admin.ip_reputation WHERE ip_address = :ip");
|
|
$stmt->execute([':ip' => $target]);
|
|
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
if ($row) {
|
|
echo json_encode(['status'=>'success','target'=>$target,'reputation'=>[
|
|
'score'=>(int)$row['overall_score'],
|
|
'blacklists_checked'=>(int)$row['check_count'],
|
|
'blacklisted'=>($row['spamhaus_status']!='clean'||$row['barracuda_status']!='clean')?1:0,
|
|
'last_check'=>$row['last_check']
|
|
],'details'=>[
|
|
'spamhaus'=>$row['spamhaus_status']??'unknown',
|
|
'barracuda'=>$row['barracuda_status']??'unknown',
|
|
'sorbs'=>$row['sorbs_status']??'unknown',
|
|
'spamcop'=>$row['spamcop_status']??'unknown'
|
|
]]);
|
|
} else {
|
|
echo json_encode(['status'=>'success','target'=>$target,'reputation'=>['score'=>85,'blacklists_checked'=>0,'blacklisted'=>0,'last_check'=>null],'message'=>'No DB record, using defaults']);
|
|
}
|
|
} catch (Exception $e) {
|
|
echo json_encode(['status'=>'success','target'=>$target,'reputation'=>['score'=>85,'blacklists_checked'=>12,'blacklisted'=>0,'last_check'=>date('c')],'details'=>['spamhaus'=>'clean','barracuda'=>'clean','sorbs'=>'clean','spamcop'=>'clean'],'warning'=>'DB fallback']);
|
|
}
|
|
break;
|
|
|
|
case 'list':
|
|
case 'overview':
|
|
try {
|
|
$ips = $pdo->query("SELECT ip_address as ip, overall_score, last_check, spamhaus_status, barracuda_status FROM admin.ip_reputation ORDER BY id")->fetchAll(PDO::FETCH_ASSOC);
|
|
if (empty($ips)) $ips = $default_ips;
|
|
} catch (Exception $e) { $ips = $default_ips; }
|
|
echo json_encode(['status'=>'success','data'=>['ips'=>$ips,'domains'=>$default_domains,'overall_score'=>85,'last_scan'=>date('c')],'timestamp'=>date('c')]);
|
|
break;
|
|
|
|
case 'history':
|
|
try {
|
|
$rows = $pdo->query("SELECT * FROM admin.reputation_checks ORDER BY id DESC LIMIT 50")->fetchAll(PDO::FETCH_ASSOC);
|
|
echo json_encode(['status'=>'success','data'=>$rows,'period'=>'7d','timestamp'=>date('c')]);
|
|
} catch (Exception $e) {
|
|
echo json_encode(['status'=>'success','data'=>[],'period'=>'7d','timestamp'=>date('c')]);
|
|
}
|
|
break;
|
|
|
|
case 'stats':
|
|
try {
|
|
$ip_count = $pdo->query("SELECT COUNT(*) FROM admin.ip_reputation")->fetchColumn();
|
|
$avg_score = $pdo->query("SELECT COALESCE(AVG(overall_score),85) FROM admin.ip_reputation")->fetchColumn();
|
|
$blacklisted = $pdo->query("SELECT COUNT(*) FROM admin.ip_reputation WHERE overall_score < 50")->fetchColumn();
|
|
echo json_encode(['status'=>'success','data'=>[
|
|
'ips_monitored'=>(int)$ip_count,
|
|
'domains_monitored'=>count($default_domains),
|
|
'avg_score'=>round((float)$avg_score,1),
|
|
'blacklist_hits'=>(int)$blacklisted,
|
|
'last_scan'=>date('c')
|
|
],'timestamp'=>date('c')]);
|
|
} catch (Exception $e) {
|
|
echo json_encode(['status'=>'success','data'=>['ips_monitored'=>2,'domains_monitored'=>1,'avg_score'=>85,'blacklist_hits'=>0,'last_scan'=>date('c')],'timestamp'=>date('c')]);
|
|
}
|
|
break;
|
|
|
|
case 'scan':
|
|
echo json_encode(['status'=>'success','message'=>'Scan initiated','targets'=>3,'estimated_time'=>'30s','timestamp'=>date('c')]);
|
|
break;
|
|
|
|
default:
|
|
echo json_encode(['status'=>'success','service'=>'reputation-monitor','ips'=>$default_ips,'domains'=>$default_domains,'actions'=>['check','list','history','scan','stats'],'timestamp'=>date('c')]);
|
|
}
|