Subversion Repositories php_guestbook

Rev

Blame | Last modification | View Log | RSS feed

  1. <?php
  2. /**
  3.  * This is a PHP library that handles calling reCAPTCHA.
  4.  *
  5.  * @copyright Copyright (c) 2015, Google Inc.
  6.  * @link      http://www.google.com/recaptcha
  7.  *
  8.  * Permission is hereby granted, free of charge, to any person obtaining a copy
  9.  * of this software and associated documentation files (the "Software"), to deal
  10.  * in the Software without restriction, including without limitation the rights
  11.  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12.  * copies of the Software, and to permit persons to whom the Software is
  13.  * furnished to do so, subject to the following conditions:
  14.  *
  15.  * The above copyright notice and this permission notice shall be included in
  16.  * all copies or substantial portions of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  23.  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  24.  * THE SOFTWARE.
  25.  */
  26.  
  27. namespace ReCaptcha;
  28.  
  29. /**
  30.  * reCAPTCHA client.
  31.  */
  32. class ReCaptcha
  33. {
  34.     /**
  35.      * Version of this client library.
  36.      * @const string
  37.      */
  38.     const VERSION = 'php_1.1.3';
  39.  
  40.     /**
  41.      * Shared secret for the site.
  42.      * @var string
  43.      */
  44.     private $secret;
  45.  
  46.     /**
  47.      * Method used to communicate with service. Defaults to POST request.
  48.      * @var RequestMethod
  49.      */
  50.     private $requestMethod;
  51.  
  52.     /**
  53.      * Create a configured instance to use the reCAPTCHA service.
  54.      *
  55.      * @param string $secret shared secret between site and reCAPTCHA server.
  56.      * @param RequestMethod $requestMethod method used to send the request. Defaults to POST.
  57.      * @throws \RuntimeException if $secret is invalid
  58.      */
  59.     public function __construct($secret, RequestMethod $requestMethod = null)
  60.     {
  61.         if (empty($secret)) {
  62.             throw new \RuntimeException('No secret provided');
  63.         }
  64.  
  65.         if (!is_string($secret)) {
  66.             throw new \RuntimeException('The provided secret must be a string');
  67.         }
  68.  
  69.         $this->secret = $secret;
  70.  
  71.         if (!is_null($requestMethod)) {
  72.             $this->requestMethod = $requestMethod;
  73.         } else {
  74.             $this->requestMethod = new RequestMethod\Post();
  75.         }
  76.     }
  77.  
  78.     /**
  79.      * Calls the reCAPTCHA siteverify API to verify whether the user passes
  80.      * CAPTCHA test.
  81.      *
  82.      * @param string $response The value of 'g-recaptcha-response' in the submitted form.
  83.      * @param string $remoteIp The end user's IP address.
  84.      * @return Response Response from the service.
  85.      */
  86.     public function verify($response, $remoteIp = null)
  87.     {
  88.         // Discard empty solution submissions
  89.         if (empty($response)) {
  90.             $recaptchaResponse = new Response(false, array('missing-input-response'));
  91.             return $recaptchaResponse;
  92.         }
  93.  
  94.         $params = new RequestParameters($this->secret, $response, $remoteIp, self::VERSION);
  95.         $rawResponse = $this->requestMethod->submit($params);
  96.         return Response::fromJson($rawResponse);
  97.     }
  98. }
  99.