[ticket/17413] Add migration for turnstile and acp demo

PHPBB-17413
This commit is contained in:
Marc Alexander 2024-10-12 20:36:12 +02:00
parent 52acd2709b
commit b55b42d09f
No known key found for this signature in database
GPG key ID: 50E0D2423696F995
7 changed files with 146 additions and 3 deletions

View file

@ -0,0 +1,23 @@
<dl>
<dt><div id="captcha_turnstile"></div></dt>
</dl>
{% INCLUDEJS 'https://challenges.cloudflare.com/turnstile/v0/api.js' %}
<script>
function domReady(callBack) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', callBack);
} else {
callBack();
}
}
domReady(() => {
/* global turnstile */
console.debug('_turnstileCb called');
turnstile.render('#captcha_turnstile', {
sitekey: '1x00000000000000000000AA',
theme: 'light',
});
});
</script>

View file

@ -64,4 +64,4 @@ services:
calls:
- ['set_name', ['core.captcha.plugins.turnstile']]
tags:
- { name: catpcha.plugins }
- { name: captcha.plugins }

View file

@ -0,0 +1,41 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
/**
* DO NOT CHANGE
*/
if (!defined('IN_PHPBB'))
{
exit;
}
if (empty($lang) || !is_array($lang))
{
$lang = [];
}
// DEVELOPERS PLEASE NOTE
//
// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
//
// Placeholders can now contain order information, e.g. instead of
// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
// translators to re-order the output of data while ensuring it remains correct
//
// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
// equally where a string contains only two placeholders which are used to wrap text
// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine
$lang = array_merge($lang, [
'CAPTCHA_TURNSTILE' => 'Turnstile',
]);

View file

@ -63,6 +63,17 @@ class legacy_wrapper implements plugin_interface
return false;
}
/**
* {@inheritDoc}
*/
public function set_name(string $name): void
{
if (method_exists($this->legacy_captcha, 'set_name'))
{
$this->legacy_captcha->set_name($name);
}
}
/**
* {@inheritDoc}
*/

View file

@ -44,6 +44,13 @@ interface plugin_interface
*/
public function get_name(): string;
/**
* Set the service name of the plugin
*
* @param string $name
*/
public function set_name(string $name): void;
/**
* Display the captcha for the specified type
*

View file

@ -26,6 +26,8 @@ class turnstile implements plugin_interface
/** @var language */
protected $language;
protected string $service_name = '';
public function __construct(config $config, language $language)
{
$this->config = $config;
@ -34,7 +36,10 @@ class turnstile implements plugin_interface
public function is_available(): bool
{
return ($this->config->offsetGet('captcha_turnstile_key') ?? false);
$this->language->add_lang('captcha_turnstile');
return !empty($this->config->offsetGet('captcha_turnstile_sitekey'))
&& !empty($this->config->offsetGet('captcha_turnstile_secret'));
}
public function has_config(): bool
@ -47,6 +52,14 @@ class turnstile implements plugin_interface
return 'CAPTCHA_TURNSTILE';
}
/**
* {@inheritDoc}
*/
public function set_name(string $name): void
{
$this->service_name = $name;
}
public function init(int $type): void
{
$this->language->add_lang('captcha_turnstile');
@ -147,7 +160,7 @@ class turnstile implements plugin_interface
public function get_demo_template(): string
{
return '';
return 'captcha_turnstile_acp_demo.html';
}
public function garbage_collect(int $confirm_type = 0): void

View file

@ -0,0 +1,48 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\db\migration\data\v400;
use phpbb\db\migration\migration;
class turnstile_captcha extends migration
{
public function effectively_installed(): bool
{
return $this->config->offsetExists('captcha_turnstile_sitekey')
&& $this->config->offsetExists('captcha_turnstile_secret');
}
public static function depends_on(): array
{
return [
'\phpbb\db\migration\data\v400\dev',
];
}
public function update_data(): array
{
return [
['config.add', ['captcha_turnstile_sitekey', '']],
['config.add', ['captcha_turnstile_secret', '']],
];
}
public function revert_data(): array
{
return [
['config.remove', ['captcha_turnstile_sitekey']],
['config.remove', ['captcha_turnstile_secret']],
];
}
}