vendor/wns/security-compliance-suite/src/Logging/Subscriber/AppActionSubscriber.php line 53

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace WnsSecurityComplianceSuite\Logging\Subscriber;
  4. use Shopware\Core\Framework\App\Event\AppActivatedEvent;
  5. use Shopware\Core\Framework\App\Event\AppChangedEvent;
  6. use Shopware\Core\Framework\App\Event\AppDeactivatedEvent;
  7. use Shopware\Core\Framework\App\Event\AppDeletedEvent;
  8. use Shopware\Core\Framework\App\Event\AppInstalledEvent;
  9. use Shopware\Core\Framework\App\Event\AppUpdatedEvent;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use WnsSecurityComplianceSuite\Logging\DTO\Log;
  14. use WnsSecurityComplianceSuite\Logging\Enum\EventTypes;
  15. use WnsSecurityComplianceSuite\Logging\Provider\SourceInfoProvider;
  16. use WnsSecurityComplianceSuite\Logging\Service\ActionLogger;
  17. final class AppActionSubscriber implements EventSubscriberInterface
  18. {
  19. private ActionLogger $actionLogger;
  20. private SourceInfoProvider $sourceInfoProvider;
  21. private EntityRepository $appRepository;
  22. public function __construct(
  23. ActionLogger $actionLogger,
  24. SourceInfoProvider $sourceInfoProvider,
  25. EntityRepository $appRepository
  26. ) {
  27. $this->actionLogger = $actionLogger;
  28. $this->sourceInfoProvider = $sourceInfoProvider;
  29. $this->appRepository = $appRepository;
  30. }
  31. public static function getSubscribedEvents()
  32. {
  33. return [
  34. AppActivatedEvent::class => 'onAppAction',
  35. AppDeactivatedEvent::class => 'onAppAction',
  36. AppInstalledEvent::class => 'onAppAction',
  37. AppUpdatedEvent::class => 'onAppAction',
  38. AppDeletedEvent::class => 'onAppDeleted',
  39. ];
  40. }
  41. /**
  42. * @param AppActivatedEvent|AppDeactivatedEvent|AppInstalledEvent|AppUpdatedEvent $event
  43. */
  44. public function onAppAction(AppChangedEvent $event): void
  45. {
  46. $app = $event->getApp();
  47. $detail = [
  48. 'app' => $app->getName(),
  49. 'version' => $app->getVersion(),
  50. ];
  51. $log = new Log(
  52. $this->getEventType(\get_class($event)),
  53. $this->sourceInfoProvider->getSourceDTO($event->getContext()->getSource()),
  54. $detail,
  55. new \DateTimeImmutable(),
  56. );
  57. $this->actionLogger->log($log, null);
  58. }
  59. public function onAppDeleted(AppDeletedEvent $event): void
  60. {
  61. $app = $this->appRepository->search(new Criteria([$event->getAppId()]), $event->getContext())->first();
  62. if ($app === null) {
  63. $detail = [
  64. 'appId' => $event->getAppId(),
  65. ];
  66. } else {
  67. $detail = [
  68. 'app' => $app->getName(),
  69. 'version' => $app->getVersion(),
  70. ];
  71. }
  72. $log = new Log(
  73. $this->getEventType(\get_class($event)),
  74. $this->sourceInfoProvider->getSourceDTO($event->getContext()->getSource()),
  75. $detail,
  76. new \DateTimeImmutable(),
  77. );
  78. $this->actionLogger->log($log, null);
  79. }
  80. private function getEventType(string $event): string
  81. {
  82. switch ($event) {
  83. case AppActivatedEvent::class:
  84. return EventTypes::APP_ACTIVATED;
  85. case AppDeactivatedEvent::class:
  86. return EventTypes::APP_DEACTIVATED;
  87. case AppDeletedEvent::class:
  88. return EventTypes::APP_DELETED;
  89. case AppInstalledEvent::class:
  90. return EventTypes::APP_INSTALLED;
  91. case AppUpdatedEvent::class:
  92. return EventTypes::APP_UPDATED;
  93. default:
  94. return $event;
  95. }
  96. }
  97. }