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

67 lines
4.5 KiB
PHP
Executable File

<?php
require_once("/opt/wevads/config/credentials.php");
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$db = pg_connect("host=localhost dbname=adx_system user=admin password=".WEVADS_DB_PASS);
pg_query($db,"SET search_path TO admin");
$data = json_decode(file_get_contents('php://input'),true) ?: array_merge($_GET,$_POST);
$action = $data['action'] ?? $_GET['action'] ?? 'status';
switch($action) {
case 'activate_batch':
// Activate N pending accounts for a provider with unique keys
$provider = $data['provider'] ?? '';
$keys = $data['keys'] ?? []; // Array of API keys
if(!$provider||empty($keys)){echo json_encode(['error'=>'provider + keys[] required']);break;}
$activated = [];
foreach($keys as $key) {
$key = pg_escape_string($db, $key);
$r = pg_query($db, "UPDATE ia_provider_accounts SET api_key='$key', status='active', key_created_at=NOW(), updated_at=NOW() WHERE id=(SELECT id FROM ia_provider_accounts WHERE provider_name='$provider' AND status='pending' ORDER BY id LIMIT 1) RETURNING id, persona_id");
$row = pg_fetch_assoc($r);
if($row) $activated[] = $row;
}
echo json_encode(['status'=>'success','provider'=>$provider,'activated'=>count($activated),'accounts'=>$activated]);
break;
case 'activate_one':
// Quick: activate first pending for provider
$provider = $data['provider'] ?? '';
$key = pg_escape_string($db, $data['api_key'] ?? '');
if(!$provider||!$key){echo json_encode(['error'=>'provider + api_key required']);break;}
$r = pg_query($db, "UPDATE ia_provider_accounts SET api_key='$key', status='active', key_created_at=NOW() WHERE id=(SELECT id FROM ia_provider_accounts WHERE provider_name='$provider' AND status='pending' ORDER BY id LIMIT 1) RETURNING id");
$row = pg_fetch_assoc($r);
echo json_encode($row ? ['status'=>'success','id'=>$row['id'],'provider'=>$provider] : ['error'=>'No pending account']);
break;
case 'clone_key':
// Use SAME key for ALL pending accounts of a provider (when provider allows)
$provider = $data['provider'] ?? '';
$key = pg_escape_string($db, $data['api_key'] ?? '');
$limit = (int)($data['limit'] ?? 178); // How many to activate
if(!$provider||!$key){echo json_encode(['error'=>'provider + api_key required']);break;}
$r = pg_query($db, "UPDATE ia_provider_accounts SET api_key='$key', status='active', key_created_at=NOW() WHERE provider_name='$provider' AND status='pending' AND id IN (SELECT id FROM ia_provider_accounts WHERE provider_name='$provider' AND status='pending' ORDER BY id LIMIT $limit) RETURNING id");
$count = pg_affected_rows($r);
echo json_encode(['status'=>'success','provider'=>$provider,'activated'=>$count,'note'=>'Same key cloned - tokens shared across accounts']);
break;
case 'status':
$r = pg_query($db, "SELECT provider_name, COUNT(*) as total, SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) as active, SUM(CASE WHEN status='pending' THEN 1 ELSE 0 END) as pending, SUM(tokens_limit_daily) as budget FROM ia_provider_accounts GROUP BY provider_name ORDER BY SUM(tokens_limit_daily) DESC");
$providers = [];
while($row=pg_fetch_assoc($r)) $providers[] = $row;
$totals = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as total, SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) as active, SUM(CASE WHEN status='pending' THEN 1 ELSE 0 END) as pending, SUM(tokens_limit_daily) as budget, COUNT(DISTINCT provider_name) as providers, COUNT(DISTINCT persona_id) as personas FROM ia_provider_accounts"));
echo json_encode(['status'=>'success','totals'=>$totals,'providers'=>$providers]);
break;
case 'pending_summary':
$r = pg_query($db, "SELECT provider_name, signup_url, COUNT(*) as pending_count FROM ia_provider_accounts WHERE status='pending' AND signup_url IS NOT NULL GROUP BY provider_name, signup_url ORDER BY COUNT(*) DESC");
$summary = [];
while($row=pg_fetch_assoc($r)) $summary[] = $row;
echo json_encode(['status'=>'success','pending'=>$summary,'curl_one'=>"curl -s -X POST 'http://89.167.40.150:5821/api/ia-mass-activate.php' -H 'Content-Type: application/json' -d '{\"action\":\"activate_one\",\"provider\":\"PROVIDER\",\"api_key\":\"KEY\"}'", 'curl_clone'=>"curl -s -X POST 'http://89.167.40.150:5821/api/ia-mass-activate.php' -H 'Content-Type: application/json' -d '{\"action\":\"clone_key\",\"provider\":\"PROVIDER\",\"api_key\":\"KEY\"}'", 'note'=>'clone_key uses same API key for all pending accounts of that provider']);
break;
}