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

159 lines
6.4 KiB
PHP
Executable File

<?php
require_once("/opt/wevads/config/credentials.php");
header('Content-Type: application/json');
// API: account-creator.php - Arsenal Wevads
try {
$pdo = get_pdo("adx_system");
$db_connected = true;
} catch (PDOException $e) {
$db_connected = false;
$db_error = $e->getMessage();
}
$action = $_GET['action'] ?? $_POST['action'] ?? 'stats';
$service_name = basename(__FILE__, '.php');
// Déterminer la table appropriée basée sur le nom du fichier
$table_map = [
'account-creator' => 'admin.office_accounts',
'ai-copywriter' => 'admin.ai_templates',
'bpms-command-center' => 'admin.bpms_flows',
'captcha-solver' => 'admin.captcha_services',
'cvc-vault' => 'admin.cvc_cards',
'data-manager' => 'admin.data_sources',
'fingerprint-sync' => 'admin.fingerprint_profiles',
'harvest-manager' => 'admin.harvest_jobs',
'lookalike-engine' => 'admin.lookalike_models',
'neural-dom-mutator' => 'admin.dom_mutations',
'pattern-shuffler' => 'admin.patterns',
'phone-generator' => 'admin.phone_numbers',
'scrapping-factory' => 'admin.scraping_jobs',
'seed-cleaner' => 'admin.seed_lists',
'self-healing' => 'admin.self_healing_logs',
'send-factory' => 'admin.send_jobs',
'sms-engine' => 'admin.sms_campaigns',
'sms-templates' => 'admin.sms_templates',
'temp-email' => 'admin.temp_email_accounts',
'trap-detector' => 'admin.trap_detections',
'world-map' => 'admin.geo_locations'
];
$table_name = $table_map[$service_name] ?? 'admin.unified_send_log';
switch($action) {
case 'stats':
if (!$db_connected) {
echo json_encode(['status'=>'error','message'=>'DB failed','service'=>$service_name,'timestamp'=>date('c')]);
break;
}
try {
$stats = [];
$stats['total'] = (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts")->fetchColumn();
$stats['active'] = (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status='Active'")->fetchColumn();
$stats['pending'] = (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status='Pending'")->fetchColumn();
$stats['suspended'] = (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts WHERE status='Suspended' OR status='Blocked'")->fetchColumn();
$stats['tenants'] = (int)$pdo->query("SELECT COUNT(DISTINCT tenant_domain) FROM admin.office_accounts")->fetchColumn();
$stats['with_license'] = (int)$pdo->query("SELECT COUNT(*) FROM admin.office_accounts WHERE has_license=true")->fetchColumn();
$stats['last_created'] = $pdo->query("SELECT MAX(created_date) FROM admin.office_accounts")->fetchColumn();
echo json_encode(['status'=>'success','data'=>$stats,'service'=>$service_name,'table'=>'admin.office_accounts','database'=>'connected','timestamp'=>date('c')]);
} catch (Exception $e) {
echo json_encode(['status'=>'success','data'=>['total'=>0,'note'=>'Query error: '.$e->getMessage()],'service'=>$service_name,'timestamp'=>date('c')]);
}
break;
if (!$db_connected) {
echo json_encode([
'status' => 'error',
'message' => 'Database connection failed',
'service' => $service_name
]);
break;
}
$limit = min(intval($_GET['limit'] ?? 10), 100);
$offset = intval($_GET['offset'] ?? 0);
try {
$stmt = $pdo->prepare("
SELECT * FROM $table_name
ORDER BY created_date DESC
LIMIT :limit OFFSET :offset
");
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode([
'status' => 'success',
'data' => $data,
'count' => count($data),
'service' => $service_name,
'limit' => $limit,
'offset' => $offset
]);
} catch (Exception $e) {
// Table inexistante ou erreur, retourner des données d'exemple
$sample_data = [];
for ($i = 1; $i <= min($limit, 5); $i++) {
$sample_data[] = [
'id' => $i,
'name' => "Sample $service_name item $i",
'status' => 'active',
'created_date' => date('Y-m-d H:i:s', strtotime("-$i hours")),
'note' => 'Sample data - table may not exist'
];
}
echo json_encode([
'status' => 'success',
'data' => $sample_data,
'count' => count($sample_data),
'service' => $service_name,
'warning' => 'Using sample data: ' . $e->getMessage(),
'limit' => $limit,
'offset' => $offset
]);
}
break;
case 'health':
$checks = [
'database' => $db_connected,
'api_endpoint' => true,
'table_exists' => false,
'timestamp' => date('Y-m-d H:i:s')
];
if ($db_connected) {
try {
$stmt = $pdo->query("SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema = 'admin' AND table_name = '" . str_replace('admin.', '', $table_name) . "')");
$checks['table_exists'] = $stmt->fetchColumn();
} catch (Exception $e) {
$checks['table_error'] = $e->getMessage();
}
} else {
$checks['database_error'] = $db_error;
}
echo json_encode([
'status' => $checks['database'] ? ($checks['table_exists'] ? 'healthy' : 'degraded') : 'unhealthy',
'checks' => $checks,
'service' => $service_name,
'recommendation' => $checks['table_exists'] ? 'All good' : 'Consider creating table ' . $table_name
]);
break;
default:
echo json_encode([
'status' => 'error',
'message' => 'Unknown action',
'available_actions' => ['stats', 'list', 'health'],
'service' => $service_name,
'documentation' => '/api/' . $service_name . '.php'
]);
}
?>