From d8d8cccfb7fca4b6842fa47f19ca7ce38d346fc2 Mon Sep 17 00:00:00 2001 From: Nadir Hamid Date: Mon, 15 Jun 2026 19:49:32 +0000 Subject: [PATCH] integrate CF turnstile into contact page --- .../Admin/CustomizationsController.php | 21 ++++---------- app/app/Http/Controllers/HomeController.php | 5 ++++ app/app/Providers/AppServiceProvider.php | 28 +++++++++++++++++++ app/resources/lang/en/validation.php | 3 ++ .../views/admin/customizations/view.blade.php | 21 +++++++++++++- app/resources/views/pages/contact.blade.php | 7 +++++ 6 files changed, 69 insertions(+), 16 deletions(-) diff --git a/app/app/Http/Controllers/Admin/CustomizationsController.php b/app/app/Http/Controllers/Admin/CustomizationsController.php index bfd21e1c7..6b5293969 100755 --- a/app/app/Http/Controllers/Admin/CustomizationsController.php +++ b/app/app/Http/Controllers/Admin/CustomizationsController.php @@ -222,6 +222,12 @@ public function save(Request $request) } $update_params['customer_satisfaction_survey_enabled'] = $customer_satisfaction_survey_enabled; + $recaptcha_enabled = false; + if ( $update_params['recaptcha_enabled'] =='yes') { + $recaptcha_enabled = true; + } + $update_params['recaptcha_enabled'] = $recaptcha_enabled; + $enable_google_signin = false; if ( !empty( $update_params['enable_google_signin'] ) ) { @@ -298,21 +304,6 @@ public function save(Request $request) $update_params['allow_app_feedback'] = $allow_app_feedback; - - - $recaptcha_enabled = false; - - if ( !empty( $update_params['recaptcha_enabled'] ) ) { - $recaptcha_enabled = true; - } - $update_params['recaptcha_enabled'] = $recaptcha_enabled; - - - if ( !empty( $update_params['recaptcha_enabled'] ) ) { - $recaptcha_enabled = true; - } - $update_params['recaptcha_enabled'] = $recaptcha_enabled; - if ( !empty( $update_params['disqus_enabled'] ) ) { $disqus_enabled = true; } diff --git a/app/app/Http/Controllers/HomeController.php b/app/app/Http/Controllers/HomeController.php index 5b3ff313f..967d3995f 100755 --- a/app/app/Http/Controllers/HomeController.php +++ b/app/app/Http/Controllers/HomeController.php @@ -219,6 +219,11 @@ public function contactSubmit(Request $request) $request->session()->flash('status', 'Invalid captcha validation. Please try again.'); return view('pages.contact', $vars); } + } else { + // Call validation using string format standard in 5.1 + $this->validate($request, [ + 'cf-turnstile-response' => 'required|turnstile', + ]); } if (empty($data['first_name'])) { $request->session()->flash('status', 'Please fill in first name..'); diff --git a/app/app/Providers/AppServiceProvider.php b/app/app/Providers/AppServiceProvider.php index f3b5f6463..e22960a37 100755 --- a/app/app/Providers/AppServiceProvider.php +++ b/app/app/Providers/AppServiceProvider.php @@ -3,6 +3,8 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; +use App\ApiCredentialKVStore; +use Validator; class AppServiceProvider extends ServiceProvider { @@ -19,6 +21,32 @@ public function boot() if ( $ssl ) { \URL::forceSchema('https'); } + Validator::extend('turnstile', function ($attribute, $value, $parameters, $validator) { + $creds = ApiCredentialKVStore::getRecord(); + $secret = $creds['cloudflare_secret_key']; + $ip = request()->ip(); + + // Native cURL payload request for Laravel 5.1 + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, 'https://challenges.cloudflare.com/turnstile/v0/siteverify'); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, [ + 'secret' => $secret, + 'response' => $value, + 'remoteip' => $ip + ]); + + $response = curl_exec($ch); + curl_close($ch); + + if ($response) { + $responseData = json_decode($response, true); + return isset($responseData['success']) && $responseData['success'] === true; + } + + return false; + }); } /** diff --git a/app/resources/lang/en/validation.php b/app/resources/lang/en/validation.php index a48ac724b..17e424a50 100755 --- a/app/resources/lang/en/validation.php +++ b/app/resources/lang/en/validation.php @@ -90,6 +90,9 @@ 'attribute-name' => [ 'rule-name' => 'custom-message', ], + 'cf-turnstile-response' => [ + 'turnstile' => 'The anti-bot verification failed. Please try again.', + ], ], /* diff --git a/app/resources/views/admin/customizations/view.blade.php b/app/resources/views/admin/customizations/view.blade.php index 067baf7cf..019b61e33 100755 --- a/app/resources/views/admin/customizations/view.blade.php +++ b/app/resources/views/admin/customizations/view.blade.php @@ -404,7 +404,8 @@ -
+ +
+ @if ( $record->upgrade_flow == 'IMMEDIATE') + + + @elseif ( $record->upgrade_flow == 'SCHEDULED') + + + @else + + + @endif + +
+
+
diff --git a/app/resources/views/pages/contact.blade.php b/app/resources/views/pages/contact.blade.php index 5985afde1..d5751cec1 100755 --- a/app/resources/views/pages/contact.blade.php +++ b/app/resources/views/pages/contact.blade.php @@ -3,6 +3,7 @@ Contact @endsection @section('content') + @if (Session::has('status'))
@@ -35,6 +36,10 @@

Have queries regarding our offerings? Feel free to contact us.

+ + @if ($errors->has('cf-turnstile-response')) +

{{ $errors->first('cf-turnstile-response') }}

+ @endif
@@ -78,6 +83,8 @@ data-callback='onSubmit' data-action='submit'>Send message @else +
+ @endif