recaptcha["secretKey"]);
try {
$requestMethod = $this->createRequestMethod($generalOptions);
$this->reCaptcha = new ReCaptcha\ReCaptcha($secretKey, $requestMethod);
} catch (\RuntimeException $ex) {
wp_die("reCAPTCHA Exception : " . $ex->getMessage());
}
}
private function createRequestMethod($generalOptions)
{
if ($generalOptions->recaptcha["requestMethod"] !== "auto") {
if ($generalOptions->recaptcha["requestMethod"] === "socket") {
return new ReCaptcha\RequestMethod\SocketPost();
} else if ($generalOptions->recaptcha["requestMethod"] === "curl") {
return new ReCaptcha\RequestMethod\CurlPost();
} else if ($generalOptions->recaptcha["requestMethod"] === "post") {
return new ReCaptcha\RequestMethod\Post();
}
} else {
if (extension_loaded("curl")) {
return new ReCaptcha\RequestMethod\CurlPost();
}
if (function_exists("fsockopen")) {
return new ReCaptcha\RequestMethod\SocketPost();
}
if (ini_get("allow_url_fopen")) {
return new ReCaptcha\RequestMethod\Post();
}
}
}
public function frontFormHtml($name, $args, $options, $currentUser, $uniqueId, $isMainForm)
{
$version = apply_filters("wpdiscuz_recaptcha_version", $options->recaptcha["version"]);
$key = apply_filters("wpdiscuz_recaptcha_site_key", $options->recaptcha["siteKey"]);
$secret = apply_filters("wpdiscuz_recaptcha_secret", $options->recaptcha["secretKey"]);
if ($this->isShowCaptcha($currentUser->ID, $options) && $key && $secret && $version === "2.0") {
?>
fieldDefaultData);
}
public function validateFieldData($fieldName, $args, $options, $currentUser)
{
if ($currentUser && $this->isShowCaptcha($currentUser->ID, $options)) {
$this->initRecaptcha($options);
$recaptchaResponse = Sanitizer::sanitize(INPUT_POST, "g-recaptcha-response", "FILTER_SANITIZE_STRING");
$resp = $this->reCaptchaVerify($recaptchaResponse, $options, "wpdiscuz/addComment");
if (!$resp->isSuccess()) {
$errorMesage = esc_html__("reCAPTCHA verification failed.", "wpdiscuz");
$errors = $resp->getErrorCodes();
if ($errors) {
$errorMesage = "";
$errorMesages = [
"missing-input-secret" => esc_html__("The secret parameter is missing.", "wpdiscuz"),
"invalid-input-secret" => esc_html__("The secret parameter is invalid or malformed.", "wpdiscuz"),
"missing-input-response" => esc_html__("The response parameter is missing.", "wpdiscuz"),
"invalid-input-response" => esc_html__("The response parameter is invalid or malformed.", "wpdiscuz"),
"bad-request" => esc_html__("The request is invalid or malformed.", "wpdiscuz"),
"timeout-or-duplicate" => esc_html__("The response is no longer valid: either is too old or has been used previously.", "wpdiscuz"),
];
foreach ($errors as $error) {
if (isset($errorMesages[$error])) {
$errorMesage .= esc_html__("reCaptcha validation fails. ", "wpdiscuz") . $errorMesages[$error] . "
";
} else {
$errorMesage .= esc_html__("reCaptcha validation fails. Error code: ", "wpdiscuz") . $error . "
";
}
}
}
wp_die($errorMesage);
}
}
}
public function subscribtionRecaptchaHtml($options)
{
$version = apply_filters("wpdiscuz_recaptcha_version", $options->recaptcha["version"]);
$key = apply_filters("wpdiscuz_recaptcha_site_key", $options->recaptcha["siteKey"]);
$secret = apply_filters("wpdiscuz_recaptcha_secret", $options->recaptcha["secretKey"]);
if (!is_user_logged_in() && $options->recaptcha["isShowOnSubscribeForm"] && $key && $secret) {
if ($version === "2.0") {
?>
initRecaptcha($options);
if ($recaptchaResponse) {
$resp = $this->reCaptchaVerify($recaptchaResponse, $options, "wpdiscuz/wpdAddSubscription");
if (!$resp->isSuccess()) {
$valid = false;
}
} else {
$valid = false;
}
return $valid;
}
protected function initDefaultData()
{
$this->fieldDefaultData = [
"name" => "",
"desc" => "",
"show_for_guests" => "0",
"show_for_users" => "0"
];
}
private function reCaptchaVerify($token, $options, $action = "")
{
$recaptchaVersion = apply_filters("wpdiscuz_recaptcha_version", $options->recaptcha["version"]);
if ($recaptchaVersion === "2.0") {
$resp = $this->reCaptcha->verify($token, $this->getIP());
} else {
$score = apply_filters("wpdiscuz_recaptcha_score", $options->recaptcha["score"]);
if($score <= 0){
$score = 0.5;
}elseif ($score >= 1){
$score = 0.9;
}
$resp = $this->reCaptcha->setExpectedAction($action)
->setScoreThreshold($score)
->verify($token, $this->getIP());
}
return $resp;
}
private function getIP()
{
$ip = "";
if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
return $ip;
}
/**
* check if the captcha field show or not
* @return type boolean
*/
public function isShowCaptcha($isUserLoggedIn, $options)
{
return ($isUserLoggedIn && $options->recaptcha["showForUsers"]) || (!$isUserLoggedIn && $options->recaptcha["showForGuests"]);
}
public function editCommentHtml($key, $value, $data, $comment)
{
}
public function frontHtml($value, $args)
{
}
}