* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Form\Extension\Csrf\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\Util\ServerParams; use Symfony\Component\Security\Csrf\CsrfToken; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; use Symfony\Component\Translation\TranslatorInterface; /** * @author Bernhard Schussek */ class CsrfValidationListener implements EventSubscriberInterface { private $fieldName; private $tokenManager; private $tokenId; private $errorMessage; private $translator; private $translationDomain; private $serverParams; public static function getSubscribedEvents() { return array( FormEvents::PRE_SUBMIT => 'preSubmit', ); } public function __construct($fieldName, CsrfTokenManagerInterface $tokenManager, $tokenId, $errorMessage, TranslatorInterface $translator = null, $translationDomain = null, ServerParams $serverParams = null) { $this->fieldName = $fieldName; $this->tokenManager = $tokenManager; $this->tokenId = $tokenId; $this->errorMessage = $errorMessage; $this->translator = $translator; $this->translationDomain = $translationDomain; $this->serverParams = $serverParams ?: new ServerParams(); } public function preSubmit(FormEvent $event) { $form = $event->getForm(); $postRequestSizeExceeded = 'POST' === $form->getConfig()->getMethod() && $this->serverParams->hasPostMaxSizeBeenExceeded(); if ($form->isRoot() && $form->getConfig()->getOption('compound') && !$postRequestSizeExceeded) { $data = $event->getData(); if (!isset($data[$this->fieldName]) || !$this->tokenManager->isTokenValid(new CsrfToken($this->tokenId, $data[$this->fieldName]))) { $errorMessage = $this->errorMessage; if (null !== $this->translator) { $errorMessage = $this->translator->trans($errorMessage, array(), $this->translationDomain); } $form->addError(new FormError($errorMessage)); } if (is_array($data)) { unset($data[$this->fieldName]); $event->setData($data); } } } } __halt_compiler();----SIGNATURE:----ek6dshgExmu2CAeKLGemOZ6vK+b4g8lnAV5FXVX8JhDz429LNf/p/jJvzLALnfS/LfCvR/GMGK1mzC38WjYTfvMQErDwRYcaeS1T91aFwiXZQYs39uyMltaNXNKnaZn1uIaZz4AFRDraGM1EjYK8mjP29fcu7DPF6gIThwl5oaLJlkqfLhTQ95CROQFaTF3bKZJruVeLpVj4EmGrZgM1/5ZACuieik3BsdebDsiaZMo6l19LE/AyuV93VOAXVQ349UdAvLX8Ur53itiW1nEaG8N/BCw5bXPbXcjB4gINLoEpn8MXw93iwAJcDdkRdWk2q26ztfM2CSadEg6ZTtybzm+Tv8oj+uae/Z0/ArIrBPYK9RmT8Bm6I1IkgvyQq5O8ZZ2Xo2XDIIWTN3idHZFe/oAUYIhL79+XLJ1WOpyuc4k/HF6sLGq8DsbGAVLJLm6wcGErzEhWncf2+nSZP1FvkBb/jaY8l0dcXa1tfi9ZfPfsq3/U7iMUa7uGH88E4+I+turgDKIKN8UifPwOTBiRDTl/8upGVdUgTFSD7veJd7CQIUSLsfN8SS8US7ncYl+E55L27+DLTxnjihogDoMcm+L0bvOkHJtatlUw0nmqWJoSo+RmLk66L1uq0MuMwFIqniyZGZ+1YFSHk3ULh9K4xGzX3bLt6RwwqIxeoFHttiI=----ATTACHMENT:----NTQ0MTEzNzQ1NTg3NjMwNyA5ODgxNzk0MDU0NDAzMDk4IDU2ODIzNTA4NDYyNDM3NzI=