| 1: | <?php | 
| 2: |  | 
| 3: |  | 
| 4: |  | 
| 5: |  | 
| 6: |  | 
| 7: |  | 
| 8: |  | 
| 9: |  | 
| 10: |  | 
| 11: |  | 
| 12: | use Xmf\Request; | 
| 13: | use Xmf\IPAddress; | 
| 14: |  | 
| 15: |  | 
| 16: |  | 
| 17: |  | 
| 18: |  | 
| 19: |  | 
| 20: |  | 
| 21: |  | 
| 22: |  | 
| 23: |  | 
| 24: |  | 
| 25: |  | 
| 26: | defined('XOOPS_ROOT_PATH') || exit('Restricted access'); | 
| 27: |  | 
| 28: |  | 
| 29: |  | 
| 30: |  | 
| 31: | class XoopsCaptchaRecaptcha2 extends XoopsCaptchaMethod | 
| 32: | { | 
| 33: |  | 
| 34: |  | 
| 35: |  | 
| 36: |  | 
| 37: |  | 
| 38: | public function isActive() | 
| 39: | { | 
| 40: | return true; | 
| 41: | } | 
| 42: |  | 
| 43: |  | 
| 44: |  | 
| 45: |  | 
| 46: |  | 
| 47: |  | 
| 48: | public function render() | 
| 49: | { | 
| 50: | $form = '<script src="https://www.google.com/recaptcha/api.js"></script>'; | 
| 51: | $form .= '<div class="form-group"><div class="g-recaptcha" data-sitekey="' | 
| 52: | . $this->config['website_key'] . '"></div></div>'; | 
| 53: | return $form; | 
| 54: | } | 
| 55: |  | 
| 56: |  | 
| 57: |  | 
| 58: |  | 
| 59: |  | 
| 60: |  | 
| 61: |  | 
| 62: |  | 
| 63: | public function verify($sessionName = null) | 
| 64: | { | 
| 65: | $isValid = false; | 
| 66: | $recaptchaResponse = Request::getString('g-recaptcha-response', ''); | 
| 67: | $recaptchaVerifyURL = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $this->config['secret_key'] | 
| 68: | . '&response=' .  $recaptchaResponse . '&remoteip=' . IPAddress::fromRequest()->asReadable(); | 
| 69: | $usedCurl = false; | 
| 70: | if (function_exists('curl_init') && false !== ($curlHandle  = curl_init())) { | 
| 71: | curl_setopt($curlHandle, CURLOPT_URL, $recaptchaVerifyURL); | 
| 72: | curl_setopt($curlHandle, CURLOPT_FAILONERROR, true); | 
| 73: | curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1); | 
| 74: | curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, 5); | 
| 75: | $curlReturn = curl_exec($curlHandle); | 
| 76: | if (false === $curlReturn) { | 
| 77: | trigger_error(curl_error($curlHandle)); | 
| 78: | } else { | 
| 79: | $usedCurl = true; | 
| 80: | $recaptchaCheck = json_decode($curlReturn, true); | 
| 81: | } | 
| 82: | curl_close($curlHandle); | 
| 83: | } | 
| 84: | if (false === $usedCurl) { | 
| 85: | $recaptchaCheck = file_get_contents($recaptchaVerifyURL); | 
| 86: | $recaptchaCheck = json_decode($recaptchaCheck, true); | 
| 87: | } | 
| 88: | if (isset($recaptchaCheck['success']) && $recaptchaCheck['success'] === true) { | 
| 89: | $isValid = true; | 
| 90: | } else { | 
| 91: |  | 
| 92: | $captchaInstance = \XoopsCaptcha::getInstance(); | 
| 93: |  | 
| 94: | foreach ($recaptchaCheck['error-codes'] as $msg) { | 
| 95: | $captchaInstance->message[] = $msg; | 
| 96: | } | 
| 97: | } | 
| 98: |  | 
| 99: | return $isValid; | 
| 100: | } | 
| 101: | } | 
| 102: |  |