<?php declare(strict_types=1);
namespace Shopware\Core\Checkout\Customer\Subscriber;
use Doctrine\DBAL\Connection;
use Shopware\Core\Checkout\Customer\CustomerEvents;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Shopware\Core\Framework\Uuid\Uuid;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class CustomerChangePasswordSubscriber implements EventSubscriberInterface
{
/**
* @var Connection
*/
private $connection;
/**
* @internal
*/
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
/**
* @return array<string, string|array{0: string, 1: int}|list<array{0: string, 1?: int}>>
*/
public static function getSubscribedEvents()
{
return [
CustomerEvents::CUSTOMER_WRITTEN_EVENT => 'onCustomerWritten',
];
}
public function onCustomerWritten(EntityWrittenEvent $event): void
{
$payloads = $event->getPayloads();
foreach ($payloads as $payload) {
if (!empty($payload['password'])) {
$this->clearLegacyPassword($payload['id']);
}
}
}
private function clearLegacyPassword(string $customerId): void
{
$this->connection->executeUpdate(
'UPDATE `customer` SET `legacy_password` = null, `legacy_encoder` = null WHERE id = :id',
[
'id' => Uuid::fromHexToBytes($customerId),
]
);
}
}