From b55b42d09f3913078c793d78efb9b15eed9aeb67 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 12 Oct 2024 20:36:12 +0200 Subject: [PATCH] [ticket/17413] Add migration for turnstile and acp demo PHPBB-17413 --- .../adm/style/captcha_turnstile_acp_demo.html | 23 +++++++++ .../default/container/services_captcha.yml | 2 +- phpBB/language/en/captcha_turnstile.php | 41 ++++++++++++++++ .../phpbb/captcha/plugins/legacy_wrapper.php | 11 +++++ .../captcha/plugins/plugin_interface.php | 7 +++ phpBB/phpbb/captcha/plugins/turnstile.php | 17 ++++++- .../migration/data/v400/turnstile_captcha.php | 48 +++++++++++++++++++ 7 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 phpBB/adm/style/captcha_turnstile_acp_demo.html create mode 100644 phpBB/language/en/captcha_turnstile.php create mode 100644 phpBB/phpbb/db/migration/data/v400/turnstile_captcha.php diff --git a/phpBB/adm/style/captcha_turnstile_acp_demo.html b/phpBB/adm/style/captcha_turnstile_acp_demo.html new file mode 100644 index 0000000000..5d21532783 --- /dev/null +++ b/phpBB/adm/style/captcha_turnstile_acp_demo.html @@ -0,0 +1,23 @@ +
+
+
+{% INCLUDEJS 'https://challenges.cloudflare.com/turnstile/v0/api.js' %} + diff --git a/phpBB/config/default/container/services_captcha.yml b/phpBB/config/default/container/services_captcha.yml index 98441f99f8..b07f842ca8 100644 --- a/phpBB/config/default/container/services_captcha.yml +++ b/phpBB/config/default/container/services_captcha.yml @@ -64,4 +64,4 @@ services: calls: - ['set_name', ['core.captcha.plugins.turnstile']] tags: - - { name: catpcha.plugins } + - { name: captcha.plugins } diff --git a/phpBB/language/en/captcha_turnstile.php b/phpBB/language/en/captcha_turnstile.php new file mode 100644 index 0000000000..c091b440c1 --- /dev/null +++ b/phpBB/language/en/captcha_turnstile.php @@ -0,0 +1,41 @@ + +* @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', +]); diff --git a/phpBB/phpbb/captcha/plugins/legacy_wrapper.php b/phpBB/phpbb/captcha/plugins/legacy_wrapper.php index cc35920c70..bc317e711a 100644 --- a/phpBB/phpbb/captcha/plugins/legacy_wrapper.php +++ b/phpBB/phpbb/captcha/plugins/legacy_wrapper.php @@ -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} */ diff --git a/phpBB/phpbb/captcha/plugins/plugin_interface.php b/phpBB/phpbb/captcha/plugins/plugin_interface.php index dc522ecd7e..f52643544e 100644 --- a/phpBB/phpbb/captcha/plugins/plugin_interface.php +++ b/phpBB/phpbb/captcha/plugins/plugin_interface.php @@ -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 * diff --git a/phpBB/phpbb/captcha/plugins/turnstile.php b/phpBB/phpbb/captcha/plugins/turnstile.php index 3a5e9231eb..2aa4ca3d0c 100644 --- a/phpBB/phpbb/captcha/plugins/turnstile.php +++ b/phpBB/phpbb/captcha/plugins/turnstile.php @@ -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 diff --git a/phpBB/phpbb/db/migration/data/v400/turnstile_captcha.php b/phpBB/phpbb/db/migration/data/v400/turnstile_captcha.php new file mode 100644 index 0000000000..06111c9306 --- /dev/null +++ b/phpBB/phpbb/db/migration/data/v400/turnstile_captcha.php @@ -0,0 +1,48 @@ + + * @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']], + ]; + } +}