diff --git a/Controller/CaptchaController.php b/Controller/CaptchaController.php index acdfa48..345e447 100644 --- a/Controller/CaptchaController.php +++ b/Controller/CaptchaController.php @@ -2,9 +2,9 @@ namespace Gregwar\CaptchaBundle\Controller; -use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Generates a captcha via a URL @@ -16,12 +16,13 @@ class CaptchaController extends Controller /** * Action that is used to generate the captcha, save its code, and stream the image * - * @param \Symfony\Component\HttpFoundation\Request $request * @param string $key * - * @return \Symfony\Component\HttpFoundation\Response + * @return Response + * + * @throws NotFoundHttpException */ - public function generateCaptchaAction(Request $request, $key) + public function generateCaptchaAction($key) { $options = $this->container->getParameter('gregwar_captcha.config'); $session = $this->get('session'); @@ -52,8 +53,9 @@ class CaptchaController extends Controller $response = new Response($generator->generate($options)); $response->headers->set('Content-type', 'image/jpeg'); + $response->headers->set('Pragma', 'no-cache'); + $response->headers->set('Cache-Control','no-cache'); return $response; } } - diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 1f8abd6..a415275 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -53,4 +53,3 @@ class Configuration implements ConfigurationInterface return $treeBuilder; } } - diff --git a/Generator/CaptchaGenerator.php b/Generator/CaptchaGenerator.php index 9e9e302..06fe4d1 100644 --- a/Generator/CaptchaGenerator.php +++ b/Generator/CaptchaGenerator.php @@ -166,4 +166,3 @@ class CaptchaGenerator return $phrase; } } - diff --git a/Generator/ImageFileHandler.php b/Generator/ImageFileHandler.php index 1a47420..71dda0f 100644 --- a/Generator/ImageFileHandler.php +++ b/Generator/ImageFileHandler.php @@ -103,4 +103,3 @@ class ImageFileHandler } } } - diff --git a/README.md b/README.md index 2123d64..67c0cfe 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ You can define the following configuration options globally or on the CaptchaTyp * **disabled**: disable globally the CAPTCHAs (can be useful in dev environment), it will still appear but won't be editable and won't be checked * **length**: the length of the captcha (number of chars, default 5) -* **quality**: jpeg quality of captchas (default=15) +* **quality**: jpeg quality of captchas (default=30) * **charset**: the charset used for code generation (default=abcdefhjkmnprstuvwxyz23456789) * **font**: the font to use (default is random among some pre-provided fonts), this should be an absolute path * **keep_value**: the value will be the same until the form is posted, even if the page is refreshed (default=true) diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 64827f0..7b552ca 100755 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -1,6 +1,13 @@ +parameters: + gregwar_captcha.captcha_type.class: Gregwar\CaptchaBundle\Type\CaptchaType + gregwar_captcha.captcha_generator.class: Gregwar\CaptchaBundle\Generator\CaptchaGenerator + gregwar_captcha.image_file_handler.class: Gregwar\CaptchaBundle\Generator\ImageFileHandler + gregwar_captcha.captcha_builder.class: Gregwar\Captcha\CaptchaBuilder + gregwar_captcha.phrase_builder.class: Gregwar\Captcha\PhraseBuilder + services: captcha.type: - class: Gregwar\CaptchaBundle\Type\CaptchaType + class: %gregwar_captcha.captcha_type.class% arguments: - @session - @gregwar_captcha.generator @@ -10,7 +17,7 @@ services: - { name: form.type, alias: captcha } gregwar_captcha.generator: - class: Gregwar\CaptchaBundle\Generator\CaptchaGenerator + class: %gregwar_captcha.captcha_generator.class% arguments: - @router - @gregwar_captcha.captcha_builder @@ -18,7 +25,7 @@ services: - @gregwar_captcha.image_file_handler gregwar_captcha.image_file_handler: - class: Gregwar\CaptchaBundle\Generator\ImageFileHandler + class: %gregwar_captcha.image_file_handler.class% arguments: - %gregwar_captcha.config.image_folder% - %gregwar_captcha.config.web_path% @@ -26,7 +33,7 @@ services: - %gregwar_captcha.config.expiration% gregwar_captcha.captcha_builder: - class: Gregwar\Captcha\CaptchaBuilder + class: %gregwar_captcha.captcha_builder.class% gregwar_captcha.phrase_builder: - class: Gregwar\Captcha\PhraseBuilder + class: %gregwar_captcha.phrase_builder.class% diff --git a/Resources/translations/gregwar_captcha.bg.yml b/Resources/translations/gregwar_captcha.bg.yml new file mode 100644 index 0000000..c721782 --- /dev/null +++ b/Resources/translations/gregwar_captcha.bg.yml @@ -0,0 +1 @@ +Renew: Обнови diff --git a/Resources/translations/gregwar_captcha.pl.yml b/Resources/translations/gregwar_captcha.pl.yml new file mode 100644 index 0000000..00473ad --- /dev/null +++ b/Resources/translations/gregwar_captcha.pl.yml @@ -0,0 +1 @@ +Renew: Przeładuj diff --git a/Resources/translations/validators.bg.yml b/Resources/translations/validators.bg.yml new file mode 100644 index 0000000..5eb0d66 --- /dev/null +++ b/Resources/translations/validators.bg.yml @@ -0,0 +1 @@ +Bad code value: Грешен код diff --git a/Resources/translations/validators.pl.yml b/Resources/translations/validators.pl.yml new file mode 100644 index 0000000..b053feb --- /dev/null +++ b/Resources/translations/validators.pl.yml @@ -0,0 +1 @@ +Bad code value: Kod jest niepoprawny diff --git a/Type/CaptchaType.php b/Type/CaptchaType.php index 2b10374..17b4e2f 100644 --- a/Type/CaptchaType.php +++ b/Type/CaptchaType.php @@ -22,18 +22,12 @@ use Gregwar\CaptchaBundle\Generator\CaptchaGenerator; class CaptchaType extends AbstractType { /** - * @var \Symfony\Component\HttpFoundation\Session\SessionInterface + * @var SessionInterface */ protected $session; /** - * The session key - * @var string - */ - protected $key = null; - - /** - * @var \Gregwar\CaptchaBundle\Generator\CaptchaGenerator + * @var CaptchaGenerator */ protected $generator; @@ -49,9 +43,10 @@ class CaptchaType extends AbstractType private $options = array(); /** - * @param \Symfony\Component\HttpFoundation\Session\SessionInterface $session - * @param \Gregwar\CaptchaBundle\Generator\CaptchaGenerator $generator - * @param array $options + * @param SessionInterface $session + * @param CaptchaGenerator $generator + * @param TranslatorInterface $translator + * @param array $options */ public function __construct(SessionInterface $session, CaptchaGenerator $generator, TranslatorInterface $translator, $options) { @@ -62,17 +57,14 @@ class CaptchaType extends AbstractType } /** - * @param \Symfony\Component\Form\FormBuilderInterface $builder - * @param array $options + * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { - $this->key = 'gcb_'.$builder->getForm()->getName(); - $validator = new CaptchaValidator( $this->translator, $this->session, - $this->key, + sprintf('gcb_%s', $builder->getForm()->getName()), $options['invalid_message'], $options['bypass_code'], $options['humanity'] @@ -82,33 +74,31 @@ class CaptchaType extends AbstractType } /** - * @param \Symfony\Component\Form\FormView $view - * @param \Symfony\Component\Form\FormInterface $form - * @param array $options + * {@inheritdoc} */ public function buildView(FormView $view, FormInterface $form, array $options) { - $isHuman = false; - if ($options['reload'] && !$options['as_url']) { throw new \InvalidArgumentException('GregwarCaptcha: The reload option cannot be set without as_url, see the README for more information'); } + $sessionKey = sprintf('gcb_%s', $form->getName()); + $isHuman = false; + if ($options['humanity'] > 0) { - $humanityKey = $this->key.'_humanity'; + $humanityKey = sprintf('%s_humanity', $sessionKey); if ($this->session->get($humanityKey, 0) > 0) { $isHuman = true; } } if ($options['as_url']) { - $key = $this->key; $keys = $this->session->get($options['whitelist_key'], array()); - if (!in_array($key, $keys)) { - $keys[] = $key; + if (!in_array($sessionKey, $keys)) { + $keys[] = $sessionKey; } $this->session->set($options['whitelist_key'], $keys); - $options['session_key'] = $this->key; + $options['session_key'] = $sessionKey; } $view->vars = array_merge($view->vars, array( @@ -122,15 +112,15 @@ class CaptchaType extends AbstractType )); $persistOptions = array(); - foreach (array('phrase', 'width', 'height', 'distortion', 'length', 'quality') as $key) { + foreach (array('phrase', 'width', 'height', 'distortion', 'length', 'quality', 'background_color', 'text_color') as $key) { $persistOptions[$key] = $options[$key]; } - $this->session->set($this->key, $persistOptions); + $this->session->set($sessionKey, $persistOptions); } /** - * @param \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver + * {@inheritdoc} */ public function setDefaultOptions(OptionsResolverInterface $resolver) { diff --git a/Validator/CaptchaValidator.php b/Validator/CaptchaValidator.php index 6e498d9..4469cec 100644 --- a/Validator/CaptchaValidator.php +++ b/Validator/CaptchaValidator.php @@ -15,7 +15,7 @@ use Symfony\Component\Translation\TranslatorInterface; class CaptchaValidator { /** - * @var \Symfony\Component\HttpFoundation\Session\SessionInterface + * @var SessionInterface */ private $session; @@ -47,10 +47,12 @@ class CaptchaValidator private $translator; /** - * @param \Symfony\Component\HttpFoundation\Session\SessionInterface $session - * @param string $key - * @param string $invalidMessage - * @param string|null $bypassCode + * @param TranslatorInterface $translator + * @param SessionInterface $session + * @param string $key + * @param string $invalidMessage + * @param string $bypassCode + * @param int $humanity */ public function __construct(TranslatorInterface $translator, SessionInterface $session, $key, $invalidMessage, $bypassCode, $humanity) { @@ -67,7 +69,7 @@ class CaptchaValidator */ public function validate(FormEvent $event) { - $form = $form = $event->getForm(); + $form = $event->getForm(); $code = $form->getData(); $expectedCode = $this->getExpectedCode(); @@ -112,7 +114,7 @@ class CaptchaValidator } /** - * Retreive the humanity + * Retrieve the humanity * * @return mixed|null */ diff --git a/composer.json b/composer.json index 81abbee..f466389 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,9 @@ ], "require": { "php": ">=5.3.0", - "gregwar/captcha": "v1.0.11" + "gregwar/captcha": "~1.0.11", + "symfony/framework-bundle": "~2.1", + "symfony/form": "~2.1" }, "autoload": { "psr-0": {