11 Commits

Author SHA1 Message Date
5778c54ae0 Add missing initialization 2022-02-09 10:19:13 +01:00
9b65966d27 update composer.json 2021-05-28 11:53:54 +02:00
633e30ae47 Add flow registration validation support 2021-05-28 08:08:42 +02:00
2f96c759ab Merge pull request #223 from Gemorroj/patch-1
php 8 support
2021-04-20 09:20:37 +02:00
2769e4791a php 8 support
#222
2021-04-18 12:06:03 +03:00
5e434e1859 gregwar/captcha version bump 2021-01-09 01:01:13 +01:00
df6915eb5e README details 2020-04-28 10:45:36 +02:00
b7685e63a1 README indentation 2020-04-28 10:44:39 +02:00
15bee25e9c Indentation in README 2020-04-28 10:43:03 +02:00
3a4e31473a Adding some note about session_key option for multiple captcha on same
page
2020-04-17 16:13:37 +02:00
fec0ebb2f1 Autowire controller 2020-04-09 10:18:10 +02:00
5 changed files with 52 additions and 35 deletions

View File

@ -45,9 +45,9 @@ Configuration
If you need to customize the global bundle configuration, you can create a `/config/packages/gregwar_captcha.yaml` file with your configuration: If you need to customize the global bundle configuration, you can create a `/config/packages/gregwar_captcha.yaml` file with your configuration:
``` yaml ``` yaml
gregwar_captcha: gregwar_captcha:
width: 160 width: 160
height: 50 height: 50
``` ```
Usage Usage
@ -57,10 +57,10 @@ You can use the "captcha" type in your forms this way:
``` php ``` php
<?php <?php
use Gregwar\CaptchaBundle\Type\CaptchaType; use Gregwar\CaptchaBundle\Type\CaptchaType;
// ... // ...
$builder->add('captcha', CaptchaType::class); // That's all ! $builder->add('captcha', CaptchaType::class); // That's all !
// ... // ...
``` ```
Note that the generated image will, by default, be embedded in the HTML document Note that the generated image will, by default, be embedded in the HTML document
@ -101,27 +101,28 @@ number of lines depends on the size of the image). (default=null)
* **background_images**: Sets custom user defined images as the captcha background (1 image is selected randomly). It is recommended to turn off all the effects on the image (ignore_all_effects). The full paths to the images must be passed. * **background_images**: Sets custom user defined images as the captcha background (1 image is selected randomly). It is recommended to turn off all the effects on the image (ignore_all_effects). The full paths to the images must be passed.
* **interpolation**: enable or disable the interpolation on the captcha * **interpolation**: enable or disable the interpolation on the captcha
* **ignore_all_effects**: Recommended to use when setting background images, will disable all image effects. * **ignore_all_effects**: Recommended to use when setting background images, will disable all image effects.
* **session_key**, if you want to host multiple CAPTCHA on the same page, you might have different session keys to ensure proper storage of the clear phrase for those different forms
Example : Example :
``` php ``` php
<?php <?php
use Gregwar\CaptchaBundle\Type\CaptchaType; use Gregwar\CaptchaBundle\Type\CaptchaType;
// ... // ...
$builder->add('captcha', CaptchaType::class, array( $builder->add('captcha', CaptchaType::class, array(
'width' => 200, 'width' => 200,
'height' => 50, 'height' => 50,
'length' => 6, 'length' => 6,
)); ));
``` ```
You can also set these options for your whole application using the `gregwar_captcha` You can also set these options for your whole application using the `gregwar_captcha`
configuration entry in your `config.yml` file: configuration entry in your `config.yml` file:
``` yaml ``` yaml
gregwar_captcha: gregwar_captcha:
width: 200 width: 200
height: 50 height: 50
length: 6 length: 6
``` ```
Translation Translation
@ -131,17 +132,19 @@ The messages are using the translator, you can either change the `invalid_messag
As URL As URL
============ ============
To use a URL to generate a captcha image, you must add the bundle's routing configuration to your app/routing.yml file: To use a URL to generate a captcha image, you must add the bundle's routing configuration to your `config/routes.yaml` file:
``` yaml ``` yaml
gregwar_captcha_routing: gregwar_captcha_routing:
resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml" resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml"
``` ```
This will use the bundle's route of "/generate-captcha/{key}" to handle the generation. If this route conflicts with an application route, you can prefix the bundle's routes when you import: This will use the bundle's route of `/generate-captcha/{key}` to handle the generation. If this route conflicts with an application route, you can prefix the bundle's routes when you import:
``` yaml ``` yaml
gregwar_captcha_routing: gregwar_captcha_routing:
resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml" resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml"
prefix: /_gcb prefix: /_gcb
``` ```
Since the session key is transported in the URL, it's also added in another session array, under the `whitelist_key` key, for security reasons Since the session key is transported in the URL, it's also added in another session array, under the `whitelist_key` key, for security reasons

View File

@ -17,6 +17,7 @@ services:
arguments: arguments:
- '@gregwar_captcha.generator' - '@gregwar_captcha.generator'
- '%gregwar_captcha.config%' - '%gregwar_captcha.config%'
autowire: true
# captcha.type: # captcha.type:
gregwar_captcha.type: gregwar_captcha.type:

View File

@ -62,7 +62,8 @@ class CaptchaType extends AbstractType
sprintf('%s%s', self::SESSION_KEY_PREFIX, $options['session_key']), sprintf('%s%s', self::SESSION_KEY_PREFIX, $options['session_key']),
$options['invalid_message'], $options['invalid_message'],
$options['bypass_code'], $options['bypass_code'],
$options['humanity'] $options['humanity'],
$options['request']
); );
$builder->addEventListener(FormEvents::POST_SUBMIT, array($validator, 'validate')); $builder->addEventListener(FormEvents::POST_SUBMIT, array($validator, 'validate'));
@ -121,6 +122,7 @@ class CaptchaType extends AbstractType
public function configureOptions(OptionsResolver $resolver) public function configureOptions(OptionsResolver $resolver)
{ {
$this->options['mapped'] = false; $this->options['mapped'] = false;
$this->options['request'] = null;
$resolver->setDefaults($this->options); $resolver->setDefaults($this->options);
} }

View File

@ -8,6 +8,7 @@ use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvent;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\Request;
/** /**
* Captcha validator. * Captcha validator.
@ -54,13 +55,21 @@ class CaptchaValidator
*/ */
private $translator; private $translator;
/**
* Request
*
* @var Request
*/
private $req;
public function __construct( public function __construct(
TranslatorInterface $translator, TranslatorInterface $translator,
SessionInterface $session, SessionInterface $session,
string $key, string $key,
string $invalidMessage, string $invalidMessage,
?string $bypassCode, ?string $bypassCode,
int $humanity int $humanity,
?Request $req
) { ) {
$this->translator = $translator; $this->translator = $translator;
$this->session = $session; $this->session = $session;
@ -68,6 +77,7 @@ class CaptchaValidator
$this->invalidMessage = $invalidMessage; $this->invalidMessage = $invalidMessage;
$this->bypassCode = $bypassCode; $this->bypassCode = $bypassCode;
$this->humanity = $humanity; $this->humanity = $humanity;
$this->req = $req;
} }
public function validate(FormEvent $event): void public function validate(FormEvent $event): void
@ -94,10 +104,11 @@ class CaptchaValidator
} }
} }
$this->session->remove($this->key); if (null == $this->req || 1 < $this->req->get('flow_registration_step')) {
$this->session->remove($this->key);
if ($this->session->has($this->key.'_fingerprint')) { if ($this->session->has($this->key.'_fingerprint')) {
$this->session->remove($this->key.'_fingerprint'); $this->session->remove($this->key.'_fingerprint');
}
} }
} }

View File

@ -1,9 +1,9 @@
{ {
"name": "gregwar/captcha-bundle", "name": "cadoles/captcha",
"type": "symfony-bundle", "type": "symfony-bundle",
"description": "Captcha bundle", "description": "Captcha bundle",
"keywords": ["symfony2", "symfony", "captcha", "bot", "visual", "code", "security", "spam"], "keywords": ["symfony2", "symfony", "captcha", "bot", "visual", "code", "security", "spam"],
"homepage": "https://github.com/Gregwar/CaptchaBundle", "homepage": "https://github.com/Cadoles/CaptchaBundle",
"license": "MIT", "license": "MIT",
"authors": [ "authors": [
{ {
@ -17,9 +17,9 @@
} }
], ],
"require": { "require": {
"php": "^7.1.3", "php": ">=7.1.3",
"ext-gd": "*", "ext-gd": "*",
"gregwar/captcha": "~1.1", "gregwar/captcha": "^1.1.9",
"symfony/form": "~4.0|~5.0", "symfony/form": "~4.0|~5.0",
"symfony/framework-bundle": "~4.0|~5.0", "symfony/framework-bundle": "~4.0|~5.0",
"symfony/translation": "~4.0|^5.0", "symfony/translation": "~4.0|^5.0",