ApiLegacyRequestService.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Service\ApiLegacy;
  3. use App\Service\Rest\ApiRequestService;
  4. use JetBrains\PhpStorm\Pure;
  5. use Symfony\Component\HttpKernel\Exception\HttpException;
  6. use Symfony\Component\Security\Core\Authentication\Token\NullToken;
  7. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  8. use Symfony\Component\Security\Core\Security;
  9. use Symfony\Contracts\HttpClient\HttpClientInterface;
  10. use Symfony\Contracts\HttpClient\ResponseInterface;
  11. /**
  12. * Service d'appel à l'API opentalent V1
  13. */
  14. class ApiLegacyRequestService extends ApiRequestService
  15. {
  16. #[Pure]
  17. public function __construct(HttpClientInterface $apiLegacyClient, private Security $security)
  18. {
  19. parent::__construct($apiLegacyClient);
  20. }
  21. /** @noinspection PhpPossiblePolymorphicInvocationInspection */
  22. public function request(
  23. string $method,
  24. string $url,
  25. array $parameters = [],
  26. array $options = []
  27. ): ResponseInterface {
  28. $token = $this->security->getToken();
  29. if ($token === null || $token instanceof NullToken || $token->getUser() === null) {
  30. throw new HttpException(500, 'Request error : Invalid security token');
  31. }
  32. $headers = [
  33. 'authorization' => 'BEARER ' . $_REQUEST['BEARER'],
  34. 'Accept' => '*/*',
  35. 'Charset' => 'UTF-8',
  36. 'Accept-Encoding' => 'gzip, deflate, br',
  37. 'Content-Type' => 'application/ld+json',
  38. ];
  39. if ($token instanceof SwitchUserToken) {
  40. $originalUser = $token->getOriginalToken()->getUser();
  41. if ($originalUser === null) {
  42. throw new HttpException(500, 'Request error : Switch original user missing');
  43. }
  44. $headers['x-accessid'] = $originalUser->getId();
  45. $headers['x-switch-access'] = $token->getUser()->getId();
  46. } else {
  47. $headers['x-accessid'] = $token->getUser()->getId();
  48. }
  49. $options['headers'] = array_merge($options['headers'] ?? [], $headers);
  50. return parent::request($method, $url, $parameters, $options);
  51. }
  52. }