From 33a8d4752a9b353946efefc5a3f734fb1808e8c9 Mon Sep 17 00:00:00 2001 From: Peter Ivanov Date: Fri, 22 Oct 2021 16:21:48 +0300 Subject: [PATCH] update --- .../App/Providers/AppServiceProvider.php | 6 ++-- .../Comment/tests/CommentsTest.php | 13 ++++++++- .../Captcha/Adapters/MicroweberCaptcha.php | 9 ++++++ .../Utils/Captcha/CaptchaManager.php | 7 +++++ .../Captcha/Listeners/NewCommentListener.php | 23 +++++++++++++++ .../Providers/CaptchaEventServiceProvider.php | 28 +++++++++++++++++++ ...rovider.php => CaptchaServiceProvider.php} | 2 +- .../Captcha/tests/Fakers/FakeCaptcha.php | 5 ++++ 8 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 src/MicroweberPackages/Utils/Captcha/Listeners/NewCommentListener.php create mode 100644 src/MicroweberPackages/Utils/Captcha/Providers/CaptchaEventServiceProvider.php rename src/MicroweberPackages/Utils/Captcha/Providers/{CaptchaManagerServiceProvider.php => CaptchaServiceProvider.php} (93%) 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; + } + }