vendor/ibexa/rest/src/lib/Server/Security/RestLogoutHandler.php line 19

Open in your IDE?
  1. <?php
  2. /**
  3. * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4. * @license For full copyright and license information view LICENSE file distributed with this source code.
  5. */
  6. namespace Ibexa\Rest\Server\Security;
  7. use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  11. use Symfony\Component\Security\Http\Logout\LogoutHandlerInterface;
  12. /**
  13. * Logout handler used by REST session based logout.
  14. * It forces session cookie clearing.
  15. */
  16. class RestLogoutHandler implements LogoutHandlerInterface
  17. {
  18. /**
  19. * @var \Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface
  20. */
  21. private $configResolver;
  22. /**
  23. * @param \Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface $configResolver
  24. */
  25. public function __construct(ConfigResolverInterface $configResolver)
  26. {
  27. $this->configResolver = $configResolver;
  28. }
  29. /**
  30. * @param \Symfony\Component\HttpFoundation\Request $request
  31. * @param \Symfony\Component\HttpFoundation\Response $response
  32. * @param \Symfony\Component\Security\Core\Authentication\Token\TokenInterface $token
  33. */
  34. public function logout(Request $request, Response $response, TokenInterface $token)
  35. {
  36. if (!$request->attributes->get('is_rest_request')) {
  37. return;
  38. }
  39. $path = '/';
  40. $domain = null;
  41. $session = $this->configResolver->getParameter('session');
  42. if (array_key_exists('cookie_domain', $session)) {
  43. $domain = $session['cookie_domain'];
  44. }
  45. if (array_key_exists('cookie_path', $session)) {
  46. $path = $session['cookie_path'];
  47. }
  48. $response->headers->clearCookie($request->getSession()->getName(), $path, $domain);
  49. }
  50. }
  51. class_alias(RestLogoutHandler::class, 'EzSystems\EzPlatformRest\Server\Security\RestLogoutHandler');