ApiLegacyRequestService.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Service\ApiLegacy;
  3. use App\Entity\Access\Access;
  4. use App\Service\Rest\ApiRequestService;
  5. use JetBrains\PhpStorm\Pure;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
  7. use Symfony\Bundle\SecurityBundle\Security;
  8. use Symfony\Component\HttpKernel\Exception\HttpException;
  9. use Symfony\Component\Security\Core\Authentication\Token\NullToken;
  10. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  11. use Symfony\Contracts\HttpClient\HttpClientInterface;
  12. use Symfony\Contracts\HttpClient\ResponseInterface;
  13. /**
  14. * Service d'appel à l'API opentalent V1.
  15. */
  16. class ApiLegacyRequestService extends ApiRequestService
  17. {
  18. #[Pure]
  19. public function __construct(
  20. HttpClientInterface $apiLegacyClient,
  21. private readonly Security $security,
  22. private readonly JWTTokenManagerInterface $jwtManager,
  23. readonly private string $internalRequestsToken,
  24. ) {
  25. parent::__construct($apiLegacyClient);
  26. }
  27. /**
  28. * @param array<mixed> $parameters
  29. * @param array<mixed> $options
  30. */
  31. public function request(
  32. string $method,
  33. string $url,
  34. array $parameters = [],
  35. array $options = [],
  36. ): ResponseInterface {
  37. $token = $this->security->getToken();
  38. $headers = [
  39. 'Accept' => '*/*',
  40. 'Charset' => 'UTF-8',
  41. 'Accept-Encoding' => 'gzip, deflate, br',
  42. 'Content-Type' => 'application/ld+json',
  43. ];
  44. $jwt = null;
  45. if ($token instanceof SwitchUserToken) {
  46. /** @var Access $activeUser */
  47. $activeUser = $token->getUser();
  48. /** @var Access|null $originalUser */
  49. $originalUser = $token->getOriginalToken()->getUser();
  50. if ($originalUser === null) {
  51. throw new HttpException(500, 'Request error : Switch original user missing');
  52. }
  53. $jwt = $this->jwtManager->create($originalUser->getPerson());
  54. $headers['x-accessid'] = $originalUser->getId();
  55. $headers['x-switch-access'] = $activeUser->getId();
  56. } elseif ($token !== null && !($token instanceof NullToken) && $token->getUser() !== null) {
  57. /** @var Access $activeUser */
  58. $activeUser = $token->getUser();
  59. $jwt = $this->jwtManager->create($activeUser->getPerson());
  60. $headers['x-accessid'] = $activeUser->getId();
  61. }
  62. if ($jwt !== null) {
  63. $headers['authorization'] = 'BEARER '.$jwt;
  64. }
  65. // Add the internal requests token
  66. $headers['internal-requests-token'] = $this->internalRequestsToken;
  67. $options['headers'] = array_merge($options['headers'] ?? [], $headers);
  68. return parent::request($method, $url, $parameters, $options);
  69. }
  70. }