From 404ee80d68e9211ec1bf43072150fdbea61d017a Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Fri, 15 Nov 2024 19:01:49 +0100 Subject: [PATCH] refs #1154. API env_vars --- config/services.yaml | 12 +--- docker/xdebug.ini | 5 -- src/Controller/EnvDataController.php | 65 +++++++++++++++++++ .../OgBoot/AbstractOgBootController.php | 4 +- .../OgBoot/PxeBootFile/PostAction.php | 21 +++--- .../OgDhcp/AbstractOgDhcpController.php | 2 + .../UDS/RemoteCalendarSyncUdsAction.php | 2 + src/DependencyInjection/JsonEnvVarLoader.php | 31 +++++++++ src/Service/OgBoot/StatusService.php | 4 +- src/Service/OgDhcp/StatusService.php | 6 +- src/Service/UDS/UDSClient.php | 5 ++ 11 files changed, 129 insertions(+), 28 deletions(-) delete mode 100644 docker/xdebug.ini create mode 100644 src/Controller/EnvDataController.php create mode 100644 src/DependencyInjection/JsonEnvVarLoader.php diff --git a/config/services.yaml b/config/services.yaml index 62e58a2..0987229 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -4,22 +4,16 @@ imports: parameters: services: + App\DependencyInjection\JsonEnvVarLoader: + tags: ['container.env_var_loader'] + _defaults: autowire: true # Automatically injects dependencies in your services. autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. - bind: - $ogBootApiUrl: '%env(OGBOOT_API_URL)%' - $ogDhcpApiUrl: '%env(OGDHCP_API_URL)%' - $udsAPIurl: '%env(UDS_URL)%' - $udsAuthLogin: '%env(UDS_AUTH_LOGIN)%' - $udsAuthUsername: '%env(UDS_AUTH_USERNAME)%' - $udsAuthPassword: '%env(UDS_AUTH_PASSWORD)%' - App\: resource: '../src/' exclude: - - '../src/DependencyInjection/' - '../src/Entity/' - '../src/Kernel.php' diff --git a/docker/xdebug.ini b/docker/xdebug.ini deleted file mode 100644 index af39592..0000000 --- a/docker/xdebug.ini +++ /dev/null @@ -1,5 +0,0 @@ -xdebug.mode=debug -xdebug.start_with_request=trigger -xdebug.discover_client_host = 1 -xdebug.client_host=${XDEBUG_CLIENT_HOST} -xdebug.client_port=${XDEBUG_CLIENT_PORT} \ No newline at end of file diff --git a/src/Controller/EnvDataController.php b/src/Controller/EnvDataController.php new file mode 100644 index 0000000..c0a0dae --- /dev/null +++ b/src/Controller/EnvDataController.php @@ -0,0 +1,65 @@ +kernel->getProjectDir(); + + $fileName = $projectDir . DIRECTORY_SEPARATOR . self::ENV_VARS_FILE; + if (!is_file($fileName)) { + throw new \RuntimeException('File not found: '.$fileName); + } + + $content = json_decode(file_get_contents($fileName), true); + + return new JsonResponse(['vars' => $content['vars']]); + } + + #[Route('/env-vars', methods: ['POST'])] + public function updateEnvVars(Request $request): JsonResponse + { + $data = json_decode($request->getContent(), true); + $projectDir = $this->kernel->getProjectDir(); + + $fileName = $projectDir . DIRECTORY_SEPARATOR . self::ENV_VARS_FILE; + + if (!isset($data['vars']) || !is_array($data['vars'])) { + return new JsonResponse(['error' => 'Invalid payload'], Response::HTTP_BAD_REQUEST); + } + + $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + + if ($json === false) { + throw new \RuntimeException('Failed to encode JSON: ' . json_last_error_msg()); + } + + if (file_put_contents($fileName, $json) === false) { + throw new \RuntimeException('Failed to write to file: ' . self::ENV_VARS_FILE); + } + + return new JsonResponse(['message' => 'Variables updated successfully']); + } +} diff --git a/src/Controller/OgBoot/AbstractOgBootController.php b/src/Controller/OgBoot/AbstractOgBootController.php index 7e96b1c..942e757 100644 --- a/src/Controller/OgBoot/AbstractOgBootController.php +++ b/src/Controller/OgBoot/AbstractOgBootController.php @@ -6,6 +6,7 @@ namespace App\Controller\OgBoot; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Attribute\AsController; @@ -20,7 +21,8 @@ use Symfony\Contracts\HttpClient\HttpClientInterface; abstract class AbstractOgBootController extends AbstractController { public function __construct( - protected readonly string $ogBootApiUrl, + #[Autowire(env: 'OG_BOOT_API_URL')] + private string $ogBootApiUrl, protected readonly EntityManagerInterface $entityManager ) { diff --git a/src/Controller/OgBoot/PxeBootFile/PostAction.php b/src/Controller/OgBoot/PxeBootFile/PostAction.php index 506b4b9..01dd970 100644 --- a/src/Controller/OgBoot/PxeBootFile/PostAction.php +++ b/src/Controller/OgBoot/PxeBootFile/PostAction.php @@ -36,23 +36,24 @@ class PostAction extends AbstractOgBootController 'mac' => strtolower($client->getMac()), 'lang' => 'es_ES.UTF_8', 'ip' => $client->getIp(), - 'server_ip' => '192.168.2.4', + //'server_ip' => '192.168.2.4', //rootServer (ogCore) 'router' => $client->getOrganizationalUnit()->getNetworkSettings()->getRouter(), 'netmask' => $client->getOrganizationalUnit()->getNetworkSettings() ? $client->getOrganizationalUnit()->getNetworkSettings()->getNetmask() : '255.255.255.0', 'computer_name' => $client->getName(), 'netiface' => $client->getNetiface(), 'group' => $client->getOrganizationalUnit()->getName(), - 'ogrepo' => $client->getRepository() ? $client->getRepository()->getIpAddress() : '192.168.2.4', - 'oglive' => '192.168.2.4', + 'ogrepo' => $client->getRepository() ? $client->getRepository()->getIp() : '192.168.2.4', + //'ogcore' => 'parametro_consola', + //'oglive' => '192.168.2.4', 'oglog' => '192.168.2.4', - 'ogshare' => '192.168.2.4', - 'oglivedir' => 'ogLive', - 'ogprof' => 'false', + //'ogshare' => '192.168.2.4', + 'oglivedir' => $client->getOgLive()->getFilename(), + 'ogprof' => 'false', // cliente del profesor 'hardprofile' => $client->getHardwareProfile() ? $client->getHardwareProfile()->getDescription() : 'default', - 'ogntp' => $client->getOrganizationalUnit()->getNetworkSettings()?->getNtp(), - 'ogdns' => $client->getOrganizationalUnit()->getNetworkSettings()?->getDns(), - 'ogProxy' => $client->getOrganizationalUnit()->getNetworkSettings()?->getProxy(), - 'ogunit' => '', + 'ogntp' => $client->getOrganizationalUnit()->getNetworkSettings()?->getNtp(), //optional + 'ogdns' => $client->getOrganizationalUnit()->getNetworkSettings()?->getDns(), //optional + 'ogProxy' => $client->getOrganizationalUnit()->getNetworkSettings()?->getProxy(), //optional + // 'ogunit' => '', //eliminar 'resolution' => '788' ]; diff --git a/src/Controller/OgDhcp/AbstractOgDhcpController.php b/src/Controller/OgDhcp/AbstractOgDhcpController.php index 2e4e6f5..9166a1e 100644 --- a/src/Controller/OgDhcp/AbstractOgDhcpController.php +++ b/src/Controller/OgDhcp/AbstractOgDhcpController.php @@ -7,6 +7,7 @@ namespace App\Controller\OgDhcp; use App\Service\Utils\GetIpAddressAndNetmaskFromCIDRService; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Attribute\AsController; @@ -21,6 +22,7 @@ use Symfony\Contracts\HttpClient\HttpClientInterface; abstract class AbstractOgDhcpController extends AbstractController { public function __construct( + #[Autowire(env: 'OG_DHCP_API_URL')] protected readonly string $ogDhcpApiUrl, protected readonly EntityManagerInterface $entityManager, protected readonly GetIpAddressAndNetmaskFromCIDRService $getIpAddressAndNetmaskFromCIDRService diff --git a/src/Controller/UDS/RemoteCalendarSyncUdsAction.php b/src/Controller/UDS/RemoteCalendarSyncUdsAction.php index 019534b..c5ac842 100644 --- a/src/Controller/UDS/RemoteCalendarSyncUdsAction.php +++ b/src/Controller/UDS/RemoteCalendarSyncUdsAction.php @@ -8,6 +8,7 @@ use App\Model\OrganizationalUnitTypes; use App\Service\UDS\UDSClient; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; @@ -16,6 +17,7 @@ class RemoteCalendarSyncUdsAction extends AbstractController { public function __construct( + #[Autowire(env: 'UDS_URL')] private readonly UDSClient $udsClient ) { diff --git a/src/DependencyInjection/JsonEnvVarLoader.php b/src/DependencyInjection/JsonEnvVarLoader.php new file mode 100644 index 0000000..fefa07a --- /dev/null +++ b/src/DependencyInjection/JsonEnvVarLoader.php @@ -0,0 +1,31 @@ +kernel->getProjectDir(); + + $fileName = $projectDir . DIRECTORY_SEPARATOR . self::ENV_VARS_FILE; + if (!is_file($fileName)) { + throw new \RuntimeException('File not found: '.$fileName); + } + + $content = json_decode(file_get_contents($fileName), true); + + return $content['vars']; + } +} \ No newline at end of file diff --git a/src/Service/OgBoot/StatusService.php b/src/Service/OgBoot/StatusService.php index c935e28..021f030 100644 --- a/src/Service/OgBoot/StatusService.php +++ b/src/Service/OgBoot/StatusService.php @@ -2,6 +2,7 @@ namespace App\Service\OgBoot; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface; @@ -15,7 +16,8 @@ use Symfony\Component\HttpClient\HttpClient; readonly class StatusService { public function __construct( - private string $ogBootApiUrl + #[Autowire(env: 'OG_BOOT_API_URL')] + private string $ogBootApiUrl ) { } diff --git a/src/Service/OgDhcp/StatusService.php b/src/Service/OgDhcp/StatusService.php index 6e434bf..cc2a352 100644 --- a/src/Service/OgDhcp/StatusService.php +++ b/src/Service/OgDhcp/StatusService.php @@ -2,6 +2,7 @@ namespace App\Service\OgDhcp; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpClient\HttpClient; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; @@ -10,10 +11,11 @@ use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface; use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface; use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface; -class StatusService +readonly class StatusService { public function __construct( - private string $ogDhcpApiUrl + #[Autowire(env: 'OG_DHCP_API_URL')] + private string $ogDhcpApiUrl ) { } diff --git a/src/Service/UDS/UDSClient.php b/src/Service/UDS/UDSClient.php index 3d3f161..a8e79c4 100644 --- a/src/Service/UDS/UDSClient.php +++ b/src/Service/UDS/UDSClient.php @@ -5,6 +5,7 @@ namespace App\Service\UDS; use AllowDynamicProperties; use App\Entity\OrganizationalUnit; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\HttpClient\Exception\TransportException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; @@ -24,9 +25,13 @@ class UDSClient public function __construct( private HttpClientInterface $httpClient, private readonly EntityManagerInterface $entityManager, + #[Autowire(env: 'UDS_URL')] private string $udsAPIurl, + #[Autowire(env: 'UDS_AUTH_LOGIN')] private string $udsAuthLogin, + #[Autowire(env: 'UDS_AUTH_USERNAME')] private string $udsAuthUsername, + #[Autowire(env: 'UDS_AUTH_PASSWORD')] private string $udsAuthPassword, ) {