| trecaptchalib.php - cosmo - front and backend for Markov-Chain Monte Carlo inve… | |
| git clone git://src.adamsgaard.dk/cosmo | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| trecaptchalib.php (4574B) | |
| --- | |
| 1 <?php | |
| 2 /** | |
| 3 * This is a PHP library that handles calling reCAPTCHA. | |
| 4 * - Documentation and latest version | |
| 5 * https://developers.google.com/recaptcha/docs/php | |
| 6 * - Get a reCAPTCHA API Key | |
| 7 * https://www.google.com/recaptcha/admin/create | |
| 8 * - Discussion group | |
| 9 * http://groups.google.com/group/recaptcha | |
| 10 * | |
| 11 * @copyright Copyright (c) 2014, Google Inc. | |
| 12 * @link http://www.google.com/recaptcha | |
| 13 * | |
| 14 * Permission is hereby granted, free of charge, to any person obtaining… | |
| 15 * of this software and associated documentation files (the "Software"),… | |
| 16 * in the Software without restriction, including without limitation the… | |
| 17 * to use, copy, modify, merge, publish, distribute, sublicense, and/or … | |
| 18 * copies of the Software, and to permit persons to whom the Software is | |
| 19 * furnished to do so, subject to the following conditions: | |
| 20 * | |
| 21 * The above copyright notice and this permission notice shall be includ… | |
| 22 * all copies or substantial portions of the Software. | |
| 23 * | |
| 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRE… | |
| 25 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILI… | |
| 26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHA… | |
| 27 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| 28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISI… | |
| 29 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALING… | |
| 30 * THE SOFTWARE. | |
| 31 */ | |
| 32 | |
| 33 /** | |
| 34 * A ReCaptchaResponse is returned from checkAnswer(). | |
| 35 */ | |
| 36 class ReCaptchaResponse | |
| 37 { | |
| 38 public $success; | |
| 39 public $errorCodes; | |
| 40 } | |
| 41 | |
| 42 class ReCaptcha | |
| 43 { | |
| 44 private static $_signupUrl = "https://www.google.com/recaptcha/admin… | |
| 45 private static $_siteVerifyUrl = | |
| 46 "https://www.google.com/recaptcha/api/siteverify?"; | |
| 47 private $_secret; | |
| 48 private static $_version = "php_1.0"; | |
| 49 | |
| 50 /** | |
| 51 * Constructor. | |
| 52 * | |
| 53 * @param string $secret shared secret between site and ReCAPTCHA se… | |
| 54 */ | |
| 55 function ReCaptcha($secret) | |
| 56 { | |
| 57 if ($secret == null || $secret == "") { | |
| 58 die("To use reCAPTCHA you must get an API key from <a href='" | |
| 59 . self::$_signupUrl . "'>" . self::$_signupUrl . "</a>"); | |
| 60 } | |
| 61 $this->_secret=$secret; | |
| 62 } | |
| 63 | |
| 64 /** | |
| 65 * Encodes the given data into a query string format. | |
| 66 * | |
| 67 * @param array $data array of string elements to be encoded. | |
| 68 * | |
| 69 * @return string - encoded request. | |
| 70 */ | |
| 71 private function _encodeQS($data) | |
| 72 { | |
| 73 $req = ""; | |
| 74 foreach ($data as $key => $value) { | |
| 75 $req .= $key . '=' . urlencode(stripslashes($value)) . '&'; | |
| 76 } | |
| 77 | |
| 78 // Cut the last '&' | |
| 79 $req=substr($req, 0, strlen($req)-1); | |
| 80 return $req; | |
| 81 } | |
| 82 | |
| 83 /** | |
| 84 * Submits an HTTP GET to a reCAPTCHA server. | |
| 85 * | |
| 86 * @param string $path url path to recaptcha server. | |
| 87 * @param array $data array of parameters to be sent. | |
| 88 * | |
| 89 * @return array response | |
| 90 */ | |
| 91 private function _submitHTTPGet($path, $data) | |
| 92 { | |
| 93 $req = $this->_encodeQS($data); | |
| 94 $response = file_get_contents($path . $req); | |
| 95 return $response; | |
| 96 } | |
| 97 | |
| 98 /** | |
| 99 * Calls the reCAPTCHA siteverify API to verify whether the user pas… | |
| 100 * CAPTCHA test. | |
| 101 * | |
| 102 * @param string $remoteIp IP address of end user. | |
| 103 * @param string $response response string from recaptcha verifica… | |
| 104 * | |
| 105 * @return ReCaptchaResponse | |
| 106 */ | |
| 107 public function verifyResponse($remoteIp, $response) | |
| 108 { | |
| 109 // Discard empty solution submissions | |
| 110 if ($response == null || strlen($response) == 0) { | |
| 111 $recaptchaResponse = new ReCaptchaResponse(); | |
| 112 $recaptchaResponse->success = false; | |
| 113 $recaptchaResponse->errorCodes = 'missing-input'; | |
| 114 return $recaptchaResponse; | |
| 115 } | |
| 116 | |
| 117 $getResponse = $this->_submitHttpGet( | |
| 118 self::$_siteVerifyUrl, | |
| 119 array ( | |
| 120 'secret' => $this->_secret, | |
| 121 'remoteip' => $remoteIp, | |
| 122 'v' => self::$_version, | |
| 123 'response' => $response | |
| 124 ) | |
| 125 ); | |
| 126 $answers = json_decode($getResponse, true); | |
| 127 $recaptchaResponse = new ReCaptchaResponse(); | |
| 128 | |
| 129 if (trim($answers ['success']) == true) { | |
| 130 $recaptchaResponse->success = true; | |
| 131 } else { | |
| 132 $recaptchaResponse->success = false; | |
| 133 $recaptchaResponse->errorCodes = $answers [error-codes]; | |
| 134 } | |
| 135 | |
| 136 return $recaptchaResponse; | |
| 137 } | |
| 138 } | |
| 139 | |
| 140 ?> |