vendor/shopware/core/Framework/Api/EventListener/Authentication/UserCredentialsChangedSubscriber.php line 40

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\Api\EventListener\Authentication;
  3. use Doctrine\DBAL\Connection;
  4. use Shopware\Core\Defaults;
  5. use Shopware\Core\Framework\Api\OAuth\RefreshTokenRepository;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityDeletedEvent;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
  8. use Shopware\Core\Framework\Uuid\Uuid;
  9. use Shopware\Core\System\User\UserEvents;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. /**
  12.  * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
  13.  */
  14. class UserCredentialsChangedSubscriber implements EventSubscriberInterface
  15. {
  16.     private RefreshTokenRepository $refreshTokenRepository;
  17.     private Connection $connection;
  18.     /**
  19.      * @internal
  20.      */
  21.     public function __construct(RefreshTokenRepository $refreshTokenRepositoryConnection $connection)
  22.     {
  23.         $this->refreshTokenRepository $refreshTokenRepository;
  24.         $this->connection $connection;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             UserEvents::USER_WRITTEN_EVENT => 'onUserWritten',
  30.             UserEvents::USER_DELETED_EVENT => 'onUserDeleted',
  31.         ];
  32.     }
  33.     public function onUserWritten(EntityWrittenEvent $event): void
  34.     {
  35.         $payloads $event->getPayloads();
  36.         foreach ($payloads as $payload) {
  37.             if ($this->userCredentialsChanged($payload)) {
  38.                 $this->refreshTokenRepository->revokeRefreshTokensForUser($payload['id']);
  39.                 $this->updateLastUpdatedPasswordTimestamp($payload['id']);
  40.             }
  41.         }
  42.     }
  43.     public function onUserDeleted(EntityDeletedEvent $event): void
  44.     {
  45.         $ids $event->getIds();
  46.         foreach ($ids as $id) {
  47.             $this->refreshTokenRepository->revokeRefreshTokensForUser($id);
  48.         }
  49.     }
  50.     /**
  51.      * @param array<string, mixed> $payload
  52.      */
  53.     private function userCredentialsChanged(array $payload): bool
  54.     {
  55.         return isset($payload['password']);
  56.     }
  57.     private function updateLastUpdatedPasswordTimestamp(string $userId): void
  58.     {
  59.         $this->connection->update('user', [
  60.             'last_updated_password_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT),
  61.         ], [
  62.             'id' => Uuid::fromHexToBytes($userId),
  63.         ]);
  64.     }
  65. }