recaptcha integration

This commit is contained in:
merelendor 2022-07-25 20:10:52 +03:00
parent 9094bf69d9
commit 87920d6b5e
7 changed files with 267 additions and 201 deletions

View File

@ -90,6 +90,30 @@ function checkRequestIsLocal()
return false;
}
function checkRecaptchaRequest($token, $ipAddress)
{
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($c, CURLOPT_TIMEOUT, 30);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, [
"secret" => RECAPTCHA_SECRET_KEY,
"response" => $token,
"remoteip" => $ipAddress,
]);
$response = curl_exec($c) or die(curl_error($c));
curl_close($c);
$response_decoded = json_decode($response, true);
return $response_decoded['success'];
}
if($_SERVER['REMOTE_USER'] && strpos($_SERVER['REMOTE_USER'], "Bearer") > -1)
{
$token = str_replace("Bearer ", "", $_SERVER['REMOTE_USER']);
@ -567,11 +591,13 @@ switch($PARAM_1)
{
$ipAddress = GeoIp\Manager::getRealIp();
$result = GeoIp\Manager::getDataResult($ipAddress, "ru");
$arr = Array();
if(checkRecaptchaRequest($_REQUEST['recaptcha_token'], $ipAddress))
{
$_REQUEST['FORM_FIELD_REGION'] = $result->getGeoData()->regionName.", ".$result->getGeoData()->cityName;
$error = "";
$arr = Array();
$form_errors = Array();
$arParams['request'] = $_REQUEST;
$attach = false;
@ -706,7 +732,6 @@ switch($PARAM_1)
CFormResult::Mail($RESULT_ID);
}
//HERE
if($form_code === "FORM_LEASING_REQUESTS")
{
$url = API_HOST."/site/RequestFromSite";
@ -760,8 +785,15 @@ switch($PARAM_1)
$arr['status'] = "error";
$arr['errors'] = $form_errors;
}
$arr['request'] = $_REQUEST;
$arr['answers'] = $formAnswers;
}
else
{
$arr['status'] = "error";
$arr['message'] = "recaptcha_error";
}
print json_encode($arr);
die();

View File

@ -56,11 +56,17 @@ function form_leasing_request_submit()
formData.append("FORM_FIELD_TERM", $("#FORM_FIELD_TERM").val() ? $("#FORM_FIELD_TERM").val() : "");
formData.append("FORM_FIELD_REDEMPTION", $("#FORM_FIELD_REDEMPTION").val() ? $("#FORM_FIELD_REDEMPTION").val() : "");
$.ajax(
grecaptcha.ready(function()
{
grecaptcha.execute($("meta[name=recaptcha_site_key]").attr("content"), { action: 'submit' }).then(function(token)
{
formData.append("recaptcha_token", token);
$.ajax({
url: "/api/forms/", type: 'POST', success: function(response)
{
if(response.status == "complete")
console.log("response", response);
if(response.status === "complete")
{
$("#form_leasing_process").css("display","none");
$("#form_leasing_success").css("display","flex");
@ -70,19 +76,27 @@ function form_leasing_request_submit()
leasing_form_submitting = false;
}
else if(response.status == "error")
else if(response.status === "error")
{
for(var i in response.errors)
{
$("#form_leasing_request").find("*[name="+response.errors[i]+"]").addClass("error");
}
$("#form_leasing_process").css("display","none");
$("#form_leasing_fail").css("display","flex").parent().css("backgroundColor", "#2C2D2E");
$("#send_button_text").css("display", "block");
$("#send_button_spinner").css("display", "none");
leasing_form_submitting = false;
}
}
}, data: formData,
dataType: "json",
cache: false, contentType: false, processData: false
});
});
});
}
}
}

View File

@ -84,6 +84,9 @@ $this->setFrameMode(true);
<div id="form_leasing_success" style="min-height: 400px; align-items: center; justify-content: center; display: none;">
<p style="color: #fff; font-size: 24px; line-height: 34px;">Благодарим Вас за обращение, наши специалисты свяжутся с Вами в ближайшее время.</p>
</div>
<div id="form_leasing_fail" style="background-color: #2C2D2E; min-height: 400px; align-items: center; justify-content: center; display: none;">
<p style="color: #fff; font-size: 24px; line-height: 34px;">Сожалеем, запросы, отправляемые с Вашего устройства похожи на автоматические. Пожалуйста, воспользуйтесь другим браузером/подключением или попробуйте позднее.</p>
</div>
</form>
</div>
</div>

View File

@ -59,6 +59,11 @@ function form_vacancy_submit()
formData.append("FORM_FIELD_PAGE_NAME", document.title);
formData.append("FORM_FIELD_PAGE_URL", window.location.href);
grecaptcha.ready(function()
{
grecaptcha.execute($("meta[name=recaptcha_site_key]").attr("content"), { action: 'submit' }).then(function(token)
{
formData.append("recaptcha_token", token);
$.ajax(
{
url: "/api/forms/", type: 'POST', success: function(response)
@ -78,14 +83,22 @@ function form_vacancy_submit()
for(var i in response.errors)
{
$("#form_vacancy").find("*[name="+response.errors[i]+"]").addClass("error");
}
$("#form_vacancy_process").css("display","none");
$("#form_vacancy_fail").css("display","flex").parent().css("backgroundColor", "#2C2D2E");
$("#send_button_text").css("display", "block");
$("#send_button_spinner").css("display", "none");
vacancy_form_submitting = false;
}
}
}, data: formData,
dataType: "json",
cache: false, contentType: false, processData: false
});
});
});
}
}
}

View File

@ -101,6 +101,9 @@ $this->setFrameMode(true);
<div id="form_vacancy_success" style="min-height: 400px; align-items: center; justify-content: center; display: none;">
<p style="color: #fff; font-size: 24px; line-height: 34px;">Благодарим Вас за обращение, наши специалисты свяжутся с Вами в ближайшее время.</p>
</div>
<div id="form_leasing_fail" style="background-color: #2C2D2E; min-height: 400px; align-items: center; justify-content: center; display: none;">
<p style="color: #fff; font-size: 24px; line-height: 34px;">Сожалеем, запросы, отправляемые с Вашего устройства похожи на автоматические. Пожалуйста, воспользуйтесь другим браузером/подключением или попробуйте позднее.</p>
</div>
</form>
</div>
</div>

View File

@ -76,9 +76,9 @@
<button class="close" area-label="Закрыть"></button>
<p>Мы <a href="/cookies/">используем cookies</a> для улучшения использования сайта.</p>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://unpkg.com/embla-carousel/embla-carousel.umd.js"></script>
<script src="https://www.google.com/recaptcha/api.js?render=<?= RECAPTCHA_SITE_KEY; ?>"></script>
<script src="/local/templates/evolution/js/rangeslider.min.js"></script>
<script src="/local/templates/evolution/js/main.js"></script>
</body>

View File

@ -49,6 +49,7 @@ IncludeTemplateLangFile(__FILE__);
<meta property="og:description" content="" />
<meta name="theme-color" content="#1C01A9" />
<meta name="recaptcha_site_key" content="<?= RECAPTCHA_SITE_KEY; ?>" />
</head>
<body>
<!-- Google Tag Manager (noscript) -->