110 lines
3.0 KiB
PHP
110 lines
3.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* -------------------------------------------------------------------------
|
|
* UrBackup plugin for GLPI
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
namespace GlpiPlugin\Urbackup\Controller;
|
|
|
|
use GlpiPlugin\Urbackup\Server;
|
|
use GlpiPlugin\Urbackup\Profile;
|
|
use GlpiPlugin\Urbackup\UrbackupApiClient;
|
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
use Symfony\Component\Routing\Annotation\Route;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
use Html;
|
|
use Session;
|
|
use Search;
|
|
|
|
class ServerController extends AbstractController
|
|
{
|
|
#[Route('/plugin/urbackup/servers', name: 'urbackup_server_list', methods: ['GET'])]
|
|
public function listServers(): void
|
|
{
|
|
if (!Server::canView()) {
|
|
Html::displayRightError();
|
|
}
|
|
|
|
Html::header(
|
|
Server::getTypeName(Session::getPluralNumber()),
|
|
$_SERVER['PHP_SELF'],
|
|
'admin',
|
|
Server::class
|
|
);
|
|
|
|
Search::show(Server::class);
|
|
|
|
Html::footer();
|
|
}
|
|
|
|
#[Route('/plugin/urbackup/server/{id}', name: 'urbackup_server_show', methods: ['GET'], requirements: ['id' => '\d+'])]
|
|
public function showServer(int $id): void
|
|
{
|
|
$server = new Server();
|
|
|
|
if ($id > 0) {
|
|
$server->check($id, READ);
|
|
} else {
|
|
$server->check(-1, CREATE);
|
|
$server->getEmpty();
|
|
}
|
|
|
|
$server->display(['id' => $id]);
|
|
}
|
|
|
|
#[Route('/plugin/urbackup/server/test/{id}', name: 'urbackup_server_test', methods: ['POST', 'GET'])]
|
|
public function testConnection(int $id = 0): JsonResponse
|
|
{
|
|
if (!Profile::canCurrentUser(READ)) {
|
|
return new JsonResponse([
|
|
'success' => false,
|
|
'message' => 'No permission',
|
|
], 403);
|
|
}
|
|
|
|
if ($id <= 0) {
|
|
$id = (int) ($_POST['id'] ?? $_GET['id'] ?? 0);
|
|
}
|
|
|
|
if ($id <= 0) {
|
|
return new JsonResponse([
|
|
'success' => false,
|
|
'message' => 'Invalid server ID',
|
|
], 400);
|
|
}
|
|
|
|
$server = new Server();
|
|
|
|
if (!$server->getFromDB($id)) {
|
|
return new JsonResponse([
|
|
'success' => false,
|
|
'message' => 'Server not found',
|
|
], 404);
|
|
}
|
|
|
|
try {
|
|
$client = new UrbackupApiClient($server);
|
|
$result = $client->testConnection();
|
|
|
|
$server->update([
|
|
'id' => $id,
|
|
'last_api_status' => $result['success'] ? 1 : 0,
|
|
'last_api_message' => $result['message'],
|
|
'last_api_check' => date('Y-m-d H:i:s'),
|
|
]);
|
|
|
|
return new JsonResponse($result);
|
|
} catch (Throwable $e) {
|
|
return new JsonResponse([
|
|
'success' => false,
|
|
'message' => $e->getMessage(),
|
|
], 500);
|
|
}
|
|
}
|
|
}
|