vendor/shopware/storefront/Controller/CsrfController.php line 65

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Controller;
  3. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  4. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  5. use Shopware\Storefront\Framework\Csrf\CsrfModes;
  6. use Shopware\Storefront\Framework\Csrf\Exception\CsrfNotEnabledException;
  7. use Shopware\Storefront\Framework\Csrf\Exception\CsrfWrongModeException;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  12. /**
  13.  * @RouteScope(scopes={"storefront"})
  14.  */
  15. class CsrfController extends StorefrontController
  16. {
  17.     /**
  18.      * @var CsrfTokenManagerInterface
  19.      */
  20.     private $csrfTokenManager;
  21.     /**
  22.      * @var bool
  23.      */
  24.     private $csrfEnabled;
  25.     /**
  26.      * @var string
  27.      */
  28.     private $csrfMode;
  29.     public function __construct(CsrfTokenManagerInterface $csrfTokenManagerbool $csrfEnabledstring $csrfMode)
  30.     {
  31.         $this->csrfTokenManager $csrfTokenManager;
  32.         $this->csrfEnabled $csrfEnabled;
  33.         $this->csrfMode $csrfMode;
  34.     }
  35.     /**
  36.      * @Route("/csrf/generate", name="frontend.csrf.generateToken", defaults={"csrf_protected"=false, "XmlHttpRequest"=true}, methods={"POST"})
  37.      */
  38.     public function generateCsrf(Request $request): JsonResponse
  39.     {
  40.         if (!$this->csrfEnabled) {
  41.             throw new CsrfNotEnabledException();
  42.         }
  43.         if ($this->csrfMode !== CsrfModes::MODE_AJAX) {
  44.             throw new CsrfWrongModeException(CsrfModes::MODE_AJAX);
  45.         }
  46.         $intent $request->request->get('intent''ajax');
  47.         $token $this->csrfTokenManager->getToken($intent);
  48.         return new JsonResponse(['token' => $token->getValue()]);
  49.     }
  50.     /**
  51.      * @Route("/api-access", name="frontend.api-access", defaults={"csrf_protected"=false, "XmlHttpRequest"=true}, methods={"GET"})
  52.      */
  53.     public function getApiAccess(SalesChannelContext $context): JsonResponse
  54.     {
  55.         return new JsonResponse([
  56.             'accessKey' => $context->getSalesChannel()->getAccessKey(),
  57.             'token' => $context->getToken(),
  58.         ]);
  59.     }
  60. }