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. class UserCredentialsChangedSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var RefreshTokenRepository
  15.      */
  16.     private $refreshTokenRepository;
  17.     /**
  18.      * @var Connection
  19.      */
  20.     private $connection;
  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.     private function userCredentialsChanged(array $payload): bool
  51.     {
  52.         return isset($payload['password']);
  53.     }
  54.     private function updateLastUpdatedPasswordTimestamp(string $userId): void
  55.     {
  56.         $this->connection->update('user', [
  57.             'last_updated_password_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT),
  58.         ], [
  59.             'id' => Uuid::fromHexToBytes($userId),
  60.         ]);
  61.     }
  62. }