13 changed files with 1206 additions and 60 deletions
@ -0,0 +1,89 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\Wrappers; |
||||
|
|
||||
|
require_once __DIR__ . "/../../vendor/autoload.php"; |
||||
|
|
||||
|
// Include Google Cloud dependencies using Composer |
||||
|
use App\Configuration; |
||||
|
use App\Enumerators\SessionElement; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\Assessment; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\Event; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\Key; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\RecaptchaEnterpriseServiceClient; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\TokenProperties\InvalidReason; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\WebKeySettings; |
||||
|
use Google\Cloud\RecaptchaEnterprise\V1\WebKeySettings\IntegrationType; |
||||
|
use Grpc\Gcp\Config; |
||||
|
|
||||
|
class CAPTCHAWrapper |
||||
|
{ |
||||
|
public static function CreateAssessment( |
||||
|
string $token, |
||||
|
string $action |
||||
|
): ?float |
||||
|
{ |
||||
|
|
||||
|
$credFilePath = __DIR__ . "/../../Configuration/GCCServiceAccountCreds.json"; |
||||
|
putenv("GOOGLE_APPLICATION_CREDENTIALS=$credFilePath"); |
||||
|
|
||||
|
// Create the reCAPTCHA client. |
||||
|
// TODO: Cache the client generation code (recommended) or call client.close() before exiting the method. |
||||
|
$client = new RecaptchaEnterpriseServiceClient(); |
||||
|
|
||||
|
$project = Configuration::GetConfig("reCAPTCHA", "ProjectID"); |
||||
|
|
||||
|
$projectName = $client->projectName($project); |
||||
|
|
||||
|
// Set the properties of the event to be tracked. |
||||
|
$event = (new Event()) |
||||
|
->setSiteKey(Configuration::GetConfig("reCAPTCHA", "KeyID")) |
||||
|
->setToken($token); |
||||
|
|
||||
|
// Build the assessment request. |
||||
|
$assessment = (new Assessment())->setEvent($event); |
||||
|
|
||||
|
$response = $client->createAssessment( |
||||
|
$projectName, |
||||
|
$assessment |
||||
|
); |
||||
|
|
||||
|
// Check if the token is valid. |
||||
|
if ($response->getTokenProperties()->getValid() == false) { |
||||
|
// printf('The CreateAssessment() call failed because the token was invalid for the following reason: '); |
||||
|
// printf(InvalidReason::name($response->getTokenProperties()->getInvalidReason())); |
||||
|
return floatval(-1); |
||||
|
} |
||||
|
|
||||
|
// Check if the expected action was executed. |
||||
|
if ($response->getTokenProperties()->getAction() == $action) { |
||||
|
// Get the risk score and the reason(s). |
||||
|
// For more information on interpreting the assessment, see: |
||||
|
// https://cloud.google.com/recaptcha-enterprise/docs/interpret-assessment |
||||
|
// printf('The score for the protection action is:'); |
||||
|
return $response->getRiskAnalysis()->getScore(); |
||||
|
} else { |
||||
|
// printf('The action attribute in your reCAPTCHA tag does not match the action you are expecting to score'); |
||||
|
} |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
public static function HandleCaptchaResponse(string $captchaResponse): void |
||||
|
{ |
||||
|
$assessmentResponse = CAPTCHAWrapper::CreateAssessment( |
||||
|
token: $captchaResponse, |
||||
|
action: 'submit' |
||||
|
); |
||||
|
|
||||
|
if ($assessmentResponse == null) |
||||
|
{ |
||||
|
die("captcha assessment is null"); |
||||
|
} |
||||
|
if ($assessmentResponse <= floatval(Configuration::GetConfig("reCAPTCHA", "AcceptableLowerBoundsForLogin"))) |
||||
|
{ |
||||
|
die("go away robot!"); |
||||
|
} |
||||
|
|
||||
|
SessionWrapper::Set(SessionElement::LAST_ASSESSMENT_RESULT, $assessmentResponse); |
||||
|
} |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
<?php |
||||
|
|
||||
|
use App\Wrappers\SessionWrapper; |
||||
|
|
||||
|
require_once __DIR__ . "/../vendor/autoload.php"; |
||||
|
|
||||
|
SessionWrapper::Start(); |
||||
|
|
||||
|
$_SESSION = []; |
||||
|
|
||||
|
header("Location: /"); |
||||
|
die(); |
File diff suppressed because it is too large
Loading…
Reference in new issue