From baff84bf27461baee0fc72768faef97711b6c2cc Mon Sep 17 00:00:00 2001 From: Diatrex Date: Thu, 5 Nov 2020 17:13:53 +0300 Subject: [PATCH] =?UTF-8?q?#2592=20=C3=BCye=20kay=C4=B1t=20formuna=20capth?= =?UTF-8?q?ca=20eklenmesi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../addons/anomaly/users-module/register.twig | 8 ++++ .../visiosoft/profile-module/composer.json | 3 +- .../resources/assets/js/captcha.js | 6 +++ .../resources/config/settings/sections.php | 7 +++- .../resources/config/settings/settings.php | 16 +++++++- .../resources/lang/en/message.php | 4 ++ .../resources/lang/en/section.php | 1 + .../resources/lang/en/setting.php | 11 +++++- .../Register2/Register2FormBuilder.php | 17 +++++++++ .../Register2/Register2FormHandler.php | 3 +- .../src/Rules/ReCaptchaRule.php | 37 +++++++++++++++++++ 11 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 addons/default/visiosoft/profile-module/resources/assets/js/captcha.js create mode 100644 addons/default/visiosoft/profile-module/src/Rules/ReCaptchaRule.php diff --git a/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig b/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig index a1a2bb511..4bd2ea16a 100644 --- a/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig +++ b/addons/default/visiosoft/base-theme/resources/views/addons/anomaly/users-module/register.twig @@ -20,6 +20,8 @@ 'url':form.options.url })|raw }} + + {% include 'visiosoft.theme.base::addons/anomaly/users-module/partials/register-form' %}
@@ -76,6 +78,12 @@
+ {% set reCAPTCHASiteKey = setting_value('visiosoft.module.profile::google_captcha_site_key') %} + + {{ asset_add('scripts.js', asset_download('https://www.google.com/recaptcha/api.js?render=' ~ reCAPTCHASiteKey, 60*60*24)) }} {{ asset_add("scripts.js", "visiosoft.theme.base::js/register.js") }} + {{ asset_add("scripts.js", "visiosoft.module.profile::assets/js/captcha.js") }} {% endblock %} diff --git a/addons/default/visiosoft/profile-module/composer.json b/addons/default/visiosoft/profile-module/composer.json index 04878d89c..c36b753bb 100644 --- a/addons/default/visiosoft/profile-module/composer.json +++ b/addons/default/visiosoft/profile-module/composer.json @@ -10,6 +10,7 @@ ] }, "require": { - "maatwebsite/excel": "*" + "maatwebsite/excel": "*", + "google/recaptcha": "1.2.*" } } diff --git a/addons/default/visiosoft/profile-module/resources/assets/js/captcha.js b/addons/default/visiosoft/profile-module/resources/assets/js/captcha.js new file mode 100644 index 000000000..506b864c2 --- /dev/null +++ b/addons/default/visiosoft/profile-module/resources/assets/js/captcha.js @@ -0,0 +1,6 @@ +grecaptcha.ready(function() { + grecaptcha.execute(reCAPTCHASiteKey) + .then(function(token) { + document.getElementById("recaptcha_token").value = token; + }); +}); diff --git a/addons/default/visiosoft/profile-module/resources/config/settings/sections.php b/addons/default/visiosoft/profile-module/resources/config/settings/sections.php index 85d63e090..824048352 100644 --- a/addons/default/visiosoft/profile-module/resources/config/settings/sections.php +++ b/addons/default/visiosoft/profile-module/resources/config/settings/sections.php @@ -4,13 +4,18 @@ return [ 'monitoring' => [ 'stacked' => false, 'tabs' => [ - 'general_setting' => [ 'title' => 'visiosoft.module.profile::section.general_setting', 'fields' => [ 'show_my_ads', 'upload_avatar', 'show_tax_office' ], ], + 'recaptcha' => [ + 'title' => 'visiosoft.module.profile::section.recaptcha', + 'fields' => [ + 'google_captcha_site_key', 'google_captcha_secret_key', 'score_threshold' + ], + ], ], ], ]; diff --git a/addons/default/visiosoft/profile-module/resources/config/settings/settings.php b/addons/default/visiosoft/profile-module/resources/config/settings/settings.php index 6308c2cbd..f9bea65e9 100644 --- a/addons/default/visiosoft/profile-module/resources/config/settings/settings.php +++ b/addons/default/visiosoft/profile-module/resources/config/settings/settings.php @@ -13,11 +13,25 @@ return [ 'default_value' => 1 ], ], - 'show_tax_office' => [ 'type' => 'anomaly.field_type.boolean', 'config' => [ 'default_value' => true, ], ], + 'google_captcha_site_key' => [ + 'type' => 'anomaly.field_type.text', + ], + 'google_captcha_secret_key' => [ + 'type' => 'anomaly.field_type.text', + ], + "score_threshold" => [ + "type" => "anomaly.field_type.decimal", + "config" => [ + "default_value" => 0.5, + "decimals" => 1, + "min" => 0.0, + "max" => 1.0, + ] + ], ]; \ No newline at end of file diff --git a/addons/default/visiosoft/profile-module/resources/lang/en/message.php b/addons/default/visiosoft/profile-module/resources/lang/en/message.php index 49cef7e64..fbd74ccb0 100644 --- a/addons/default/visiosoft/profile-module/resources/lang/en/message.php +++ b/addons/default/visiosoft/profile-module/resources/lang/en/message.php @@ -38,4 +38,8 @@ return [ // Mail 'update_email_mail_subject' => 'Email Updated!', 'update_email_mail_message' => 'Your Email Has Been Updated!', + + // Register + 'recaptcha_field_is_required' => 'reCaptcha field is required.', + 'failed_to_validate_captcha' => 'Failed to validate captcha.', ]; diff --git a/addons/default/visiosoft/profile-module/resources/lang/en/section.php b/addons/default/visiosoft/profile-module/resources/lang/en/section.php index 3564a569b..33c358b85 100644 --- a/addons/default/visiosoft/profile-module/resources/lang/en/section.php +++ b/addons/default/visiosoft/profile-module/resources/lang/en/section.php @@ -8,4 +8,5 @@ return [ 'title' => 'Adress', ], 'general_setting' => 'General Settings', + 'recaptcha' => 'reCAPTCHA', ]; diff --git a/addons/default/visiosoft/profile-module/resources/lang/en/setting.php b/addons/default/visiosoft/profile-module/resources/lang/en/setting.php index d97d7cb1d..9c1e08a97 100644 --- a/addons/default/visiosoft/profile-module/resources/lang/en/setting.php +++ b/addons/default/visiosoft/profile-module/resources/lang/en/setting.php @@ -7,8 +7,17 @@ return [ 'upload_avatar' => [ 'name' => 'Avatar Upload', ], - 'show_tax_office' => [ 'name' => 'Show Tax Office Field', ], + 'google_captcha_site_key' => [ + 'name' => 'Google Captcha Site Key', + ], + 'google_captcha_secret_key' => [ + 'name' => 'Google Captcha Secret Key', + ], + 'score_threshold' => [ + 'name' => 'Score Threshold', + 'instructions' => 'A value between 0 and 1. The higher the threshold the more strict ReCaptcha is in trying to determine if a user is a bot or not.', + ], ]; diff --git a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php index f4c0d6c22..89a9cbc55 100644 --- a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php +++ b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormBuilder.php @@ -4,6 +4,7 @@ use Anomaly\Streams\Platform\Ui\Form\FormBuilder; use Visiosoft\ProfileModule\Profile\Register2\Command\SetOptions; use Anomaly\UsersModule\User\UserModel; use Visiosoft\ProfileModule\Profile\Validation\ValidateRegister; +use Visiosoft\ProfileModule\Rules\ReCaptchaRule; /** * Class RegisterFormBuilder @@ -37,6 +38,22 @@ class Register2FormBuilder extends FormBuilder * @var array */ protected $fields = [ + 'recaptcha_token' => [ + 'required' => true, + 'type' => 'anomaly.field_type.text', + 'config' => [ + "max" => 0, + ], + 'rules' => [ + 'valid_recaptcha' + ], + 'validators' => [ + 'valid_recaptcha' => [ + 'message' => false, + 'handler' => ReCaptchaRule::class + ] + ] + ], 'username' => [ 'required' => true, ], diff --git a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php index 3dd4ba818..cf49a76ab 100644 --- a/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php +++ b/addons/default/visiosoft/profile-module/src/Profile/Register2/Register2FormHandler.php @@ -62,7 +62,8 @@ class Register2FormHandler $fields['accept_terms'], $fields['accept_protection_law'], $fields['accept_privacy_terms'], - $fields['receive_sms_emails'] + $fields['receive_sms_emails'], + $fields['recaptcha_token'] ); $register = $users->create($fields); diff --git a/addons/default/visiosoft/profile-module/src/Rules/ReCaptchaRule.php b/addons/default/visiosoft/profile-module/src/Rules/ReCaptchaRule.php new file mode 100644 index 000000000..e12f90c46 --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Rules/ReCaptchaRule.php @@ -0,0 +1,37 @@ +message = $message; + } + + public function handle($attribute, $value) + { + if (empty($value)) { + $this->message->error(trans('visiosoft.module.profile::message.recaptcha_field_is_required')); + + return false; + } + + $recaptcha = new ReCaptcha(setting_value('visiosoft.module.profile::google_captcha_secret_key')); + + $resp = $recaptcha->setExpectedHostname(request()->server('SERVER_NAME')) + ->setScoreThreshold(setting_value('visiosoft.module.profile::score_threshold')) + ->verify($value, request()->server('REMOTE_ADDR')); + + if (!$resp->isSuccess()) { + $this->message->error('visiosoft.module.profile::message.failed_to_validate_captcha'); + + return false; + } + + return true; + } +} \ No newline at end of file