diff --git a/friendly-captcha/includes/core.php b/friendly-captcha/includes/core.php index 7cc1744..0ff06cc 100644 --- a/friendly-captcha/includes/core.php +++ b/friendly-captcha/includes/core.php @@ -245,6 +245,13 @@ class FriendlyCaptcha_Plugin "plugins" => array("wp-job-openings/wp-job-openings.php", "pro-pack-for-wp-job-openings/pro-pack.php"), "settings_description" => "Enable Friendly Captcha for the WP Job Openings application form.", ), + array( + "name" => "Generic Integration (for custom and unsupported plugins)", + "slug" => "generic_integration", + "entry" => "generic_integration/generic_integration.php", + "plugins" => [], + "settings_description" => "Enable Friendly Captcha for integrations with user-defined PHP-Code. (not recommended)", + ), ); public function init() diff --git a/friendly-captcha/modules/generic_integration/generic_integration.php b/friendly-captcha/modules/generic_integration/generic_integration.php new file mode 100644 index 0000000..e73f39c --- /dev/null +++ b/friendly-captcha/modules/generic_integration/generic_integration.php @@ -0,0 +1,51 @@ +is_configured()) { + return $html; + } + + frcaptcha_enqueue_widget_scripts(); + + $widget = frcaptcha_generate_widget_tag_from_plugin($plugin); + return $html . $widget; +}); + +/** Validate captcha on form submission + * @param string $solution value of $_POST['frc-captcha-solution'] + * @param bool $lax_on_failure how to decide on network failure: returning false here means a broken network failure or integration in settings is deactivated is treated as a bot. + * @return bool true = human, false = bot / missing solution + */ +add_filter( + "frc_captcha_validation", + function ($solution, $lax_on_failure) { + $plugin = FriendlyCaptcha_Plugin::$instance; + + if (!$plugin->is_configured()) { + return $lax_on_failure; + } + + if (empty($solution)) { + return false; + } + + $verification = frcaptcha_verify_captcha_solution( + $solution, + $plugin->get_sitekey(), + $plugin->get_api_key(), + "generic_integration", + ); + + return $verification["success"]; + }, + 10, + 2, +);