(Grav GitSync) Automatic Commit from RealStickman
This commit is contained in:
parent
9d978e0c75
commit
6b0616ea64
@ -1,3 +1,9 @@
|
||||
# v7.1.0
|
||||
## 11/16/2022
|
||||
|
||||
1. [](#new)
|
||||
* Added Cloudflare's `turnstile` captcha integration [documentation](https://learn.getgrav.org/17/forms/forms/fields-available#turnstile-field-cloudflare)
|
||||
|
||||
# v7.0.2
|
||||
## 10/05/2022
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
name: Form
|
||||
slug: form
|
||||
type: plugin
|
||||
version: 7.0.2
|
||||
version: 7.1.0
|
||||
description: Enables forms handling and processing
|
||||
icon: check-square
|
||||
author:
|
||||
|
@ -25,6 +25,7 @@ use Grav\Plugin\Form\BasicCaptcha;
|
||||
use Grav\Plugin\Form\Form;
|
||||
use Grav\Plugin\Form\Forms;
|
||||
use Grav\Plugin\Form\TwigExtension;
|
||||
use Grav\Common\HTTP\Client;
|
||||
use ReCaptcha\ReCaptcha;
|
||||
use ReCaptcha\RequestMethod\CurlPost;
|
||||
use RecursiveArrayIterator;
|
||||
@ -34,6 +35,7 @@ use RocketTheme\Toolbox\File\YamlFile;
|
||||
use RocketTheme\Toolbox\File\File;
|
||||
use RocketTheme\Toolbox\Event\Event;
|
||||
use RuntimeException;
|
||||
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
|
||||
use Twig\Environment;
|
||||
use Twig\Extension\CoreExtension;
|
||||
use Twig\Extension\EscaperExtension;
|
||||
@ -440,6 +442,7 @@ class FormPlugin extends Plugin
|
||||
* @param Event $event
|
||||
* @return void
|
||||
* @throws Exception
|
||||
* @throws TransportExceptionInterface
|
||||
*/
|
||||
public function onFormProcessed(Event $event): void
|
||||
{
|
||||
@ -526,6 +529,40 @@ class FormPlugin extends Plugin
|
||||
$event->stopPropagation();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 'turnstile':
|
||||
/** @var Uri $uri */
|
||||
$uri = $this->grav['uri'];
|
||||
|
||||
$turnstile_config = $this->config->get('plugins.form.turnstile');
|
||||
$secret = $turnstile_config['secret_key'] ?? null;
|
||||
$token = $form->getValue('cf-turnstile-response') ?? null;
|
||||
$ip = Uri::ip();
|
||||
|
||||
$client = Client::getClient();
|
||||
$response = $client->request('POST', 'https://challenges.cloudflare.com/turnstile/v0/siteverify', [
|
||||
'body' => [
|
||||
'secret' => $secret,
|
||||
'response' => $token,
|
||||
'remoteip' => $ip
|
||||
]
|
||||
]);
|
||||
|
||||
$content = $response->toArray();
|
||||
|
||||
if (!$content['success']) {
|
||||
$message = $params['message'] ?? $this->grav['language']->translate('PLUGIN_FORM.ERROR_BASIC_CAPTCHA');
|
||||
|
||||
$this->grav->fireEvent('onFormValidationError', new Event([
|
||||
'form' => $form,
|
||||
'message' => $message
|
||||
]));
|
||||
|
||||
$this->grav['log']->addWarning('Form Turnstile invalid: [' . $uri->route() . '] ' . json_encode($content));
|
||||
$event->stopPropagation();
|
||||
return;
|
||||
}
|
||||
|
||||
break;
|
||||
case 'timestamp':
|
||||
$label = $params['label'] ?? 'Timestamp';
|
||||
|
@ -18,6 +18,12 @@ recaptcha:
|
||||
theme: light
|
||||
site_key:
|
||||
secret_key:
|
||||
turnstile:
|
||||
widget: managed # options: [managed | non-interactive | invisible]
|
||||
theme: light # options: [light | dark]
|
||||
site_key:
|
||||
secret_key:
|
||||
|
||||
basic_captcha:
|
||||
type: characters # options: [characters | math]
|
||||
chars:
|
||||
|
@ -5,7 +5,7 @@
|
||||
{% block prepend %}
|
||||
<div class="form-input-addon form-input-prepend">
|
||||
<img id="basic-captcha-reload" src="{{ url('/forms-basic-captcha-image.jpg') }}" alt="human test" />
|
||||
<button id="reload-captcha"><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="#292D32"><path d="M14.74 22.39c4.68-1.24 8-5.49 8-10.4 0-5.95-4.79-10.75-10.75-10.75 -3.11 0-5.78 1.11-7.99 2.95 -.77.64-1.43 1.32-1.98 2.01 -.34.41-.57.75-.69.95 -.22.35-.1.81.25 1.02 .35.21.81.09 1.02-.26 .08-.15.27-.43.56-.79 .49-.62 1.08-1.23 1.76-1.81C6.87 3.67 9.21 2.7 11.94 2.7c5.13 0 9.25 4.12 9.25 9.25 0 4.22-2.86 7.88-6.9 8.94 -.41.1-.64.51-.54.91 .1.4.51.63.91.53Zm-12-14.84V2.99c-.001-.42-.34-.75-.75-.75 -.42 0-.75.33-.75.75v4.56c0 .41.33.75.75.75 .41 0 .75-.34.75-.75Zm-.75.75H4h2.43c.41 0 .75-.34.75-.75 0-.42-.34-.75-.75-.75H4 1.99c-.42 0-.75.33-.75.75 0 .41.33.75.75.75Z"/><path d="M1.25 12c0 1.09.16 2.16.48 3.18 .12.39.54.61.93.49 .39-.13.61-.55.49-.94 -.28-.89-.42-1.81-.42-2.75 0-.42-.34-.75-.75-.75 -.42 0-.75.33-.75.75Zm1.93 6.15c.61.88 1.36 1.67 2.22 2.33 .32.25.79.19 1.05-.14 .25-.33.19-.8-.14-1.06 -.74-.58-1.38-1.25-1.92-2.02 -.24-.34-.71-.43-1.05-.19 -.34.23-.43.7-.19 1.04Zm5.02 3.91c1 .37 2.06.6 3.15.66 .41.02.76-.3.79-.71 .02-.42-.3-.77-.71-.8 -.94-.06-1.85-.25-2.72-.58 -.39-.15-.83.04-.97.43 -.15.38.04.82.43.96Z"/></g></svg></button>
|
||||
<button id="reload-captcha"><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill="currentColor"><path d="M14.74 22.39c4.68-1.24 8-5.49 8-10.4 0-5.95-4.79-10.75-10.75-10.75 -3.11 0-5.78 1.11-7.99 2.95 -.77.64-1.43 1.32-1.98 2.01 -.34.41-.57.75-.69.95 -.22.35-.1.81.25 1.02 .35.21.81.09 1.02-.26 .08-.15.27-.43.56-.79 .49-.62 1.08-1.23 1.76-1.81C6.87 3.67 9.21 2.7 11.94 2.7c5.13 0 9.25 4.12 9.25 9.25 0 4.22-2.86 7.88-6.9 8.94 -.41.1-.64.51-.54.91 .1.4.51.63.91.53Zm-12-14.84V2.99c-.001-.42-.34-.75-.75-.75 -.42 0-.75.33-.75.75v4.56c0 .41.33.75.75.75 .41 0 .75-.34.75-.75Zm-.75.75H4h2.43c.41 0 .75-.34.75-.75 0-.42-.34-.75-.75-.75H4 1.99c-.42 0-.75.33-.75.75 0 .41.33.75.75.75Z"/><path d="M1.25 12c0 1.09.16 2.16.48 3.18 .12.39.54.61.93.49 .39-.13.61-.55.49-.94 -.28-.89-.42-1.81-.42-2.75 0-.42-.34-.75-.75-.75 -.42 0-.75.33-.75.75Zm1.93 6.15c.61.88 1.36 1.67 2.22 2.33 .32.25.79.19 1.05-.14 .25-.33.19-.8-.14-1.06 -.74-.58-1.38-1.25-1.92-2.02 -.24-.34-.71-.43-1.05-.19 -.34.23-.43.7-.19 1.04Zm5.02 3.91c1 .37 2.06.6 3.15.66 .41.02.76-.3.79-.71 .02-.42-.3-.77-.71-.8 -.94-.06-1.85-.25-2.72-.58 -.39-.15-.83.04-.97.43 -.15.38.04.82.43.96Z"/></g></svg></button>
|
||||
<script>
|
||||
function stripQueryString(url) {
|
||||
return url.split("?")[0].split("#")[0];
|
||||
|
@ -0,0 +1,15 @@
|
||||
{% extends "forms/field.html.twig" %}
|
||||
|
||||
{% set config = grav.config %}
|
||||
{% set site_key = field.turnstile_site_key ?? config.plugins.form.turnstile.site_key %}
|
||||
{% set theme = field.theme ?? config.plugins.form.turnstile.theme ?? 'light' %}
|
||||
|
||||
{% block label %}{% endblock %}
|
||||
|
||||
{% block input %}
|
||||
{% do assets.addJs('https://challenges.cloudflare.com/turnstile/v0/api.js', { defer: '', async: '' }) %}
|
||||
|
||||
<div class="turnstile">
|
||||
<div class="cf-turnstile" data-sitekey="{{ site_key }}" data-theme="{{ theme }}"></div>
|
||||
</div>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user