security: Require explicit token for agent downloads
- Remove server_id auto-resolution from validateAndGetToken() - Links in edit.twig now use token instead of server_id - Add agent_token retrieval in ServerController::edit()
This commit is contained in:
parent
6ec03325be
commit
c8d0bc4a40
|
|
@ -15,17 +15,6 @@ class AgentController extends Model
|
||||||
{
|
{
|
||||||
$queryParams = $request->getQueryParams();
|
$queryParams = $request->getQueryParams();
|
||||||
$token = $queryParams['token'] ?? null;
|
$token = $queryParams['token'] ?? null;
|
||||||
$server_id = $queryParams['server_id'] ?? null;
|
|
||||||
|
|
||||||
if (!empty($server_id) && empty($token)) {
|
|
||||||
$stmt = $this->pdo->prepare("SELECT encrypted_token FROM agent_tokens WHERE server_id = :server_id LIMIT 1");
|
|
||||||
$stmt->execute([':server_id' => $server_id]);
|
|
||||||
$result = $stmt->fetch();
|
|
||||||
|
|
||||||
if ($result && !empty($result['encrypted_token'])) {
|
|
||||||
$token = EncryptionHelper::decrypt($result['encrypted_token']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($token)) {
|
if (empty($token)) {
|
||||||
$response->getBody()->write('Token is required');
|
$response->getBody()->write('Token is required');
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,11 @@ class ServerController extends Model
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
$groups = $stmt->fetchAll();
|
$groups = $stmt->fetchAll();
|
||||||
|
|
||||||
|
$stmt = $this->pdo->prepare("SELECT encrypted_token FROM agent_tokens WHERE server_id = :server_id");
|
||||||
|
$stmt->execute([':server_id' => $id]);
|
||||||
|
$tokenRow = $stmt->fetch();
|
||||||
|
$decryptedToken = $tokenRow ? \App\Utils\EncryptionHelper::decrypt($tokenRow['encrypted_token']) : null;
|
||||||
|
|
||||||
if (!$server) {
|
if (!$server) {
|
||||||
return $response->withHeader('Location', '/servers')->withStatus(302);
|
return $response->withHeader('Location', '/servers')->withStatus(302);
|
||||||
}
|
}
|
||||||
|
|
@ -134,7 +139,8 @@ class ServerController extends Model
|
||||||
$templateData = [
|
$templateData = [
|
||||||
'title' => 'Редактировать сервер',
|
'title' => 'Редактировать сервер',
|
||||||
'server' => $server,
|
'server' => $server,
|
||||||
'groups' => $groups
|
'groups' => $groups,
|
||||||
|
'agent_token' => $decryptedToken
|
||||||
];
|
];
|
||||||
|
|
||||||
return $this->twig->render($response, 'servers/edit.twig', $templateData);
|
return $this->twig->render($response, 'servers/edit.twig', $templateData);
|
||||||
|
|
|
||||||
|
|
@ -53,14 +53,15 @@
|
||||||
|
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<h5>Управление агентом мониторинга:</h5>
|
<h5>Управление агентом мониторинга:</h5>
|
||||||
|
{% if agent_token %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4 mb-2">
|
<div class="col-md-4 mb-2">
|
||||||
<a href="/agent/install.sh?server_id={{ server.id }}" class="btn btn-outline-primary w-100">
|
<a href="/agent/install.sh?token={{ agent_token }}" class="btn btn-outline-primary w-100">
|
||||||
<i class="fab fa-linux"></i> Агент для Linux
|
<i class="fab fa-linux"></i> Агент для Linux
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 mb-2">
|
<div class="col-md-4 mb-2">
|
||||||
<a href="/agent/install.bat?server_id={{ server.id }}" class="btn btn-outline-info w-100">
|
<a href="/agent/install.bat?token={{ agent_token }}" class="btn btn-outline-info w-100">
|
||||||
<i class="fab fa-windows"></i> Агент для Windows
|
<i class="fab fa-windows"></i> Агент для Windows
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -71,6 +72,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="mt-2">Если вы потеряли доступ к агенту или хотите создать новый токен безопасности, используйте кнопку "Сбросить токен".</p>
|
<p class="mt-2">Если вы потеряли доступ к агенту или хотите создать новый токен безопасности, используйте кнопку "Сбросить токен".</p>
|
||||||
|
{% else %}
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
Токен агента не создан. <a href="/servers/{{ server.id }}/regenerate-token">Создать токен</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue