diff --git a/src/Controller/AuthValidatorController.php b/src/Controller/AuthValidatorController.php index 84d0a40..d22151b 100644 --- a/src/Controller/AuthValidatorController.php +++ b/src/Controller/AuthValidatorController.php @@ -2,7 +2,53 @@ namespace App\Controller; -class AuthValidatorController -{ +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface; +use Symfony\Component\Security\Core\Exception\AuthenticationException; -} \ No newline at end of file +class AuthValidatorController extends AbstractController +{ + private JWTTokenManagerInterface $jwtManager; + + public function __construct(JWTTokenManagerInterface $jwtManager) + { + $this->jwtManager = $jwtManager; + } + + #[Route('/validate', name: 'auth_validate', methods: ['POST'])] + public function validate(Request $request): Response + { + $sslClientVerify = $request->headers->get('SSL_CLIENT_VERIFY'); + $clientCertOk = $sslClientVerify === 'SUCCESS'; + + $authHeader = $request->headers->get('Authorization'); + $hasValidJwt = $this->validateJwtToken($authHeader); + + if ($clientCertOk || $hasValidJwt) { + return new Response('Authorized', Response::HTTP_OK); + } + + return new Response('Unauthorized', Response::HTTP_UNAUTHORIZED); + } + + private function validateJwtToken(?string $authHeader): bool + { + if (!$authHeader || !str_starts_with($authHeader, 'Bearer ')) { + return false; + } + + $token = substr($authHeader, 7); + + try { + $payload = $this->jwtManager->parse($token); + + return true; + + } catch (\Exception $e) { + return false; + } + } +} diff --git a/src/Controller/OgRepository/Image/SyncAction.php b/src/Controller/OgRepository/Image/SyncAction.php index 027693c..0c34fd7 100644 --- a/src/Controller/OgRepository/Image/SyncAction.php +++ b/src/Controller/OgRepository/Image/SyncAction.php @@ -51,6 +51,7 @@ class SyncAction extends AbstractOgRepositoryController $imageEntity->setName($image['name']); $imageEntity->setRemotePc(false); $imageEntity->setIsGlobal(false); + $imageEntity->setType('monolithic'); $this->entityManager->persist($imageEntity); } @@ -59,6 +60,7 @@ class SyncAction extends AbstractOgRepositoryController $imageImageRepositoryEntity = new ImageImageRepository(); } + $imageImageRepositoryEntity->setName($image['name']); $imageImageRepositoryEntity->setImageFullsum($image['fullsum']); $imageImageRepositoryEntity->setDatasize($image['datasize']); $imageImageRepositoryEntity->setStatus(ImageStatus::SUCCESS); diff --git a/src/Service/CreatePartitionService.php b/src/Service/CreatePartitionService.php index f5153b1..f48acfd 100644 --- a/src/Service/CreatePartitionService.php +++ b/src/Service/CreatePartitionService.php @@ -49,15 +49,19 @@ class CreatePartitionService $partitionEntity->setOperativeSystem(null); if (isset($cfg['soi']) && $cfg['soi'] !== '') { - $operativeSystem = $this->entityManager->getRepository(OperativeSystem::class) - ->findOneBy(['name' => $cfg['soi']]); + if ($cfg['soi'] === 'DATA') { + $partitionEntity->setImage(null); + } else { + $operativeSystem = $this->entityManager->getRepository(OperativeSystem::class) + ->findOneBy(['name' => $cfg['soi']]); - if (!$operativeSystem) { - $operativeSystem = new OperativeSystem(); - $operativeSystem->setName($cfg['soi']); - $this->entityManager->persist($operativeSystem); + if (!$operativeSystem) { + $operativeSystem = new OperativeSystem(); + $operativeSystem->setName($cfg['soi']); + $this->entityManager->persist($operativeSystem); + } + $partitionEntity->setOperativeSystem($operativeSystem); } - $partitionEntity->setOperativeSystem($operativeSystem); } $partitionEntity->setClient($clientEntity);