Seditio Source
Root |
./othercms/dle15_0/upload/engine/classes/recaptcha.php
<?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
 http://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2021 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: recaptcha.php
-----------------------------------------------------
 Use: ReCaptcha
=====================================================
*/

class ReCaptchaResponse
{
    public
$success;
    public
$errorCodes;
}

class
ReCaptcha
{
    private static
$_siteVerifyUrl = "https://www.google.com/recaptcha/api/siteverify?";
    private
$_secret;
   
   
/**
     * Constructor.
     *
     * @param string $secret shared secret between site and ReCAPTCHA server.
     */
   
function __construct($secret)
    {
       
$this->_secret=$secret;
    }
   
/**
     * Encodes the given data into a query string format.
     *
     * @param array $data array of string elements to be encoded.
     *
     * @return string - encoded request.
     */
   
private function _encodeQS($data)
    {
       
$req = "";
        foreach (
$data as $key => $value) {
           
$req .= $key . '=' . urlencode(stripslashes($value)) . '&';
        }
       
// Cut the last '&'
       
$req=substr($req, 0, strlen($req)-1);
        return
$req;
    }
   
/**
     * Submits an HTTP GET to a reCAPTCHA server.
     *
     * @param string $path url path to recaptcha server.
     * @param array  $data array of parameters to be sent.
     *
     * @return array response
     */
   
private function _submitHTTPGet($path, $data)
    {
       
$req = $this->_encodeQS($data);
       
$response = file_get_contents($path . $req);
        return
$response;
    }
   
/**
     * Calls the reCAPTCHA siteverify API to verify whether the user passes
     * CAPTCHA test.
     *
     * @param string $remoteIp   IP address of end user.
     * @param string $response   response string from recaptcha verification.
     *
     * @return ReCaptchaResponse
     */
   
public function verifyResponse($remoteIp, $response)
    {
       
// Discard empty solution submissions
       
if ($response == null || strlen($response) == 0) {
           
$recaptchaResponse = new ReCaptchaResponse();
           
$recaptchaResponse->success = false;
           
$recaptchaResponse->errorCodes = 'missing-input';
            return
$recaptchaResponse;
        }
       
$getResponse = $this->_submitHttpGet(
           
self::$_siteVerifyUrl,
            array (
               
'secret' => $this->_secret,
               
'remoteip' => $remoteIp,
               
'response' => $response
           
)
        );
       
$answers = json_decode($getResponse, true);

       
$recaptchaResponse = new ReCaptchaResponse();
        if (
trim($answers['success']) == true) {
            if(
$answers['score']) {
                if (
floatval($answers['score']) >= floatval("0.5")) {
                   
$recaptchaResponse->success = true;
                } else
$recaptchaResponse->success = false;    
            } else  
$recaptchaResponse->success = true;
        } else {
           
$recaptchaResponse->success = false;
           
$recaptchaResponse->errorCodes = $answers ['error-codes'];
        }
        return
$recaptchaResponse;
    }
}


?>