diff --git a/.gitignore b/.gitignore index 34c1f77..a493424 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,8 @@ LDAP_FEATURE.md # Documentation and Tests tests/ docs/ +amnezia-web-panel.code-workspace +restore_local.php +test_protocols.php +scripts/regen_qr.php +scripts/test_xray_install.sh diff --git a/inc/InstallProtocolManager.php b/inc/InstallProtocolManager.php index f4abf95..f0d4bbe 100644 --- a/inc/InstallProtocolManager.php +++ b/inc/InstallProtocolManager.php @@ -241,7 +241,7 @@ class InstallProtocolManager return self::runScript($server, $protocol, 'detect', $options); } - private static function install(VpnServer $server, array $protocol, array $options = []): array + public static function install(VpnServer $server, array $protocol, array $options = []): array { $engine = self::getEngine($protocol); $serverId = $server->getId(); diff --git a/public/index.php b/public/index.php index f7e27f3..f5a0206 100644 --- a/public/index.php +++ b/public/index.php @@ -2199,6 +2199,39 @@ Router::post('/api/clients/{id}/restore', function ($params) { } }); +// API: Delete client +Router::delete('/api/clients/{id}/delete', function ($params) { + header('Content-Type: application/json'); + + $user = JWT::requireAuth(); + if (!$user) + return; + + $clientId = (int) $params['id']; + + try { + $client = new VpnClient($clientId); + $clientData = $client->getData(); + + // Check ownership + if ($clientData['user_id'] != $user['id'] && ($user['role'] ?? '') !== 'admin') { + http_response_code(403); + echo json_encode(['error' => 'Forbidden']); + return; + } + + if ($client->delete()) { + echo json_encode(['success' => true, 'message' => 'Client deleted']); + } else { + http_response_code(500); + echo json_encode(['error' => 'Failed to delete client']); + } + } catch (Exception $e) { + http_response_code(404); + echo json_encode(['error' => 'Client not found']); + } +}); + // API: Get server metrics Router::get('/api/servers/{id}/metrics', function ($params) { header('Content-Type: application/json'); diff --git a/scripts/debug_xray_stats.php b/scripts/debug_xray_stats.php new file mode 100644 index 0000000..25d76eb --- /dev/null +++ b/scripts/debug_xray_stats.php @@ -0,0 +1,35 @@ +getData(); + +if (!$data) { + die("Client not found\n"); +} + +echo "Client Name: " . $data['name'] . "\n"; +echo "Config: " . substr($data['config'], 0, 50) . "...\n"; + +echo "Running syncStats()...\n"; +try { + $res = $client->syncStats(); + echo "Sync Result: " . ($res ? 'TRUE' : 'FALSE') . "\n"; + + // Check DB + $fresh = new VpnClient($clientId); + $d = $fresh->getData(); + echo "Bytes Sent: " . $d['bytes_sent'] . "\n"; + echo "Bytes Recv: " . $d['bytes_received'] . "\n"; + echo "Last Handshake: " . $d['last_handshake'] . "\n"; + +} catch (Exception $e) { + echo "Error: " . $e->getMessage() . "\n"; +}