ldc-doux/app/Lib/Helpers/ToolboxHelper.php

56 lines
2.6 KiB
PHP
Raw Permalink Normal View History

2023-06-26 08:52:32 +00:00
<?php
namespace App\Lib\Helpers;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
class ToolboxHelper
{
/**
* Validate recaptcha
*
* @param Request $request
* @param boolean $isV3
* @return void
*/
public static function validateRecaptcha(Request $request, bool $isV3 = true)
{
Validator::validate($request->all(), [
'g-recaptcha-response' => [
'required', 'string',
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed, Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
2026-10-27 09:12:51 +01:00
function ($attribute, $value, $fail) use ($isV3): void {
2023-06-26 08:52:32 +00:00
try {
$response = Http::asForm()->post('https://www.google.com/recaptcha/api/siteverify', [
'secret' => config('services.google.recaptcha.private'),
'response' => \strval($value),
2026-10-27 09:12:51 +01:00
'remoteip' => resolve('clientIp')
2023-06-26 08:52:32 +00:00
]);
2026-10-27 09:12:51 +01:00
throw_if($e = $response->toException(), $e);
2023-06-26 08:52:32 +00:00
if ($isV3) {
2026-10-27 09:12:51 +01:00
throw_if(!$response->json('success') or
!$response->json('challenge_ts') or
\Illuminate\Support\Facades\Date::parse($response->json('challenge_ts'))->lessThan(\now('utc')->subMinutes(5)) or
$response->json('hostname') !== \parse_url(config('app.url'), \PHP_URL_HOST) or
!$response->json('score'), \RuntimeException::class);
2023-06-26 08:52:32 +00:00
if (\floatval($response->json('score')) < 0.8) {
$fail("Vous n'avez pas obtenu un score assez élevé lors de la validation du recaptcha");
}
return;
}
2026-10-27 09:12:51 +01:00
throw_if(!$response->json('success') or
!$response->json('challenge_ts') or
\Illuminate\Support\Facades\Date::parse($response->json('challenge_ts'))->lessThan(\now('utc')->subMinutes(5)) or
$response->json('hostname') !== \parse_url(config('app.url'), \PHP_URL_HOST), \RuntimeException::class);
} catch (\Exception) {
2023-06-26 08:52:32 +00:00
$fail('Erreur lors de la validation du formulaire veuillez réssayer');
} //end try
}
]
], [], ['g-recaptcha-response' => 'reCaptcha']);
}
}