84 lines
4.9 KiB
PHP
84 lines
4.9 KiB
PHP
<?php
|
|
require_once __DIR__ . '/_secrets.php';
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
header('Access-Control-Allow-Origin: *');
|
|
$action = $_GET['action'] ?? $_POST['action'] ?? 'status';
|
|
$token = $_GET['token'] ?? $_POST['token'] ?? '';
|
|
if (!in_array($token, ['WEVADS2026','ETHICA_API_2026_SECURE'])) die(json_encode(['error'=>'token']));
|
|
$rf = '/tmp/wevads_send_rate_' . date('YmdH');
|
|
$rate = file_exists($rf) ? (int)file_get_contents($rf) : 0;
|
|
$MX = 100;
|
|
try { $db = new PDO('pgsql:host=10.1.0.3;port=5432;dbname=adx_system','admin',weval_secret('WEVAL_PG_ADMIN_PASS'),[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_TIMEOUT=>5]); $db->exec("SET search_path TO admin"); } catch(Exception $e) { die(json_encode(['error'=>$e->getMessage()])); }
|
|
|
|
function v2e_send($to, $subject, $html, $method, $from_name) {
|
|
$ch = curl_init('http://127.0.0.1/api/wevads-v2-engine.php?action=send_test&token=WEVADS2026');
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_POST => true,
|
|
CURLOPT_POSTFIELDS => http_build_query(['to'=>$to,'subject'=>$subject,'html'=>$html,'method'=>$method,'from_name'=>$from_name]),
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 10,
|
|
]);
|
|
$r = curl_exec($ch);
|
|
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
curl_close($ch);
|
|
if (!$r) return ['status'=>'error','error'=>'V2E unreachable'];
|
|
$j = json_decode($r, true);
|
|
return $j ?: ['status'=>'error','error'=>'Invalid V2E response'];
|
|
}
|
|
|
|
switch($action) {
|
|
case 'status':
|
|
$gs=(int)$db->query("SELECT COUNT(*) FROM graph_accounts WHERE can_send=true")->fetchColumn();
|
|
$st=(int)$db->query("SELECT COUNT(*) FROM brain_seeds")->fetchColumn();
|
|
$ls=$db->query("SELECT MAX(created_at) FROM graph_send_log")->fetchColumn();
|
|
$ts=(int)$db->query("SELECT COUNT(*) FROM graph_send_log")->fetchColumn();
|
|
$td=(int)$db->query("SELECT COUNT(*) FROM graph_send_log WHERE created_at::date=CURRENT_DATE")->fetchColumn();
|
|
$cp=(int)$db->query("SELECT COUNT(*) FROM campaigns WHERE status='paused'")->fetchColumn();
|
|
$ca=(int)$db->query("SELECT COUNT(*) FROM campaigns WHERE status='active'")->fetchColumn();
|
|
$sq=(int)$db->query("SELECT COUNT(*) FROM send_queue")->fetchColumn();
|
|
echo json_encode(['ok'=>1,'controller'=>'v1.0','auto_mode'=>file_exists('/tmp/wevads_auto_mode'),'safety'=>['rate_this_hour'=>$rate,'max_per_hour'=>$MX,'dangerous_crons_disabled'=>true],'graph'=>['senders_available'=>$gs,'seeds_total'=>$st,'total_sent_alltime'=>$ts,'sent_today'=>$td,'last_send'=>$ls],'campaigns'=>['active'=>$ca,'paused'=>$cp,'queue'=>$sq],'pmta'=>true]);
|
|
break;
|
|
case 'seed_test':
|
|
if($rate>=$MX)die(json_encode(['error'=>"Rate: $rate/$MX"]));
|
|
$to=$_POST['to']??$_GET['to']??'';
|
|
$su=$_POST['subject']??$_GET['subject']??'Test '.date('H:i');
|
|
$ht=$_POST['html']??$_GET['html']??'<p>Test</p>';
|
|
$fn=$_POST['from_name']??$_GET['from_name']??'WEVAL';
|
|
$me=$_POST['method']??$_GET['method']??'PMTA_Direct';
|
|
$li=min((int)($_POST['limit']??$_GET['limit']??1),10);
|
|
if(!$to)die(json_encode(['error'=>'to required']));
|
|
$rcpts=array_slice(array_map('trim',explode(',',$to)),0,$li);
|
|
$res=[];
|
|
foreach($rcpts as $r) {
|
|
$sr = v2e_send($r, $su, $ht, $me, $fn);
|
|
$ok = !empty($sr['sent']) || !empty($sr['ok']);
|
|
$res[] = ['to'=>$r,'method'=>$me,'status'=>$ok?'sent':'error','tracking_id'=>$sr['tracking_id']??'','response'=>$sr['detail']['response']??($sr['error']??'')];
|
|
if($ok) file_put_contents($rf, ++$rate);
|
|
}
|
|
echo json_encode(['ok'=>1,'method'=>$me,'results'=>$res,'rate'=>"$rate/$MX"]);
|
|
break;
|
|
case 'seed_check':
|
|
$rc=[];foreach($db->query("SELECT sender_email,recipient_email,recipient_isp,subject,status,created_at FROM graph_send_log ORDER BY created_at DESC LIMIT 10") as $r)$rc[]=$r;
|
|
echo json_encode(['ok'=>1,'recent'=>$rc]);break;
|
|
case 'campaign_pause':
|
|
$id=(int)($_POST['campaign_id']??$_GET['campaign_id']??0);
|
|
if($id)$db->prepare("UPDATE campaigns SET status='paused' WHERE id=?")->execute([$id]);
|
|
else $db->exec("UPDATE campaigns SET status='paused' WHERE status IN('sending','active')");
|
|
echo json_encode(['ok'=>1,'paused'=>true]);break;
|
|
case 'campaign_resume':
|
|
$id=(int)($_POST['campaign_id']??$_GET['campaign_id']??0);
|
|
if(!$id)die(json_encode(['error'=>'id']));
|
|
$db->prepare("UPDATE campaigns SET status='active' WHERE id=?")->execute([$id]);
|
|
echo json_encode(['ok'=>1,'resumed'=>$id]);break;
|
|
case 'campaigns_list':
|
|
$c=[];foreach($db->query("SELECT id,name,status,created_at FROM campaigns ORDER BY id DESC LIMIT 30") as $r)$c[]=$r;
|
|
echo json_encode(['ok'=>1,'campaigns'=>$c]);break;
|
|
case 'auto_toggle':
|
|
$f='/tmp/wevads_auto_mode';
|
|
if(file_exists($f)){unlink($f);echo json_encode(['ok'=>1,'auto_mode'=>false]);}
|
|
else{file_put_contents($f,date('c'));echo json_encode(['ok'=>1,'auto_mode'=>true]);}
|
|
break;
|
|
default:
|
|
echo json_encode(['actions'=>['status','seed_test','seed_check','campaign_pause','campaign_resume','campaigns_list','auto_toggle']]);
|
|
}
|