feat: Реализован API для удаления клиентов, добавлен отладочный скрипт статистики XRay и метод InstallProtocolManager::install сделан публичным.
This commit is contained in:
@@ -61,3 +61,8 @@ LDAP_FEATURE.md
|
|||||||
# Documentation and Tests
|
# Documentation and Tests
|
||||||
tests/
|
tests/
|
||||||
docs/
|
docs/
|
||||||
|
amnezia-web-panel.code-workspace
|
||||||
|
restore_local.php
|
||||||
|
test_protocols.php
|
||||||
|
scripts/regen_qr.php
|
||||||
|
scripts/test_xray_install.sh
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ class InstallProtocolManager
|
|||||||
return self::runScript($server, $protocol, 'detect', $options);
|
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);
|
$engine = self::getEngine($protocol);
|
||||||
$serverId = $server->getId();
|
$serverId = $server->getId();
|
||||||
|
|||||||
@@ -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
|
// API: Get server metrics
|
||||||
Router::get('/api/servers/{id}/metrics', function ($params) {
|
Router::get('/api/servers/{id}/metrics', function ($params) {
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
require_once __DIR__ . '/../inc/Config.php';
|
||||||
|
require_once __DIR__ . '/../inc/DB.php';
|
||||||
|
require_once __DIR__ . '/../inc/VpnClient.php';
|
||||||
|
require_once __DIR__ . '/../inc/VpnServer.php';
|
||||||
|
|
||||||
|
$pdo = DB::conn();
|
||||||
|
$clientId = 4;
|
||||||
|
|
||||||
|
echo "Loading client $clientId...\n";
|
||||||
|
$client = new VpnClient($clientId);
|
||||||
|
$data = $client->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";
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user