59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php declare(strict_types=1);
 | |
| /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
 | |
| * CAPTCHA abstraction                                                       *
 | |
| \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 | |
| 
 | |
| function captcha_get_html(): string
 | |
| {
 | |
|     global $config, $user;
 | |
| 
 | |
|     if (DEBUG && ip_in_range($_SERVER['REMOTE_ADDR'], "127.0.0.0/8")) {
 | |
|         return "";
 | |
|     }
 | |
| 
 | |
|     $captcha = "";
 | |
|     if ($user->is_anonymous() && $config->get_bool("comment_captcha")) {
 | |
|         $r_publickey = $config->get_string("api_recaptcha_pubkey");
 | |
|         if (!empty($r_publickey)) {
 | |
|             $captcha = "
 | |
| 				<div class=\"g-recaptcha\" data-sitekey=\"{$r_publickey}\"></div>
 | |
| 				<script type=\"text/javascript\" src=\"https://www.google.com/recaptcha/api.js\"></script>";
 | |
|         } else {
 | |
|             session_start();
 | |
|             $captcha = Securimage::getCaptchaHtml(['securimage_path' => './vendor/dapphp/securimage/']);
 | |
|         }
 | |
|     }
 | |
|     return $captcha;
 | |
| }
 | |
| 
 | |
| function captcha_check(): bool
 | |
| {
 | |
|     global $config, $user;
 | |
| 
 | |
|     if (DEBUG && ip_in_range($_SERVER['REMOTE_ADDR'], "127.0.0.0/8")) {
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     if ($user->is_anonymous() && $config->get_bool("comment_captcha")) {
 | |
|         $r_privatekey = $config->get_string('api_recaptcha_privkey');
 | |
|         if (!empty($r_privatekey)) {
 | |
|             $recaptcha = new \ReCaptcha\ReCaptcha($r_privatekey);
 | |
|             $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
 | |
| 
 | |
|             if (!$resp->isSuccess()) {
 | |
|                 log_info("core", "Captcha failed (ReCaptcha): " . implode("", $resp->getErrorCodes()));
 | |
|                 return false;
 | |
|             }
 | |
|         } else {
 | |
|             session_start();
 | |
|             $securimg = new Securimage();
 | |
|             if ($securimg->check($_POST['captcha_code']) === false) {
 | |
|                 log_info("core", "Captcha failed (Securimage)");
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return true;
 | |
| }
 |