login consent app sql
This commit is contained in:
45
vendor/symfony/form/Extension/Csrf/CsrfExtension.php
vendored
Normal file
45
vendor/symfony/form/Extension/Csrf/CsrfExtension.php
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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;
|
||||
|
||||
use Symfony\Component\Form\AbstractExtension;
|
||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
/**
|
||||
* This extension protects forms by using a CSRF token.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
class CsrfExtension extends AbstractExtension
|
||||
{
|
||||
private $tokenManager;
|
||||
private $translator;
|
||||
private $translationDomain;
|
||||
|
||||
public function __construct(CsrfTokenManagerInterface $tokenManager, TranslatorInterface $translator = null, string $translationDomain = null)
|
||||
{
|
||||
$this->tokenManager = $tokenManager;
|
||||
$this->translator = $translator;
|
||||
$this->translationDomain = $translationDomain;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function loadTypeExtensions()
|
||||
{
|
||||
return [
|
||||
new Type\FormTypeCsrfExtension($this->tokenManager, true, '_token', $this->translator, $this->translationDomain),
|
||||
];
|
||||
}
|
||||
}
|
81
vendor/symfony/form/Extension/Csrf/EventListener/CsrfValidationListener.php
vendored
Normal file
81
vendor/symfony/form/Extension/Csrf/EventListener/CsrfValidationListener.php
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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\FormError;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Form\Util\ServerParams;
|
||||
use Symfony\Component\Security\Csrf\CsrfToken;
|
||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
class CsrfValidationListener implements EventSubscriberInterface
|
||||
{
|
||||
private $fieldName;
|
||||
private $tokenManager;
|
||||
private $tokenId;
|
||||
private $errorMessage;
|
||||
private $translator;
|
||||
private $translationDomain;
|
||||
private $serverParams;
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return [
|
||||
FormEvents::PRE_SUBMIT => 'preSubmit',
|
||||
];
|
||||
}
|
||||
|
||||
public function __construct(string $fieldName, CsrfTokenManagerInterface $tokenManager, string $tokenId, string $errorMessage, TranslatorInterface $translator = null, string $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();
|
||||
|
||||
$csrfValue = \is_string($data[$this->fieldName] ?? null) ? $data[$this->fieldName] : null;
|
||||
$csrfToken = new CsrfToken($this->tokenId, $csrfValue);
|
||||
|
||||
if (null === $csrfValue || !$this->tokenManager->isTokenValid($csrfToken)) {
|
||||
$errorMessage = $this->errorMessage;
|
||||
|
||||
if (null !== $this->translator) {
|
||||
$errorMessage = $this->translator->trans($errorMessage, [], $this->translationDomain);
|
||||
}
|
||||
|
||||
$form->addError(new FormError($errorMessage, $errorMessage, [], null, $csrfToken));
|
||||
}
|
||||
|
||||
if (\is_array($data)) {
|
||||
unset($data[$this->fieldName]);
|
||||
$event->setData($data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
110
vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php
vendored
Normal file
110
vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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\Type;
|
||||
|
||||
use Symfony\Component\Form\AbstractTypeExtension;
|
||||
use Symfony\Component\Form\Extension\Core\Type\FormType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
|
||||
use Symfony\Component\Form\Extension\Csrf\EventListener\CsrfValidationListener;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\FormView;
|
||||
use Symfony\Component\Form\Util\ServerParams;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
/**
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*/
|
||||
class FormTypeCsrfExtension extends AbstractTypeExtension
|
||||
{
|
||||
private $defaultTokenManager;
|
||||
private $defaultEnabled;
|
||||
private $defaultFieldName;
|
||||
private $translator;
|
||||
private $translationDomain;
|
||||
private $serverParams;
|
||||
|
||||
public function __construct(CsrfTokenManagerInterface $defaultTokenManager, bool $defaultEnabled = true, string $defaultFieldName = '_token', TranslatorInterface $translator = null, string $translationDomain = null, ServerParams $serverParams = null)
|
||||
{
|
||||
$this->defaultTokenManager = $defaultTokenManager;
|
||||
$this->defaultEnabled = $defaultEnabled;
|
||||
$this->defaultFieldName = $defaultFieldName;
|
||||
$this->translator = $translator;
|
||||
$this->translationDomain = $translationDomain;
|
||||
$this->serverParams = $serverParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a CSRF field to the form when the CSRF protection is enabled.
|
||||
*/
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
if (!$options['csrf_protection']) {
|
||||
return;
|
||||
}
|
||||
|
||||
$builder
|
||||
->addEventSubscriber(new CsrfValidationListener(
|
||||
$options['csrf_field_name'],
|
||||
$options['csrf_token_manager'],
|
||||
$options['csrf_token_id'] ?: ($builder->getName() ?: \get_class($builder->getType()->getInnerType())),
|
||||
$options['csrf_message'],
|
||||
$this->translator,
|
||||
$this->translationDomain,
|
||||
$this->serverParams
|
||||
))
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a CSRF field to the root form view.
|
||||
*/
|
||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||
{
|
||||
if ($options['csrf_protection'] && !$view->parent && $options['compound']) {
|
||||
$factory = $form->getConfig()->getFormFactory();
|
||||
$tokenId = $options['csrf_token_id'] ?: ($form->getName() ?: \get_class($form->getConfig()->getType()->getInnerType()));
|
||||
$data = (string) $options['csrf_token_manager']->getToken($tokenId);
|
||||
|
||||
$csrfForm = $factory->createNamed($options['csrf_field_name'], HiddenType::class, $data, [
|
||||
'block_prefix' => 'csrf_token',
|
||||
'mapped' => false,
|
||||
]);
|
||||
|
||||
$view->children[$options['csrf_field_name']] = $csrfForm->createView($view);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function configureOptions(OptionsResolver $resolver)
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'csrf_protection' => $this->defaultEnabled,
|
||||
'csrf_field_name' => $this->defaultFieldName,
|
||||
'csrf_message' => 'The CSRF token is invalid. Please try to resubmit the form.',
|
||||
'csrf_token_manager' => $this->defaultTokenManager,
|
||||
'csrf_token_id' => null,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function getExtendedTypes(): iterable
|
||||
{
|
||||
return [FormType::class];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user