Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\EmailBundle\Validator; | |
use Mautic\EmailBundle\Mailer\Transport\TransportFactory; | |
use Mautic\EmailBundle\Validator\Dsn as DsnConstraint; | |
use Symfony\Component\Mailer\Exception\ExceptionInterface; | |
use Symfony\Component\Mailer\Exception\InvalidArgumentException; | |
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException; | |
use Symfony\Component\Mailer\Transport\Dsn as MailerDsn; | |
use Symfony\Component\Validator\Constraint; | |
use Symfony\Component\Validator\ConstraintValidator; | |
use Symfony\Component\Validator\Exception\UnexpectedTypeException; | |
class DsnValidator extends ConstraintValidator | |
{ | |
public function __construct( | |
private TransportFactory $transportFactory | |
) { | |
} | |
public function validate($value, Constraint $constraint): void | |
{ | |
if (!is_string($value)) { | |
throw new UnexpectedTypeException($value, 'string'); | |
} | |
if (!$constraint instanceof DsnConstraint) { | |
throw new UnexpectedTypeException($constraint, DsnConstraint::class); | |
} | |
if (!$value) { | |
return; | |
} | |
try { | |
$dsn = MailerDsn::fromString($value); | |
} catch (InvalidArgumentException $e) { | |
$this->context->addViolation($e->getMessage() ?: 'mautic.email.dsn.invalid_dsn'); | |
return; | |
} | |
try { | |
$this->transportFactory->fromDsnObject($dsn); | |
} catch (UnsupportedSchemeException $e) { | |
$this->context->addViolation($e->getMessage() ?: 'mautic.email.dsn.unsupported_scheme'); | |
} catch (ExceptionInterface $e) { | |
$this->context->addViolation($e->getMessage() ?: 'mautic.email.dsn.invalid_dsn'); | |
} | |
} | |
} | |