Files
html/api/wevads-p2-api.php
2026-04-12 22:57:03 +02:00

62 lines
4.6 KiB
PHP

<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
$token = $_GET['token'] ?? $_POST['token'] ?? '';
if (!in_array($token, ['WEVADS2026','ETHICA_API_2026_SECURE'])) die(json_encode(['error'=>'auth']));
$action = $_GET['action'] ?? '';
function s95db() { static $p; if(!$p) $p=new PDO("pgsql:host=10.1.0.3;port=5432;dbname=adx_system","admin","admin123"); $p->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); return $p; }
function qa($db,$q){return $db->query($q)->fetchAll(PDO::FETCH_ASSOC);}
function q1($db,$q){return $db->query($q)->fetch(PDO::FETCH_ASSOC);}
function ok($d){echo json_encode(array_merge(['ok'=>1],$d));exit;}
switch($action) {
case 'o365':
$db=s95db();
$by_status=qa($db,"SELECT status, COUNT(*) as cnt FROM admin.office_accounts GROUP BY status ORDER BY cnt DESC");
$total=(int)q1($db,"SELECT COUNT(*) as c FROM admin.office_accounts")['c'];
$tenants=[]; try{$tenants=qa($db,"SELECT SUBSTRING(admin_email FROM '@(.+)$') as tenant, status, COUNT(*) as cnt FROM admin.office_accounts GROUP BY 1,2 ORDER BY cnt DESC LIMIT 20");}catch(\Exception $e){}
$graph_status=qa($db,"SELECT can_send, COUNT(*) as cnt FROM admin.graph_accounts GROUP BY can_send");
$recent=[]; try{$recent=qa($db,"SELECT admin_email, status FROM admin.office_accounts ORDER BY id DESC LIMIT 15");}catch(\Exception $e){}
ok(['total'=>$total,'by_status'=>$by_status,'tenants'=>$tenants,'graph'=>$graph_status,'recent'=>$recent]);
break;
case 'dns':
$domain=$_GET['domain']??'weval-consulting.com';
$spf=dns_get_record($domain,DNS_TXT);$spf_ok=false;$spf_val='';
foreach($spf as $r){if(isset($r['txt'])&&strpos($r['txt'],'v=spf1')!==false){$spf_ok=true;$spf_val=$r['txt'];}}
$mx=dns_get_record($domain,DNS_MX);$mx_list=[];foreach($mx as $r)$mx_list[]=['host'=>$r['target']??'','pri'=>$r['pri']??0];
$dkim=@dns_get_record("default._domainkey.$domain",DNS_TXT);$dkim_ok=!empty($dkim);
$dmarc=@dns_get_record("_dmarc.$domain",DNS_TXT);$dmarc_ok=false;$dmarc_val='';
foreach(($dmarc?:[]) as $r){if(isset($r['txt'])&&strpos($r['txt'],'v=DMARC1')!==false){$dmarc_ok=true;$dmarc_val=$r['txt'];}}
$a=dns_get_record($domain,DNS_A);$ips=[];foreach($a as $r)$ips[]=$r['ip']??'';
$score=($spf_ok?25:0)+($dkim_ok?25:0)+($dmarc_ok?25:0)+(!empty($mx_list)?25:0);
$domains=['weval-consulting.com','wevads.com','wevup.app','culturellemejean.charity'];
ok(['domain'=>$domain,'score'=>$score,'spf'=>['ok'=>$spf_ok,'value'=>$spf_val],'dkim'=>['ok'=>$dkim_ok],'dmarc'=>['ok'=>$dmarc_ok,'value'=>$dmarc_val],'mx'=>$mx_list,'ips'=>$ips,'available_domains'=>$domains]);
break;
case 'validation':
$db=s95db();
$total=0;$with_email=0;$with_phone=0;$verified=0;
try{
$total=(int)q1($db,"SELECT COUNT(*) as c FROM ethica.medecins_validated")['c'];
$with_email=(int)q1($db,"SELECT COUNT(*) as c FROM ethica.medecins_validated WHERE email IS NOT NULL AND email!=''")['c'];
$with_phone=(int)q1($db,"SELECT COUNT(*) as c FROM ethica.medecins_validated WHERE telephone IS NOT NULL AND telephone!=''")['c'];
$verified=(int)q1($db,"SELECT COUNT(*) as c FROM ethica.medecins_validated WHERE google_verified=true")['c'];
}catch(\Exception $e){}
$by_country=[]; try{$by_country=qa($db,"SELECT pays as country, COUNT(*) as total, COUNT(CASE WHEN email IS NOT NULL AND email!='' THEN 1 END) as emails, COUNT(CASE WHEN google_verified=true THEN 1 END) as verified FROM ethica.medecins_validated GROUP BY pays ORDER BY COUNT(*) DESC");}catch(\Exception $e){}
$quality_score=$total>0?round((($with_email+$with_phone+$verified)/(3*$total))*100,1):0;
$validation_log=[]; try{$validation_log=qa($db,"SELECT source, status, records_found, created_at FROM ethica.scraping_log ORDER BY created_at DESC LIMIT 10");}catch(\Exception $e){}
// Generic contacts validation
$send_contacts=0;$weval_leads=0;
try{$send_contacts=(int)q1($db,"SELECT COUNT(*) as c FROM admin.send_contacts")['c'];}catch(\Exception $e){}
try{$weval_leads=(int)q1($db,"SELECT COUNT(*) as c FROM admin.weval_leads")['c'];}catch(\Exception $e){}
ok(['total'=>$total,'with_email'=>$with_email,'with_phone'=>$with_phone,'verified'=>$verified,
'quality_score'=>$quality_score,'email_rate'=>$total>0?round(($with_email/$total)*100,1):0,
'verify_rate'=>$total>0?round(($verified/$total)*100,1):0,
'by_country'=>$by_country,'validation_log'=>$validation_log,
'other_sources'=>['send_contacts'=>$send_contacts,'weval_leads'=>$weval_leads]]);
break;
default: ok(['actions'=>['o365','dns','validation']]);
}