Files
wevads-platform/scripts/api_mta.php
2026-02-26 04:53:11 +01:00

91 lines
4.3 KiB
PHP
Executable File

<?php
require_once("/opt/wevads/config/credentials.php");
header('Content-Type: application/json');
$pdo = get_pdo("adx_system");
$action = $_GET['action'] ?? $_POST['action'] ?? '';
switch($action) {
case 'register':
$ip = $_POST['ip'] ?? '';
$hostname = $_POST['hostname'] ?? '';
$provider = $_POST['provider'] ?? 'Huawei Cloud';
$name = $_POST['name'] ?? 'mta-' . substr(md5($ip), 0, 8);
if (empty($ip)) {
echo json_encode(['success' => false, 'error' => 'IP required']);
break;
}
$check = $pdo->prepare("SELECT id FROM admin.mta_servers WHERE main_ip = ?");
$check->execute([$ip]);
if ($check->fetch()) {
echo json_encode(['success' => true, 'message' => 'Already registered', 'ip' => $ip]);
break;
}
$providerMap = ['Huawei Cloud'=>1, 'Hetzner'=>3, 'OVH'=>4, 'Vultr'=>5, 'Scaleway'=>2];
$provId = $providerMap[$provider] ?? 0;
$stmt = $pdo->prepare("INSERT INTO admin.mta_servers
(provider_id, provider_name, status, name, ssh_login_type, ssh_username, ssh_port, old_ssh_port, ssh_connectivity_status, expiration_date, created_by, created_date, host_name, main_ip, ips_count, is_installed)
VALUES (?, ?, 'Activated', ?, 'password', 'root', 49222, 49222, 'Not Checked', (NOW() + INTERVAL '30 days')::date, 'n8n-auto', NOW(), ?, ?, 1, false)");
$stmt->execute([$provId, $provider, $name, $hostname ?: 'mail.'.$name.'.com', $ip]);
$serverId = $pdo->lastInsertId();
// Auto-créer le VMTA
$vmtaName = str_replace('.', '_', $ip);
$vmtaDomain = $_POST['domain'] ?? '';
$pdo->prepare("INSERT INTO admin.servers_vmtas (mta_server_id, mta_server_name, status, type, name, ip, domain, created_by, created_date) VALUES (?, ?, 'Activated', 'Default', ?, ?, ?, 'n8n-auto', NOW())")->execute([$serverId, $name, $vmtaName, $ip, $vmtaDomain]);
echo json_encode(['success'=>true, 'registered'=>true, 'server_id'=>$serverId, 'ip'=>$ip, 'name'=>$name]);
break;
case 'provision':
// Trigger N8N webhook pour créer un serveur
$provider = $_POST['provider'] ?? 'hetzner';
$count = intval($_POST['count'] ?? 1);
$region = $_POST['region'] ?? '';
$webhook = 'http://127.0.0.1:5678/webhook/huawei-provision';
$payload = json_encode(['provider'=>$provider, 'count'=>$count, 'region'=>$region]);
$ch = curl_init($webhook);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10
]);
$resp = curl_exec($ch);
curl_close($ch);
echo json_encode(['success'=>true, 'message'=>"Provisioning $count $provider server(s)", 'n8n_response'=>$resp]);
break;
case 'stats':
$total = $pdo->query("SELECT COUNT(*) FROM admin.mta_servers")->fetchColumn();
$active = $pdo->query("SELECT COUNT(*) FROM admin.mta_servers WHERE status='Activated'")->fetchColumn();
$byProvider = $pdo->query("SELECT provider_name, COUNT(*) as cnt, SUM(CASE WHEN status='Activated' THEN 1 ELSE 0 END) as active FROM admin.mta_servers GROUP BY provider_name")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['success'=>true, 'total'=>$total, 'active'=>$active, 'by_provider'=>$byProvider]);
break;
case 'list':
$servers = $pdo->query("SELECT id, main_ip, host_name, provider_name, status, name, ssh_connectivity_status, expiration_date FROM admin.mta_servers ORDER BY id DESC LIMIT 50")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode(['success'=>true, 'servers'=>$servers]);
break;
case 'delete':
$id = intval($_POST['id'] ?? 0);
if ($id > 0) {
$pdo->prepare("UPDATE admin.mta_servers SET status='Deleted' WHERE id=?")->execute([$id]);
echo json_encode(['success'=>true, 'deleted'=>$id]);
} else {
echo json_encode(['success'=>false, 'error'=>'ID required']);
}
break;
default:
echo json_encode(['success'=>false, 'error'=>'Unknown action', 'available'=>['register','provision','stats','list','delete']]);
}