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: