recaptcha integration
This commit is contained in:
parent
9094bf69d9
commit
87920d6b5e
@ -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();
|
||||
|
||||
@ -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
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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) -->
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user