<?php declare(strict_types=1);
namespace App\EventSubscriber;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Exception\HttpException;
class AntispamSubscriber implements EventSubscriberInterface
{
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var RequestStack
*/
private $requestStack;
public function __construct(
LoggerInterface $logger,
RequestStack $requestStack
)
{
$this->logger = $logger;
$this->requestStack = $requestStack;
}
/**
* @return array<string>
*/
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SUBMIT => 'checkContact'
];
}
public function checkContact(FormEvent $event): void {
$request = $this->requestStack->getCurrentRequest();
if (!$request){
return;
}
$data = $event->getData();
if (!array_key_exists('phone', $data) || !array_key_exists('faxnumber', $data)){
throw new HttpException(400, "Don't touch my form please");
}
[
'phone' => $phone,
'faxnumber' => $faxnumber
] = $data;
if ($phone !== "" || $faxnumber !== ""){
$message = "Une potentielle tentative de robot spammeur ayant l'adresse IP suivante '{$request->getClientIp()}' a eu lieu. Le champ phone contenait '{$phone}'
et le champ fax contenait '{$faxnumber}'";
$this->logger->info($message);
throw new HttpException(403, "Go away dirty bot!");
}
}
}