false, 'message' => $strings['recaptcha_invalid_site_key'] ]; } if (!self::validateKeyFormat($secretKey)) { return [ 'success' => false, 'message' => $strings['recaptcha_invalid_key_format'] ]; } return ['success' => true, 'message' => '']; } /** * Process Google API verification result * * @param array|false $verificationResult * @return array{success: bool, message: string} */ public static function processVerificationResult($verificationResult): array { $strings = BackendStrings::getSecurityStrings(); if ($verificationResult === false) { return [ 'success' => false, 'message' => $strings['recaptcha_validation_network_error'] ]; } return self::checkErrorCodes($verificationResult, $strings); } /** * Check for specific error codes in verification result * * @param array $verificationResult * @param array $strings * @return array{success: bool, message: string} */ private static function checkErrorCodes(array $verificationResult, array $strings): array { if (!isset($verificationResult['error-codes'])) { return self::handleSuccessCase($verificationResult, $strings); } $errorCodes = $verificationResult['error-codes']; if (in_array('invalid-input-secret', $errorCodes)) { return [ 'success' => false, 'message' => $strings['recaptcha_invalid_secret_key'] ]; } if (in_array('missing-input-secret', $errorCodes)) { return [ 'success' => false, 'message' => $strings['recaptcha_keys_required'] ]; } // If we get 'invalid-input-response' or 'missing-input-response', // it means the secret key is valid but our test token is invalid if (self::hasValidSecretKeyErrors($errorCodes)) { return [ 'success' => true, 'message' => $strings['recaptcha_credentials_valid'] ]; } return self::handleSuccessCase($verificationResult, $strings); } /** * Check if error codes indicate valid secret key * * @param array $errorCodes * @return bool */ private static function hasValidSecretKeyErrors(array $errorCodes): bool { return in_array('invalid-input-response', $errorCodes) || in_array('missing-input-response', $errorCodes); } /** * Handle the success case of verification * * @param array $verificationResult * @param array $strings * @return array{success: bool, message: string} */ private static function handleSuccessCase(array $verificationResult, array $strings): array { if (!$verificationResult['success']) { return [ 'success' => false, 'message' => $strings['recaptcha_unable_to_validate'] ]; } return [ 'success' => true, 'message' => $strings['recaptcha_credentials_valid'] ]; } }