91 lines
4.3 KiB
PHP
Executable File
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']]);
|
|
}
|