src/EventListener/ControlpanelAccessControlListener.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Application\DTO\ControlPanel\Api\Academy\AcademyAttributes;
  4. use App\Application\DTO\ControlPanel\Api\Academy\CartCourseAttributes;
  5. use App\Application\DTO\ControlPanel\Api\DeliveryNote\DeliveryNoteDownloadsAttributes;
  6. use App\Application\DTO\ControlPanel\Api\MediaDownload\MediaDownloadRequestAttributes;
  7. use App\Application\DTO\ControlPanel\Api\Notification\NotificationAttributes;
  8. use App\Application\DTO\ControlPanel\Api\Payment\AdyenPaymentMethodDeletionAttributes;
  9. use App\Application\DTO\ControlPanel\Api\Payment\PaypalSaveBillingAgreementAttributes;
  10. use App\Application\DTO\ControlPanel\Api\Payment\PaypalUrlBillingAgreementAttributes;
  11. use App\Application\DTO\ControlPanel\Api\Rma\RmaAttributes;
  12. use App\Application\DTO\ControlPanel\Api\Rma\RmaLineAttributes;
  13. use App\Application\DTO\ControlPanel\Api\Rma\RmaLineCommentAttributes;
  14. use App\Application\DTO\ControlPanel\Api\Rma\RmaPickupAddressAttributes;
  15. use App\Application\DTO\ControlPanel\Api\Wishlist\RemoveProductAttributes;
  16. use App\Application\DTO\ControlPanel\Api\Wishlist\WishlistProductsCartAttributes;
  17. use App\Application\DTO\JsonApi\JsonApiDocument;
  18. use App\Application\Service\Factory\JsonApiFactory;
  19. use App\Application\Service\JsonApi\JsonApiResourceNormalizer;
  20. use App\Exception\ControlPanel\JsonApiException;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpKernel\Event\RequestEvent;
  23. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  24. use Symfony\Component\Serializer\SerializerInterface;
  25. class ControlpanelAccessControlListener
  26. {
  27.     public const CONTROLPANEL_URI '/controlpanel/api/';
  28.     public const JSON_API_V2_MIGRATED_ENDPOINTS = [
  29.         'api_controlpanel_rma_lines_create_rma_line',
  30.         'api_controlpanel_rma_lines_update_rma_line',
  31.         'api_controlpanel_rma_create',
  32.         'api_controlpanel_rma_update',
  33.         'api_controlpanel_rma_addresssave_rma_pickup_address',
  34.         'api_controlpanel_rma_line_commentsadd_rma_line_comments',
  35.         'api_controlpanel_rma_line_commentsupdate',
  36.         'controlpanel_media_request',
  37.         'controlpanel_media_app_infrastructure_symfony_controlpanel_api_mediadownloads_requestdownload',
  38.         'api_controlpanel_wishlist_remove_products_from_list',
  39.         'api_controlpanel_wishlist_add_products_to_cart',
  40.         'api_controlpanel_delivery_note_by_id',
  41.         'api_controlpanel_order_delivery-notes',
  42.         'api_controlpanel_order_pods_by_order_and_delivery_note',
  43.         'api_controlpanel_notification_update',
  44.         'api_controlpanel_notification_mark_all_as_read',
  45.         'api_controlpanel_order_download-delivery-notes',
  46.         'api_controlpanel_service_payment_actions',
  47.         'api_controlpanel_academy_coursesget_academy_courses',
  48.         'front_api_cart_add_course_to_cart',
  49.         'front_api_cart_add_course_to_cart_without_name',
  50.     ];
  51.     public const TYPE_TO_CLASS_MAP = [
  52.         RmaAttributes::TYPE => RmaAttributes::class,
  53.         RmaLineAttributes::TYPE => RmaLineAttributes::class,
  54.         RmaPickupAddressAttributes::TYPE => RmaPickupAddressAttributes::class,
  55.         RmaLineCommentAttributes::TYPE => RmaLineCommentAttributes::class,
  56.         MediaDownloadRequestAttributes::TYPE => MediaDownloadRequestAttributes::class,
  57.         NotificationAttributes::TYPE => NotificationAttributes::class,
  58.         RemoveProductAttributes::TYPE => RemoveProductAttributes::class,
  59.         WishlistProductsCartAttributes::TYPE => WishlistProductsCartAttributes::class,
  60.         AdyenPaymentMethodDeletionAttributes::TYPE => AdyenPaymentMethodDeletionAttributes::class,
  61.         PaypalSaveBillingAgreementAttributes::TYPE => PaypalSaveBillingAgreementAttributes::class,
  62.         PaypalUrlBillingAgreementAttributes::TYPE => PaypalUrlBillingAgreementAttributes::class,
  63.         DeliveryNoteDownloadsAttributes::TYPE => DeliveryNoteDownloadsAttributes::class,
  64.         AcademyAttributes::TYPE => AcademyAttributes::class,
  65.         CartCourseAttributes::TYPE => CartCourseAttributes::class,
  66.     ];
  67.     private SerializerInterface $serializer;
  68.     public function __construct(SerializerInterface $serializer)
  69.     {
  70.         $this->serializer $serializer;
  71.     }
  72.     /**
  73.      * @throws JsonApiException
  74.      */
  75.     public function onKernelRequest(RequestEvent $requestEvent): void
  76.     {
  77.         $request $requestEvent->getRequest();
  78.         $requestUri $request->getRequestUri();
  79.         $requestMethod $request->getMethod();
  80.         $requestName $request->get('_route');
  81.         $content $request->getContent();
  82.         if (!== strpos($requestUriself::CONTROLPANEL_URI)) {
  83.             return;
  84.         }
  85.         if ((Request::METHOD_PATCH === $requestMethod || Request::METHOD_POST === $requestMethod) && !empty($content)) {
  86.             if (in_array($requestNameself::JSON_API_V2_MIGRATED_ENDPOINTStrue)) {
  87.                 $jsonApiDocument $this->serializer->deserialize($request->getContent(), JsonApiDocument::class, JsonEncoder::FORMAT, [JsonApiResourceNormalizer::TYPE_TO_CLASS_MAP => self::TYPE_TO_CLASS_MAP]);
  88.             } else {
  89.                 $jsonApiDocument JsonApiFactory::createFromJson($request->getContent());
  90.             }
  91.             $request->attributes->set('json_api_document'$jsonApiDocument);
  92.         }
  93.     }
  94. }