[04/03/2023] Ajout du module ReCaptcha et config

This commit is contained in:
2023-03-04 21:47:58 +01:00
parent 437bd2bf4f
commit 533e3439c6
24 changed files with 886 additions and 15 deletions

View File

@@ -0,0 +1,48 @@
<div class="row">
<div class="col-md-12 general-block-decorator">
<div class="row">
<div class="col-md-12 title title-without-tabs">
{intl d='payzen.bo.default' l="reCAPTCHA Configuration" d='recaptcha.bo.default'}
</div>
</div>
<div class="form-container">
<div class="row">
<div class="col-md-12">
{form name="recaptcha_configuration.form"}
<form action="{url path="/admin/module/recaptcha/configuration"}" method="post">
{form_hidden_fields form=$form}
{if $form_error}
<div class="alert alert-danger">{$form_error_message}</div>
{/if}
{include file = "includes/inner-form-toolbar.html"
hide_flags = true
page_url = "{url path='/admin/module/ReCaptcha'}"
close_url = "{url path='/admin/modules'}"
}
<div class="row">
<div class="col-md-6">
{render_form_field field="site_key" }
{render_form_field field="secret_key"}
<p>{intl l="These infos are available here : " d='recaptcha.bo.default'}<a href="http://www.google.com/recaptcha/admin">http://www.google.com/recaptcha/admin</a></p>
</div>
<div class="col-md-6">
{render_form_field field="captcha_style"}
{if $with_contact_form}
<label></label>
{render_form_field field="add_to_contact_form"}
{/if}
</div>
</div>
</form>
{/form}
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,56 @@
<script src="https://www.google.com/recaptcha/api.js?render={$siteKey}"></script>
<script>var siteKey = "{$siteKey}";</script>
{literal}
<script type="module">
function verifyRecaptcha(form, dataElement) {
const { sitekey, size } = dataElement.dataset;
const id = dataElement.id;
if (!sitekey) return;
return new Promise((resolve, reject) => {
grecaptcha.execute(sitekey, {action: 'submit'}).then((token) => {
if (token) {
resolve(token);
}
reject('Invalid Captcha');
})
});
}
const allForm = document.querySelectorAll('form');
allForm.forEach((form) => {
const dataElement = form.querySelector('.g-recaptcha');
if (!dataElement) return;
form.addEventListener("submit", async (event) => {
event.preventDefault();
event.stopPropagation();
grecaptcha.ready(() =>
{
const response = verifyRecaptcha(form, dataElement)
response.then((token) => {
const customEvent = new CustomEvent('validRecaptcha', {
detail: {
token,
form,
}
})
form.dispatchEvent(customEvent);
})
.catch((error) => console.log(error))
}
);
})
})
</script>
{/literal}

View File

@@ -0,0 +1,23 @@
<script src="https://www.google.com/recaptcha/api.js?hl={lang attr='code'}" async defer></script>
<script>
window.onload = function() {
var captchaDiv = document.querySelector(".g-recaptcha.g-invisible");
if (captchaDiv !== null) {
var form = captchaDiv.parentElement;
form.addEventListener("submit", function (event) {
if (!grecaptcha.getResponse()) {
event.preventDefault(); //prevent form submit
grecaptcha.execute();
}
});
onCompleted = function () {
if (form.reportValidity() !== false) {
form.submit();
}
}
}
}
</script>