diff --git a/src/MicroweberPackages/App/Providers/AppServiceProvider.php b/src/MicroweberPackages/App/Providers/AppServiceProvider.php index e836b733f7d..42de8628d06 100644 --- a/src/MicroweberPackages/App/Providers/AppServiceProvider.php +++ b/src/MicroweberPackages/App/Providers/AppServiceProvider.php @@ -78,7 +78,8 @@ use MicroweberPackages\Tag\TagsManagerServiceProvider; use MicroweberPackages\Template\TemplateManagerServiceProvider; -use MicroweberPackages\Utils\Captcha\Providers\CaptchaManagerServiceProvider; +use MicroweberPackages\Utils\Captcha\Providers\CaptchaEventServiceProvider; +use MicroweberPackages\Utils\Captcha\Providers\CaptchaServiceProvider; use MicroweberPackages\Utils\Http\Http; use MicroweberPackages\Utils\System\ClassLoader; use Spatie\Permission\PermissionServiceProvider; @@ -257,7 +258,8 @@ public function register() $this->app->register(FormServiceProvider::class); $this->app->register(UserEventServiceProvider::class); $this->app->register(CartEventServiceProvider::class); - $this->app->register(CaptchaManagerServiceProvider::class); + $this->app->register(CaptchaServiceProvider::class); + $this->app->register(CaptchaEventServiceProvider::class); $this->app->register(OptionServiceProvider::class); $this->app->register(BackupServiceProvider::class); $this->app->register(CustomerServiceProvider::class); diff --git a/src/MicroweberPackages/Comment/tests/CommentsTest.php b/src/MicroweberPackages/Comment/tests/CommentsTest.php index 68a21b6acd5..a43a06d8759 100644 --- a/src/MicroweberPackages/Comment/tests/CommentsTest.php +++ b/src/MicroweberPackages/Comment/tests/CommentsTest.php @@ -185,8 +185,19 @@ public function testPostCommentWithCaptcha() route('api.comment.post'), $req ); - $this->assertNotEmpty($commentData['data']); + + + + //try to post again with the same captcha + $commentData = RequestRoute::postJson( + route('api.comment.post'), + $req + ); + $this->assertEquals("captcha", $commentData['form_data_required']); + $this->assertEquals("captcha", $commentData['form_data_module']); + + } diff --git a/src/MicroweberPackages/Utils/Captcha/Adapters/MicroweberCaptcha.php b/src/MicroweberPackages/Utils/Captcha/Adapters/MicroweberCaptcha.php index 387633fa94a..fe901669289 100644 --- a/src/MicroweberPackages/Utils/Captcha/Adapters/MicroweberCaptcha.php +++ b/src/MicroweberPackages/Utils/Captcha/Adapters/MicroweberCaptcha.php @@ -53,6 +53,15 @@ public function validate($key, $captcha_id = null, $unset_if_found = true) } } + public function reset($captcha_id = null) + { + $old = app()->user_manager->session_set('captcha',[]); + $old = app()->user_manager->session_set('captcha_recent',[]); + if($captcha_id){ + $old = app()->user_manager->session_set('captcha_' . $captcha_id,[]); + } + } + public function render($params = array()) { sleep(1); diff --git a/src/MicroweberPackages/Utils/Captcha/CaptchaManager.php b/src/MicroweberPackages/Utils/Captcha/CaptchaManager.php index 2e53c4fc053..c6a92f418b4 100644 --- a/src/MicroweberPackages/Utils/Captcha/CaptchaManager.php +++ b/src/MicroweberPackages/Utils/Captcha/CaptchaManager.php @@ -62,6 +62,13 @@ public function render($params = array()) return $this->adapter->render($params); } + public function reset($captcha_id = null) + { + if (method_exists($this->adapter, 'reset')) { + return $this->adapter->reset($captcha_id); + } + } + public function setAdapter($adapter) { diff --git a/src/MicroweberPackages/Utils/Captcha/Listeners/NewCommentListener.php b/src/MicroweberPackages/Utils/Captcha/Listeners/NewCommentListener.php new file mode 100644 index 00000000000..501814bbdb7 --- /dev/null +++ b/src/MicroweberPackages/Utils/Captcha/Listeners/NewCommentListener.php @@ -0,0 +1,23 @@ +captcha_manager->reset(); + } +} diff --git a/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaEventServiceProvider.php b/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaEventServiceProvider.php new file mode 100644 index 00000000000..79119b37772 --- /dev/null +++ b/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaEventServiceProvider.php @@ -0,0 +1,28 @@ + [ + NewCommentListener::class + ], + ]; +} + diff --git a/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaManagerServiceProvider.php b/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaServiceProvider.php similarity index 93% rename from src/MicroweberPackages/Utils/Captcha/Providers/CaptchaManagerServiceProvider.php rename to src/MicroweberPackages/Utils/Captcha/Providers/CaptchaServiceProvider.php index a61ce8fc8ef..ce59115e4a4 100644 --- a/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaManagerServiceProvider.php +++ b/src/MicroweberPackages/Utils/Captcha/Providers/CaptchaServiceProvider.php @@ -16,7 +16,7 @@ use MicroweberPackages\Utils\Captcha\Validators\CaptchaValidator; -class CaptchaManagerServiceProvider extends ServiceProvider +class CaptchaServiceProvider extends ServiceProvider { /** diff --git a/src/MicroweberPackages/Utils/Captcha/tests/Fakers/FakeCaptcha.php b/src/MicroweberPackages/Utils/Captcha/tests/Fakers/FakeCaptcha.php index 0ff67a92058..666bed6757d 100644 --- a/src/MicroweberPackages/Utils/Captcha/tests/Fakers/FakeCaptcha.php +++ b/src/MicroweberPackages/Utils/Captcha/tests/Fakers/FakeCaptcha.php @@ -26,4 +26,9 @@ public function setAnswer($answer) $this->answer = $answer; } + public function reset($captcha_id = null) + { + $this->answer = null; + } + }