Files
urbackup/front/server_test.ajax.php
T
2026-08-31 10:10:30 +02:00

67 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
/**
* AJAX endpoint for testing UrBackup API.
*
* This endpoint updates the server monitoring fields (last_api_status,
* last_api_message, last_api_check), so it requires UPDATE right and
* only accepts POST requests (GET requests must not trigger state changes).
*/
use GlpiPlugin\Urbackup\Server;
use GlpiPlugin\Urbackup\UrbackupApiClient;
if (!defined('GLPI_ROOT')) {
define('GLPI_ROOT', dirname(__DIR__, 4));
}
include_once GLPI_ROOT . '/inc/includes.php';
header("Content-Type: application/json; charset=UTF-8");
Html::header_nocache();
Session::checkLoginUser();
if (($_SERVER['REQUEST_METHOD'] ?? '') !== 'POST') {
http_response_code(405);
echo json_encode(['success' => false, 'message' => __('Method not allowed', 'urbackup')]);
exit;
}
$server_id = (int) ($_POST['id'] ?? 0);
if ($server_id <= 0) {
echo json_encode(['success' => false, 'message' => __('Invalid server ID', 'urbackup')]);
exit;
}
$server = new Server();
try {
// Entity-aware authorization: checks UPDATE right AND access to the server's entity
// (returning the server on success, throwing otherwise).
$server->check($server_id, UPDATE);
} catch (Throwable $e) {
http_response_code(403);
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
exit;
}
try {
$client = new UrbackupApiClient($server);
$result = $client->testConnection();
$server->update([
'id' => $server_id,
'last_api_status' => $result['success'] ? 1 : 0,
'last_api_message' => $result['message'],
'last_api_check' => date('Y-m-d H:i:s'),
]);
echo json_encode($result);
} catch (Throwable $e) {
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}