214 lines
7.9 KiB
PHP
Executable File
214 lines
7.9 KiB
PHP
Executable File
|
|
<?php
|
|
/**
|
|
* DATA INJECTOR
|
|
* Import real data: emails, domains, offers, accounts
|
|
*/
|
|
header('Content-Type: application/json');
|
|
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123", [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
|
|
|
|
class DataInjector {
|
|
private $pdo;
|
|
|
|
public function __construct($pdo) { $this->pdo = $pdo; }
|
|
|
|
// Import Email List (CSV: email,first_name,last_name,country)
|
|
public function importEmails($csvData, $listName = 'imported') {
|
|
$lines = explode("\n", trim($csvData));
|
|
$imported = 0;
|
|
$duplicates = 0;
|
|
|
|
foreach ($lines as $line) {
|
|
$parts = str_getcsv($line);
|
|
if (count($parts) < 1 || !filter_var($parts[0], FILTER_VALIDATE_EMAIL)) continue;
|
|
|
|
try {
|
|
$this->pdo->prepare("INSERT INTO admin.data_profiles (email, first_name, last_name, country) VALUES (?, ?, ?, ?) ON CONFLICT (email) DO NOTHING")
|
|
->execute([
|
|
strtolower(trim($parts[0])),
|
|
$parts[1] ?? '',
|
|
$parts[2] ?? '',
|
|
$parts[3] ?? ''
|
|
]);
|
|
$imported++;
|
|
} catch (Exception $e) {
|
|
$duplicates++;
|
|
}
|
|
}
|
|
|
|
return ['success' => true, 'imported' => $imported, 'duplicates' => $duplicates];
|
|
}
|
|
|
|
// Import Domains
|
|
public function importDomains($domains, $pool = 'main') {
|
|
$imported = 0;
|
|
$domainList = is_array($domains) ? $domains : explode("\n", trim($domains));
|
|
|
|
foreach ($domainList as $domain) {
|
|
$domain = trim($domain);
|
|
if (empty($domain)) continue;
|
|
|
|
$this->pdo->prepare("INSERT INTO admin.rotation_domains (domain, pool, status) VALUES (?, ?, 'active') ON CONFLICT DO NOTHING")
|
|
->execute([$domain, $pool]);
|
|
$imported++;
|
|
}
|
|
|
|
return ['success' => true, 'imported' => $imported];
|
|
}
|
|
|
|
// Import IPs
|
|
public function importIPs($ips, $provider = 'huawei') {
|
|
$imported = 0;
|
|
$ipList = is_array($ips) ? $ips : explode("\n", trim($ips));
|
|
|
|
foreach ($ipList as $ip) {
|
|
$ip = trim($ip);
|
|
if (!filter_var($ip, FILTER_VALIDATE_IP)) continue;
|
|
|
|
$this->pdo->prepare("INSERT INTO admin.ip_pool (ip_address, provider, status) VALUES (?, ?, 'active') ON CONFLICT DO NOTHING")
|
|
->execute([$ip, $provider]);
|
|
$imported++;
|
|
}
|
|
|
|
return ['success' => true, 'imported' => $imported];
|
|
}
|
|
|
|
// Import O365 Accounts (CSV: email,password,tenant)
|
|
public function importO365($csvData) {
|
|
$lines = explode("\n", trim($csvData));
|
|
$imported = 0;
|
|
|
|
foreach ($lines as $line) {
|
|
$parts = str_getcsv($line);
|
|
if (count($parts) < 2) continue;
|
|
|
|
$this->pdo->prepare("INSERT INTO admin.o365_accounts (email, password, tenant_id, status) VALUES (?, ?, ?, 'active') ON CONFLICT DO NOTHING")
|
|
->execute([$parts[0], $parts[1], $parts[2] ?? '']);
|
|
$imported++;
|
|
}
|
|
|
|
return ['success' => true, 'imported' => $imported];
|
|
}
|
|
|
|
// Import Offers
|
|
public function importOffer($data) {
|
|
$this->pdo->prepare("INSERT INTO admin.offers (external_id, name, vertical, payout, geo_targets, tracking_url, preview_url, status) VALUES (?, ?, ?, ?, ?, ?, ?, 'active')")
|
|
->execute([
|
|
$data['offer_id'] ?? uniqid(),
|
|
$data['name'],
|
|
$data['vertical'] ?? 'general',
|
|
$data['payout'] ?? 0,
|
|
json_encode($data['geo'] ?? []),
|
|
$data['tracking_url'] ?? '',
|
|
$data['preview_url'] ?? ''
|
|
]);
|
|
return ['success' => true, 'id' => $this->pdo->lastInsertId()];
|
|
}
|
|
|
|
// Import PMTA Servers
|
|
public function importServers($servers) {
|
|
$imported = 0;
|
|
|
|
foreach ($servers as $server) {
|
|
$this->pdo->prepare("INSERT INTO admin.server_monitor (ip_address, provider, cloud_instance_id, status, cost_per_hour) VALUES (?, ?, ?, 'active', ?) ON CONFLICT DO NOTHING")
|
|
->execute([
|
|
$server['ip'],
|
|
$server['provider'] ?? 'huawei',
|
|
$server['instance_id'] ?? '',
|
|
$server['cost'] ?? 0.05
|
|
]);
|
|
$imported++;
|
|
}
|
|
|
|
return ['success' => true, 'imported' => $imported];
|
|
}
|
|
|
|
// Import Seed Inboxes
|
|
public function importSeeds($csvData) {
|
|
$lines = explode("\n", trim($csvData));
|
|
$imported = 0;
|
|
|
|
foreach ($lines as $line) {
|
|
$parts = str_getcsv($line);
|
|
if (count($parts) < 4) continue;
|
|
|
|
$this->pdo->prepare("INSERT INTO admin.seed_inboxes (email, password, imap_host, isp, is_active) VALUES (?, ?, ?, ?, true) ON CONFLICT DO NOTHING")
|
|
->execute([$parts[0], $parts[1], $parts[2], $parts[3]]);
|
|
$imported++;
|
|
}
|
|
|
|
return ['success' => true, 'imported' => $imported];
|
|
}
|
|
|
|
// Bulk Import from JSON
|
|
public function bulkImport($jsonData) {
|
|
$data = is_array($jsonData) ? $jsonData : json_decode($jsonData, true);
|
|
$results = [];
|
|
|
|
if (!empty($data['emails'])) {
|
|
$results['emails'] = $this->importEmails(implode("\n", $data['emails']));
|
|
}
|
|
if (!empty($data['domains'])) {
|
|
$results['domains'] = $this->importDomains($data['domains']);
|
|
}
|
|
if (!empty($data['ips'])) {
|
|
$results['ips'] = $this->importIPs($data['ips']);
|
|
}
|
|
if (!empty($data['offers'])) {
|
|
foreach ($data['offers'] as $offer) {
|
|
$results['offers'][] = $this->importOffer($offer);
|
|
}
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
public function getStats() {
|
|
return [
|
|
'emails' => $this->pdo->query("SELECT COUNT(*) FROM admin.data_profiles")->fetchColumn(),
|
|
'domains' => $this->pdo->query("SELECT COUNT(*) FROM admin.rotation_domains")->fetchColumn(),
|
|
'ips' => $this->pdo->query("SELECT COUNT(*) FROM admin.ip_pool")->fetchColumn(),
|
|
'o365_accounts' => $this->pdo->query("SELECT COUNT(*) FROM admin.o365_accounts")->fetchColumn(),
|
|
'offers' => $this->pdo->query("SELECT COUNT(*) FROM admin.offers")->fetchColumn(),
|
|
'servers' => $this->pdo->query("SELECT COUNT(*) FROM admin.server_monitor")->fetchColumn(),
|
|
'seeds' => $this->pdo->query("SELECT COUNT(*) FROM admin.seed_inboxes")->fetchColumn()
|
|
];
|
|
}
|
|
}
|
|
|
|
$injector = new DataInjector($pdo);
|
|
$action = $_POST['action'] ?? $_GET['action'] ?? '';
|
|
|
|
switch ($action) {
|
|
case 'emails':
|
|
echo json_encode($injector->importEmails($_POST['data'], $_POST['list_name'] ?? 'imported'));
|
|
break;
|
|
case 'domains':
|
|
echo json_encode($injector->importDomains($_POST['data'], $_POST['pool'] ?? 'main'));
|
|
break;
|
|
case 'ips':
|
|
echo json_encode($injector->importIPs($_POST['data'], $_POST['provider'] ?? 'huawei'));
|
|
break;
|
|
case 'o365':
|
|
echo json_encode($injector->importO365($_POST['data']));
|
|
break;
|
|
case 'offer':
|
|
echo json_encode($injector->importOffer($_POST));
|
|
break;
|
|
case 'servers':
|
|
echo json_encode($injector->importServers(json_decode($_POST['data'], true)));
|
|
break;
|
|
case 'seeds':
|
|
echo json_encode($injector->importSeeds($_POST['data']));
|
|
break;
|
|
case 'bulk':
|
|
echo json_encode($injector->bulkImport($_POST['data']));
|
|
break;
|
|
case 'stats':
|
|
echo json_encode($injector->getStats());
|
|
break;
|
|
default:
|
|
echo json_encode(['name' => 'Data Injector', 'actions' => ['emails','domains','ips','o365','offer','servers','seeds','bulk','stats']]);
|
|
}
|
|
|