Changeset 3095155
- Timestamp:
- 05/30/2024 12:22:23 PM (10 months ago)
- Location:
- friendly-captcha
- Files:
-
- 22 added
- 4 deleted
- 32 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
friendly-captcha/tags/1.14.0/friendly-captcha.php
r3080369 r3095155 4 4 * Plugin Name: Friendly Captcha for WordPress 5 5 * Description: Protect WordPress website forms from spam and abuse with Friendly Captcha, a privacy-first anti-bot solution. 6 * Version: 1.1 3.06 * Version: 1.14.0 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.3 … … 20 20 } 21 21 22 define('FRIENDLY_CAPTCHA_VERSION', '1.1 3.0');22 define('FRIENDLY_CAPTCHA_VERSION', '1.14.0'); 23 23 define('FRIENDLY_CAPTCHA_FRIENDLY_CHALLENGE_VERSION', '0.9.12'); 24 define('FRIENDLY_CAPTCHA_FRIENDLY_CAPTCHA_SDK_VERSION', '0.1.7'); 24 25 define('FRIENDLY_CAPTCHA_SUPPORTED_LANGUAGES', [ 25 26 "en" => "English", … … 66 67 } 67 68 69 require plugin_dir_path(__FILE__) . 'vendor/autoload.php'; 68 70 require plugin_dir_path(__FILE__) . 'includes/core.php'; -
friendly-captcha/tags/1.14.0/includes/admin.php
r2889247 r3095155 1 1 <?php 2 2 3 require plugin_dir_path( __FILE__) . '../admin/options.php';3 require plugin_dir_path(__FILE__) . '../admin/options.php'; 4 4 5 5 if (is_admin()) { 6 add_action( 'admin_menu', 'frcaptcha_options_page');6 add_action('admin_menu', 'frcaptcha_options_page'); 7 7 8 8 // Add link to settings page in the navbar 9 function frcaptcha_options_page() { 9 function frcaptcha_options_page() 10 { 10 11 add_options_page( 11 12 'Friendly Captcha', … … 19 20 20 21 // Add link to settings in the plugin list 21 add_filter( 'plugin_action_links_friendly-captcha/friendly-captcha.php', 'frcaptcha_settings_link' ); 22 function frcaptcha_settings_link( $links ) { 23 $url = esc_url( add_query_arg( 22 add_filter('plugin_action_links_friendly-captcha/friendly-captcha.php', 'frcaptcha_settings_link'); 23 function frcaptcha_settings_link($links) 24 { 25 $url = esc_url(add_query_arg( 24 26 'page', 25 27 'friendly_captcha_admin', 26 28 get_admin_url() . 'options-general.php' 27 ) 28 $settings_link = "<a href='$url'>" . __( 'Settings') . '</a>';29 29 )); 30 $settings_link = "<a href='$url'>" . __('Settings') . '</a>'; 31 30 32 array_push( 31 33 $links, … … 36 38 37 39 if (!FriendlyCaptcha_Plugin::$instance->is_configured()) { 38 function frcaptcha_admin_notice__not_configured() { 39 $url = esc_url( add_query_arg( 40 function frcaptcha_admin_notice__not_configured() 41 { 42 $url = esc_url(add_query_arg( 40 43 'page', 41 44 'friendly_captcha_admin', 42 45 get_admin_url() . 'options-general.php' 43 ) 46 )); 44 47 45 48 ?> 46 49 <div class="notice notice-error is-dismissible"> 47 50 <p> 48 <b>Friendly Captcha is not configured yet!</b> 49 Visit the <a href="<?php echo $url ?>">Friendly Captcha settings</a> and enter a valid Sitekey and API Key to complete the setup.</p> 51 <b>Friendly Captcha is not configured yet!</b> 52 Visit the <a href="<?php echo $url ?>">Friendly Captcha settings</a> and enter a valid Sitekey and API Key to complete the setup. 53 </p> 50 54 </div> 51 55 <?php 52 56 } 53 57 54 add_action( 'admin_notices', 'frcaptcha_admin_notice__not_configured' ); 58 add_action('admin_notices', 'frcaptcha_admin_notice__not_configured'); 59 } 60 61 if (isset($_GET['frcaptcha-verification-failed-dismissed'])) { 62 FriendlyCaptcha_Plugin::$instance->remove_verification_failed_alert(); 63 } 64 65 if (FriendlyCaptcha_Plugin::$instance->get_verification_failed_alert() != false) { 66 function frcaptcha_admin_notice__verification_failed() 67 { 68 $url = esc_url(add_query_arg( 69 'page', 70 'friendly_captcha_admin', 71 get_admin_url() . 'options-general.php' 72 )); 73 74 ?> 75 <div class="notice notice-error is-dismissible"> 76 <p> 77 <b>Friendly Captcha verification has failed!</b> 78 <br> 79 This is usually because you have entered an incorrect API Key. Please visit the <a href="<?php echo $url ?>">Friendly Captcha settings</a> and enter a valid Sitekey and API Key. 80 <br><br> 81 <code><?php echo FriendlyCaptcha_Plugin::$instance->get_verification_failed_alert(); ?></code> 82 </p> 83 <a href="?frcaptcha-verification-failed-dismissed" class="notice-dismiss" style="text-decoration: none;"> 84 <span class="screen-reader-text">Dismiss this notice.</span> 85 </a> 86 </div> 87 <?php 88 } 89 90 add_action('admin_notices', 'frcaptcha_admin_notice__verification_failed'); 55 91 } 56 92 } -
friendly-captcha/tags/1.14.0/includes/core.php
r3080369 r3095155 2 2 3 3 /* Main entry point */ 4 5 // TODO: is this necessary? It breaks intellisense.. 6 // if ( !class_exists( 'FriendlyCaptcha_Plugin' ) ) { 7 class FriendlyCaptcha_Plugin { 8 9 /** 10 * Singleton global instance 11 */ 12 public static $instance; 13 public $plugin_name; 14 15 public static $version; 16 public static $friendly_challenge_version; 17 18 // Global constants 19 public static $option_group = "frcaptcha_options"; 20 public static $option_sitekey_name = "frcaptcha_sitekey"; 21 public static $option_api_key_name = "frcaptcha_api_key"; 22 public static $option_skip_style_injection_name = "frcaptcha_skip_style_injection"; 23 public static $option_enable_mutation_observer_name = "frcaptcha_enable_mutation_observer"; 24 25 // Integrations 26 public static $option_contact_form_7_integration_active_name = "frcaptcha_contact_form_7_integration_active"; 27 public static $option_f12_cf7_doubleoptin_integration_active_name = "frcaptcha_f12_cf7_doubleoptin_integration_active"; 28 public static $option_wpforms_integration_active_name = "frcaptcha_wpforms_integration_active"; 29 public static $option_gravity_forms_integration_active_name = "frcaptcha_gravity_forms_integration_active"; 30 public static $option_coblocks_integration_active_name = "frcaptcha_coblocks_integration_active"; 31 public static $option_fluentform_integration_active_name = "frcaptcha_fluentform_integration_active"; 32 public static $option_elementor_forms_integration_active_name = "frcaptcha_elementor_integration_active"; 33 public static $option_html_forms_integration_active_name = "frcaptcha_html_forms_integration_active"; 34 public static $option_forminator_integration_active_name = "frcaptcha_forminator_integration_active"; 35 public static $option_formidable_integration_active_name = "frcaptcha_formidable_integration_active"; 36 public static $option_avada_forms_integration_active_name = "frcaptcha_avada_forms_integration_active"; 37 38 public static $option_wp_register_integration_active_name = "frcaptcha_wp_register_integration_active"; 39 public static $option_wp_login_integration_active_name = "frcaptcha_wp_login_integration_active"; 40 public static $option_wp_reset_password_integration_active_name = "frcaptcha_wp_reset_password_integration_active"; 41 public static $option_wp_comments_integration_active_name = "frcaptcha_wp_comments_integration_active"; 42 public static $option_wp_comments_logged_in_integration_active_name = "frcaptcha_wp_comments_logged_in_integration_active"; 43 44 public static $option_wc_register_integration_active_name = "frcaptcha_wc_register_integration_active"; 45 public static $option_wc_login_integration_active_name = "frcaptcha_wc_login_integration_active"; 46 public static $option_wc_lost_password_integration_active_name = "frcaptcha_wc_lost_password_integration_active"; 47 public static $option_wc_checkout_integration_active_name = "frcaptcha_wc_checkout_integration_active"; 48 49 public static $option_um_login_integration_active_name = "frcaptcha_um_login_integration_active"; 50 public static $option_um_register_integration_active_name = "frcaptcha_um_register_integration_active"; 51 public static $option_um_reset_password_integration_active_name = "frcaptcha_um_reset_password_integration_active"; 52 53 public static $option_wpum_registration_integration_active_name = "frcaptcha_wpum_registration_integration_active"; 54 public static $option_wpum_login_integration_active_name = "frcaptcha_wpum_login_integration_active"; 55 public static $option_wpum_password_recovery_integration_active_name = "frcaptcha_wpum_password_recovery_integration_active"; 56 57 public static $option_pb_login_integration_active_name = "frcaptcha_pb_login_integration_active"; 58 public static $option_pb_register_integration_active_name = "frcaptcha_pb_register_integration_active"; 59 public static $option_pb_reset_password_integration_active_name = "frcaptcha_pb_reset_password_integration_active"; 60 public static $option_divi_integration_active_name = "frcaptcha_divi_integration_active"; 61 62 public static $option_widget_language_name = "frcaptcha_widget_language"; 63 public static $option_widget_dark_theme_active_name = "frcaptcha_widget_dark_theme_active"; 64 65 public static $option_global_puzzle_endpoint_active_name = "frcaptcha_global_endpoint_active"; 66 public static $option_eu_puzzle_endpoint_active_name = "frcaptcha_eu_endpoint_active"; 67 68 69 public function init() { 70 if ( defined( 'FRIENDLY_CAPTCHA_VERSION' ) ) { 71 FriendlyCaptcha_Plugin::$version = FRIENDLY_CAPTCHA_VERSION; 72 FriendlyCaptcha_Plugin::$friendly_challenge_version = FRIENDLY_CAPTCHA_FRIENDLY_CHALLENGE_VERSION; 73 } else { 74 FriendlyCaptcha_Plugin::$version = '0.0.0'; 75 FriendlyCaptcha_Plugin::$friendly_challenge_version = '0.0.0'; 4 class FriendlyCaptcha_Plugin 5 { 6 7 /** 8 * Singleton global instance 9 * @var FriendlyCaptcha_Plugin 10 */ 11 public static $instance; 12 public $plugin_name; 13 14 public static $version; 15 // JavaScript client SDK for v1 16 public static $friendly_challenge_version; 17 // JavaScript client SDK for v2 18 public static $friendly_captcha_sdk_version; 19 20 // Global constants 21 public static $option_group = "frcaptcha_options"; 22 public static $option_sitekey_name = "frcaptcha_sitekey"; 23 public static $option_api_key_name = "frcaptcha_api_key"; 24 public static $option_skip_style_injection_name = "frcaptcha_skip_style_injection"; 25 public static $option_enable_mutation_observer_name = "frcaptcha_enable_mutation_observer"; 26 public static $option_enable_v2_name = "frcaptcha_enable_v2"; 27 28 // Integrations 29 public static $option_contact_form_7_integration_active_name = "frcaptcha_contact_form_7_integration_active"; 30 public static $option_f12_cf7_doubleoptin_integration_active_name = "frcaptcha_f12_cf7_doubleoptin_integration_active"; 31 public static $option_wpforms_integration_active_name = "frcaptcha_wpforms_integration_active"; 32 public static $option_gravity_forms_integration_active_name = "frcaptcha_gravity_forms_integration_active"; 33 public static $option_coblocks_integration_active_name = "frcaptcha_coblocks_integration_active"; 34 public static $option_fluentform_integration_active_name = "frcaptcha_fluentform_integration_active"; 35 public static $option_elementor_forms_integration_active_name = "frcaptcha_elementor_integration_active"; 36 public static $option_html_forms_integration_active_name = "frcaptcha_html_forms_integration_active"; 37 public static $option_forminator_integration_active_name = "frcaptcha_forminator_integration_active"; 38 public static $option_formidable_integration_active_name = "frcaptcha_formidable_integration_active"; 39 public static $option_avada_forms_integration_active_name = "frcaptcha_avada_forms_integration_active"; 40 41 public static $option_wp_register_integration_active_name = "frcaptcha_wp_register_integration_active"; 42 public static $option_wp_login_integration_active_name = "frcaptcha_wp_login_integration_active"; 43 public static $option_wp_reset_password_integration_active_name = "frcaptcha_wp_reset_password_integration_active"; 44 public static $option_wp_comments_integration_active_name = "frcaptcha_wp_comments_integration_active"; 45 public static $option_wp_comments_logged_in_integration_active_name = "frcaptcha_wp_comments_logged_in_integration_active"; 46 47 public static $option_wc_register_integration_active_name = "frcaptcha_wc_register_integration_active"; 48 public static $option_wc_login_integration_active_name = "frcaptcha_wc_login_integration_active"; 49 public static $option_wc_lost_password_integration_active_name = "frcaptcha_wc_lost_password_integration_active"; 50 public static $option_wc_checkout_integration_active_name = "frcaptcha_wc_checkout_integration_active"; 51 52 public static $option_um_login_integration_active_name = "frcaptcha_um_login_integration_active"; 53 public static $option_um_register_integration_active_name = "frcaptcha_um_register_integration_active"; 54 public static $option_um_reset_password_integration_active_name = "frcaptcha_um_reset_password_integration_active"; 55 56 public static $option_wpum_registration_integration_active_name = "frcaptcha_wpum_registration_integration_active"; 57 public static $option_wpum_login_integration_active_name = "frcaptcha_wpum_login_integration_active"; 58 public static $option_wpum_password_recovery_integration_active_name = "frcaptcha_wpum_password_recovery_integration_active"; 59 60 public static $option_pb_login_integration_active_name = "frcaptcha_pb_login_integration_active"; 61 public static $option_pb_register_integration_active_name = "frcaptcha_pb_register_integration_active"; 62 public static $option_pb_reset_password_integration_active_name = "frcaptcha_pb_reset_password_integration_active"; 63 public static $option_divi_integration_active_name = "frcaptcha_divi_integration_active"; 64 65 public static $option_widget_language_name = "frcaptcha_widget_language"; 66 public static $option_widget_dark_theme_active_name = "frcaptcha_widget_dark_theme_active"; 67 68 public static $option_global_puzzle_endpoint_active_name = "frcaptcha_global_endpoint_active"; 69 public static $option_eu_puzzle_endpoint_active_name = "frcaptcha_eu_endpoint_active"; 70 71 public static $option_verification_failed_alert_name = "frcaptcha_verification_failed_alert"; 72 73 public function init() 74 { 75 if (defined('FRIENDLY_CAPTCHA_VERSION')) { 76 FriendlyCaptcha_Plugin::$version = FRIENDLY_CAPTCHA_VERSION; 77 FriendlyCaptcha_Plugin::$friendly_challenge_version = FRIENDLY_CAPTCHA_FRIENDLY_CHALLENGE_VERSION; 78 FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version = FRIENDLY_CAPTCHA_FRIENDLY_CAPTCHA_SDK_VERSION; 79 } else { 80 FriendlyCaptcha_Plugin::$version = '0.0.0'; 81 FriendlyCaptcha_Plugin::$friendly_challenge_version = '0.0.0'; 82 FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version = '0.0.0'; 83 } 84 $this->plugin_name = 'friendly-captcha'; 85 86 FriendlyCaptcha_Plugin::$instance = $this; 87 } 88 89 public static function default_error_user_message() 90 { 91 /* translators: this is the main error message shown to the user when the captcha failed or wasn't completed. */ 92 return __("Anti-robot verification failed, please try again.", "frcaptcha"); 93 } 94 95 /** 96 * When both the sitekey and the apikey are set, we can consider the plugin configured. 97 */ 98 public function is_configured() 99 { 100 return $this->get_sitekey() !== null && $this->get_sitekey() !== "" && $this->get_api_key() !== null && $this->get_api_key() !== ""; 101 } 102 103 public function get_sitekey() 104 { 105 return trim(get_option(FriendlyCaptcha_Plugin::$option_sitekey_name)); 106 } 107 108 public function get_api_key() 109 { 110 return trim(get_option(FriendlyCaptcha_Plugin::$option_api_key_name)); 111 } 112 113 public function get_skip_style_injection() 114 { 115 return get_option(FriendlyCaptcha_Plugin::$option_skip_style_injection_name) == 1; 116 } 117 118 public function get_enable_mutation_observer() 119 { 120 return get_option(FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name) == 1; 121 } 122 123 public function get_enable_v2() 124 { 125 return get_option(FriendlyCaptcha_Plugin::$option_enable_v2_name) == 1; 126 } 127 128 public function get_solution_field_name() 129 { 130 if ($this->get_enable_v2()) { 131 return "frc-captcha-response"; 132 } else { 133 return "frc-captcha-solution"; 134 } 135 } 136 137 public function get_contact_form_7_active() 138 { 139 return get_option(FriendlyCaptcha_Plugin::$option_contact_form_7_integration_active_name) == 1; 140 } 141 142 public function get_f12_cf7_doubleoptin_active() 143 { 144 return get_option(FriendlyCaptcha_Plugin::$option_f12_cf7_doubleoptin_integration_active_name) == 1; 145 } 146 147 public function get_wpforms_active() 148 { 149 return get_option(FriendlyCaptcha_Plugin::$option_wpforms_integration_active_name) == 1; 150 } 151 152 public function get_gravity_forms_active() 153 { 154 return get_option(FriendlyCaptcha_Plugin::$option_gravity_forms_integration_active_name) == 1; 155 } 156 157 public function get_coblocks_active() 158 { 159 return get_option(FriendlyCaptcha_Plugin::$option_coblocks_integration_active_name) == 1; 160 } 161 162 public function get_fluentform_active() 163 { 164 return get_option(FriendlyCaptcha_Plugin::$option_fluentform_integration_active_name) == 1; 165 } 166 167 public function get_elementor_active() 168 { 169 return get_option(FriendlyCaptcha_Plugin::$option_elementor_forms_integration_active_name) == 1; 170 } 171 172 public function get_html_forms_active() 173 { 174 return get_option(FriendlyCaptcha_Plugin::$option_html_forms_integration_active_name) == 1; 175 } 176 177 public function get_forminator_active() 178 { 179 return get_option(FriendlyCaptcha_Plugin::$option_forminator_integration_active_name) == 1; 180 } 181 182 public function get_formidable_active() 183 { 184 return get_option(FriendlyCaptcha_Plugin::$option_formidable_integration_active_name) == 1; 185 } 186 187 public function get_avada_forms_active() 188 { 189 return get_option(FriendlyCaptcha_Plugin::$option_avada_forms_integration_active_name) == 1; 190 } 191 192 public function get_wp_register_active() 193 { 194 return get_option(FriendlyCaptcha_Plugin::$option_wp_register_integration_active_name) == 1; 195 } 196 197 public function get_wp_login_active() 198 { 199 return get_option(FriendlyCaptcha_Plugin::$option_wp_login_integration_active_name) == 1; 200 } 201 202 public function get_wp_reset_password_active() 203 { 204 return get_option(FriendlyCaptcha_Plugin::$option_wp_reset_password_integration_active_name) == 1; 205 } 206 207 public function get_wp_comments_active() 208 { 209 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_integration_active_name) == 1; 210 } 211 212 public function get_wp_comments_logged_in_active() 213 { 214 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_logged_in_integration_active_name) == 1; 215 } 216 217 public function get_wc_login_active() 218 { 219 return get_option(FriendlyCaptcha_Plugin::$option_wc_login_integration_active_name) == 1; 220 } 221 222 public function get_wc_register_active() 223 { 224 return get_option(FriendlyCaptcha_Plugin::$option_wc_register_integration_active_name) == 1; 225 } 226 227 public function get_wc_lost_password_active() 228 { 229 return get_option(FriendlyCaptcha_Plugin::$option_wc_lost_password_integration_active_name) == 1; 230 } 231 232 public function get_wc_checkout_active() 233 { 234 return get_option(FriendlyCaptcha_Plugin::$option_wc_checkout_integration_active_name) == 1; 235 } 236 237 public function get_um_login_active() 238 { 239 return get_option(FriendlyCaptcha_Plugin::$option_um_login_integration_active_name) == 1; 240 } 241 242 public function get_um_register_active() 243 { 244 return get_option(FriendlyCaptcha_Plugin::$option_um_register_integration_active_name) == 1; 245 } 246 247 public function get_um_reset_password_active() 248 { 249 return get_option(FriendlyCaptcha_Plugin::$option_um_reset_password_integration_active_name) == 1; 250 } 251 252 public function get_wpum_login_active() 253 { 254 return get_option(FriendlyCaptcha_Plugin::$option_wpum_login_integration_active_name) == 1; 255 } 256 257 public function get_wpum_registration_active() 258 { 259 return get_option(FriendlyCaptcha_Plugin::$option_wpum_registration_integration_active_name) == 1; 260 } 261 262 public function get_wpum_password_recovery_active() 263 { 264 return get_option(FriendlyCaptcha_Plugin::$option_wpum_password_recovery_integration_active_name) == 1; 265 } 266 267 public function get_pb_login_active() 268 { 269 return get_option(FriendlyCaptcha_Plugin::$option_pb_login_integration_active_name) == 1; 270 } 271 272 public function get_pb_register_active() 273 { 274 return get_option(FriendlyCaptcha_Plugin::$option_pb_register_integration_active_name) == 1; 275 } 276 277 public function get_pb_reset_password_active() 278 { 279 return get_option(FriendlyCaptcha_Plugin::$option_pb_reset_password_integration_active_name) == 1; 280 } 281 282 283 public function get_divi_active() 284 { 285 return get_option(FriendlyCaptcha_Plugin::$option_divi_integration_active_name) == 1; 286 } 287 288 /* Widget options */ 289 290 public function get_widget_language() 291 { 292 $lang = get_option(FriendlyCaptcha_Plugin::$option_widget_language_name); 293 $lang = empty($lang) ? "automatic" : $lang; // Default to automatic 294 if ($lang == "automatic") { 295 $lang = substr(get_locale(), 0, 2); 296 if (!array_key_exists($lang, FRIENDLY_CAPTCHA_SUPPORTED_LANGUAGES)) { 297 $lang = "en"; // Fallback to en 76 298 } 77 $this->plugin_name = 'friendly-captcha';78 79 FriendlyCaptcha_Plugin::$instance = $this;80 299 } 81 82 public static function default_error_user_message() { 83 /* translators: this is the main error message shown to the user when the captcha failed or wasn't completed. */ 84 return __("Anti-robot verification failed, please try again.", "frcaptcha"); 85 } 86 87 /** 88 * When both the sitekey and the apikey are set, we can consider the plugin configured. 89 */ 90 public function is_configured() { 91 return $this->get_sitekey() !== null && $this->get_sitekey() !== "" && $this->get_api_key() !== null && $this->get_api_key() !== ""; 92 } 93 94 public function get_sitekey() { 95 return trim(get_option(FriendlyCaptcha_Plugin::$option_sitekey_name)); 96 } 97 98 public function get_api_key() { 99 return trim(get_option(FriendlyCaptcha_Plugin::$option_api_key_name)); 100 } 101 102 public function get_skip_style_injection() { 103 return get_option(FriendlyCaptcha_Plugin::$option_skip_style_injection_name) == 1; 104 } 105 106 public function get_enable_mutation_observer() { 107 return get_option(FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name) == 1; 108 } 109 110 public function get_contact_form_7_active() { 111 return get_option(FriendlyCaptcha_Plugin::$option_contact_form_7_integration_active_name) == 1; 112 } 113 114 public function get_f12_cf7_doubleoptin_active() { 115 return get_option(FriendlyCaptcha_Plugin::$option_f12_cf7_doubleoptin_integration_active_name) == 1; 116 } 117 118 public function get_wpforms_active() { 119 return get_option(FriendlyCaptcha_Plugin::$option_wpforms_integration_active_name) == 1; 120 } 121 122 public function get_gravity_forms_active() { 123 return get_option(FriendlyCaptcha_Plugin::$option_gravity_forms_integration_active_name) == 1; 124 } 125 126 public function get_coblocks_active() { 127 return get_option(FriendlyCaptcha_Plugin::$option_coblocks_integration_active_name) == 1; 128 } 129 130 public function get_fluentform_active() { 131 return get_option(FriendlyCaptcha_Plugin::$option_fluentform_integration_active_name) == 1; 132 } 133 134 public function get_elementor_active() { 135 return get_option(FriendlyCaptcha_Plugin::$option_elementor_forms_integration_active_name) == 1; 136 } 137 138 public function get_html_forms_active() { 139 return get_option(FriendlyCaptcha_Plugin::$option_html_forms_integration_active_name) == 1; 140 } 141 142 public function get_forminator_active() { 143 return get_option(FriendlyCaptcha_Plugin::$option_forminator_integration_active_name) == 1; 144 } 145 146 public function get_formidable_active() { 147 return get_option(FriendlyCaptcha_Plugin::$option_formidable_integration_active_name) == 1; 148 } 149 150 public function get_avada_forms_active() { 151 return get_option(FriendlyCaptcha_Plugin::$option_avada_forms_integration_active_name) == 1; 152 } 153 154 public function get_wp_register_active() { 155 return get_option(FriendlyCaptcha_Plugin::$option_wp_register_integration_active_name) == 1; 156 } 157 158 public function get_wp_login_active() { 159 return get_option(FriendlyCaptcha_Plugin::$option_wp_login_integration_active_name) == 1; 160 } 161 162 public function get_wp_reset_password_active() { 163 return get_option(FriendlyCaptcha_Plugin::$option_wp_reset_password_integration_active_name) == 1; 164 } 165 166 public function get_wp_comments_active() { 167 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_integration_active_name) == 1; 168 } 169 170 public function get_wp_comments_logged_in_active() { 171 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_logged_in_integration_active_name) == 1; 172 } 173 174 public function get_wc_login_active() { 175 return get_option(FriendlyCaptcha_Plugin::$option_wc_login_integration_active_name) == 1; 176 } 177 178 public function get_wc_register_active() { 179 return get_option(FriendlyCaptcha_Plugin::$option_wc_register_integration_active_name) == 1; 180 } 181 182 public function get_wc_lost_password_active() { 183 return get_option(FriendlyCaptcha_Plugin::$option_wc_lost_password_integration_active_name) == 1; 184 } 185 186 public function get_wc_checkout_active() { 187 return get_option(FriendlyCaptcha_Plugin::$option_wc_checkout_integration_active_name) == 1; 188 } 189 190 public function get_um_login_active() { 191 return get_option(FriendlyCaptcha_Plugin::$option_um_login_integration_active_name) == 1; 192 } 193 194 public function get_um_register_active() { 195 return get_option(FriendlyCaptcha_Plugin::$option_um_register_integration_active_name) == 1; 196 } 197 198 public function get_um_reset_password_active() { 199 return get_option(FriendlyCaptcha_Plugin::$option_um_reset_password_integration_active_name) == 1; 200 } 201 202 public function get_wpum_login_active() { 203 return get_option(FriendlyCaptcha_Plugin::$option_wpum_login_integration_active_name) == 1; 204 } 205 206 public function get_wpum_registration_active() { 207 return get_option(FriendlyCaptcha_Plugin::$option_wpum_registration_integration_active_name) == 1; 208 } 209 210 public function get_wpum_password_recovery_active() { 211 return get_option(FriendlyCaptcha_Plugin::$option_wpum_password_recovery_integration_active_name) == 1; 212 } 213 214 public function get_pb_login_active() { 215 return get_option(FriendlyCaptcha_Plugin::$option_pb_login_integration_active_name) == 1; 216 } 217 218 public function get_pb_register_active() { 219 return get_option(FriendlyCaptcha_Plugin::$option_pb_register_integration_active_name) == 1; 220 } 221 222 public function get_pb_reset_password_active() { 223 return get_option(FriendlyCaptcha_Plugin::$option_pb_reset_password_integration_active_name) == 1; 224 } 225 226 public function get_divi_active() { 227 return get_option(FriendlyCaptcha_Plugin::$option_divi_integration_active_name) == 1; 228 } 229 230 231 /* Widget options */ 232 233 public function get_widget_language() { 234 $lang = get_option(FriendlyCaptcha_Plugin::$option_widget_language_name); 235 $lang = empty($lang) ? "automatic" : $lang; // Default to automatic 236 if ( $lang == "automatic" ) { 237 $lang = substr(get_locale(), 0, 2); 238 if ( ! array_key_exists($lang, FRIENDLY_CAPTCHA_SUPPORTED_LANGUAGES) ) { 239 $lang = "en"; // Fallback to en 240 } 241 } 242 return $lang; 243 } 244 245 public function get_widget_dark_theme_active() { 246 return get_option(FriendlyCaptcha_Plugin::$option_widget_dark_theme_active_name) == 1; 247 } 248 249 /* Endpoint settings */ 250 251 public function get_eu_puzzle_endpoint_active() { 252 return get_option(FriendlyCaptcha_Plugin::$option_eu_puzzle_endpoint_active_name) == 1; 253 } 254 255 public function get_global_puzzle_endpoint_active() { 256 $eu_active = $this->get_eu_puzzle_endpoint_active(); 257 if (!$eu_active) return true; // At least one must be enabled. 258 259 return get_option(FriendlyCaptcha_Plugin::$option_global_puzzle_endpoint_active_name) == 1; 260 } 261 } 262 263 // This creates the singleton instance 264 if ( !isset(FriendlyCaptcha_Plugin::$instance)) { 265 $frcaptcha_plugin_instance = new FriendlyCaptcha_Plugin(); 266 $frcaptcha_plugin_instance->init(); 267 } 268 269 // These only contain pure functions 270 require plugin_dir_path( __FILE__ ) . 'helpers.php'; 271 require plugin_dir_path( __FILE__ ) . 'verification.php'; 272 273 // Register widget routines 274 require plugin_dir_path( __FILE__ ) . '../public/widgets.php'; 275 276 // Set up the admin pages & settings 277 require plugin_dir_path( __FILE__ ) . 'admin.php'; 278 require plugin_dir_path( __FILE__ ) . 'settings.php'; 279 280 if (FriendlyCaptcha_Plugin::$instance->get_contact_form_7_active()) { 281 require plugin_dir_path( __FILE__ ) . '../modules/contact-form-7/contact-form-7.php'; 282 } 283 284 if (FriendlyCaptcha_Plugin::$instance->get_wpforms_active()) { 285 require plugin_dir_path( __FILE__ ) . '../modules/wpforms/wpforms.php'; 286 } 287 288 if (FriendlyCaptcha_Plugin::$instance->get_gravity_forms_active()) { 289 require plugin_dir_path( __FILE__ ) . '../modules/gravityforms/gravityforms.php'; 290 } 291 292 if (FriendlyCaptcha_Plugin::$instance->get_coblocks_active()) { 293 require plugin_dir_path( __FILE__ ) . '../modules/coblocks/coblocks.php'; 294 } 295 296 if (FriendlyCaptcha_Plugin::$instance->get_fluentform_active()) { 297 require plugin_dir_path( __FILE__ ) . '../modules/fluentform/fluentform.php'; 298 } 299 300 if (FriendlyCaptcha_Plugin::$instance->get_elementor_active()) { 301 require plugin_dir_path( __FILE__ ) . '../modules/elementor/elementor.php'; 302 } 303 304 if (FriendlyCaptcha_Plugin::$instance->get_html_forms_active()) { 305 require plugin_dir_path( __FILE__ ) . '../modules/html-forms/html-forms.php'; 306 } 307 308 if (FriendlyCaptcha_Plugin::$instance->get_forminator_active()) { 309 require plugin_dir_path( __FILE__ ) . '../modules/forminator/forminator.php'; 310 } 311 312 if (FriendlyCaptcha_Plugin::$instance->get_formidable_active()) { 313 require plugin_dir_path( __FILE__ ) . '../modules/formidable/formidable.php'; 314 } 315 316 if (FriendlyCaptcha_Plugin::$instance->get_avada_forms_active()) { 317 require plugin_dir_path( __FILE__ ) . '../modules/avada-forms/avada-forms.php'; 318 } 319 320 if (FriendlyCaptcha_Plugin::$instance->get_wp_register_active()) { 321 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_register.php'; 322 } 323 324 if (FriendlyCaptcha_Plugin::$instance->get_wp_login_active()) { 325 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_login.php'; 326 } 327 328 if (FriendlyCaptcha_Plugin::$instance->get_wp_reset_password_active()) { 329 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_reset_password.php'; 330 } 331 332 if (FriendlyCaptcha_Plugin::$instance->get_wp_comments_active()) { 333 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_comments.php'; 334 } 335 336 if (FriendlyCaptcha_Plugin::$instance->get_wc_login_active()) { 337 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_login.php'; 338 } 339 340 if (FriendlyCaptcha_Plugin::$instance->get_wc_register_active()) { 341 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_register.php'; 342 } 343 344 if (FriendlyCaptcha_Plugin::$instance->get_wc_lost_password_active()) { 345 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_lost_password.php'; 346 } 347 348 if (FriendlyCaptcha_Plugin::$instance->get_wc_checkout_active()) { 349 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_checkout.php'; 350 } 351 352 if (FriendlyCaptcha_Plugin::$instance->get_um_login_active()) { 353 require plugin_dir_path( __FILE__ ) . '../modules/ultimate-member/ultimate-member_login.php'; 354 } 355 356 if (FriendlyCaptcha_Plugin::$instance->get_um_register_active()) { 357 require plugin_dir_path( __FILE__ ) . '../modules/ultimate-member/ultimate-member_register.php'; 358 } 359 360 if (FriendlyCaptcha_Plugin::$instance->get_um_reset_password_active()) { 361 require plugin_dir_path( __FILE__ ) . '../modules/ultimate-member/ultimate-member_reset_password.php'; 362 } 363 364 if (FriendlyCaptcha_Plugin::$instance->get_wpum_login_active()) { 365 require plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_login.php'; 366 require_once plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_validate.php'; 367 } 368 369 if (FriendlyCaptcha_Plugin::$instance->get_wpum_registration_active()) { 370 require plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_registration.php'; 371 require_once plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_validate.php'; 372 } 373 374 if (FriendlyCaptcha_Plugin::$instance->get_wpum_password_recovery_active()) { 375 require plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_password-recovery.php'; 376 require_once plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_validate.php'; 377 } 378 379 if (FriendlyCaptcha_Plugin::$instance->get_pb_login_active()) { 380 require plugin_dir_path( __FILE__ ) . '../modules/profile-builder/profile_builder_login.php'; 381 } 382 383 if (FriendlyCaptcha_Plugin::$instance->get_pb_register_active()) { 384 require plugin_dir_path( __FILE__ ) . '../modules/profile-builder/profile_builder_register.php'; 385 } 386 387 if (FriendlyCaptcha_Plugin::$instance->get_pb_reset_password_active()) { 388 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_reset_password.php'; 389 } 390 391 if (FriendlyCaptcha_Plugin::$instance->get_divi_active()) { 392 require plugin_dir_path( __FILE__ ) . '../modules/divi/divi.php'; 393 } 394 // } 300 return $lang; 301 } 302 303 public function get_widget_dark_theme_active() 304 { 305 return get_option(FriendlyCaptcha_Plugin::$option_widget_dark_theme_active_name) == 1; 306 } 307 308 /* Endpoint settings */ 309 310 public function get_eu_puzzle_endpoint_active() 311 { 312 return get_option(FriendlyCaptcha_Plugin::$option_eu_puzzle_endpoint_active_name) == 1; 313 } 314 315 public function get_global_puzzle_endpoint_active() 316 { 317 $eu_active = $this->get_eu_puzzle_endpoint_active(); 318 if (!$eu_active) return true; // At least one must be enabled. 319 320 return get_option(FriendlyCaptcha_Plugin::$option_global_puzzle_endpoint_active_name) == 1; 321 } 322 323 /* Verification failure alert */ 324 325 public function show_verification_failed_alert($response) 326 { 327 update_option(FriendlyCaptcha_Plugin::$option_verification_failed_alert_name, $response); 328 } 329 330 public function get_verification_failed_alert() 331 { 332 return get_option(FriendlyCaptcha_Plugin::$option_verification_failed_alert_name); 333 } 334 335 public function remove_verification_failed_alert() 336 { 337 delete_option(FriendlyCaptcha_Plugin::$option_verification_failed_alert_name); 338 } 339 } 340 341 // This creates the singleton instance 342 if (!isset(FriendlyCaptcha_Plugin::$instance)) { 343 $frcaptcha_plugin_instance = new FriendlyCaptcha_Plugin(); 344 $frcaptcha_plugin_instance->init(); 345 } 346 347 // These only contain pure functions 348 require plugin_dir_path(__FILE__) . 'helpers.php'; 349 require plugin_dir_path(__FILE__) . 'verification.php'; 350 351 // Register widget routines 352 require plugin_dir_path(__FILE__) . '../public/widgets.php'; 353 354 // Set up the admin pages & settings 355 require plugin_dir_path(__FILE__) . 'admin.php'; 356 require plugin_dir_path(__FILE__) . 'settings.php'; 357 358 if (FriendlyCaptcha_Plugin::$instance->get_contact_form_7_active()) { 359 require plugin_dir_path(__FILE__) . '../modules/contact-form-7/contact-form-7.php'; 360 } 361 362 if (FriendlyCaptcha_Plugin::$instance->get_wpforms_active()) { 363 require plugin_dir_path(__FILE__) . '../modules/wpforms/wpforms.php'; 364 } 365 366 if (FriendlyCaptcha_Plugin::$instance->get_gravity_forms_active()) { 367 require plugin_dir_path(__FILE__) . '../modules/gravityforms/gravityforms.php'; 368 } 369 370 if (FriendlyCaptcha_Plugin::$instance->get_coblocks_active()) { 371 require plugin_dir_path(__FILE__) . '../modules/coblocks/coblocks.php'; 372 } 373 374 if (FriendlyCaptcha_Plugin::$instance->get_fluentform_active()) { 375 require plugin_dir_path(__FILE__) . '../modules/fluentform/fluentform.php'; 376 } 377 378 if (FriendlyCaptcha_Plugin::$instance->get_elementor_active()) { 379 require plugin_dir_path(__FILE__) . '../modules/elementor/elementor.php'; 380 } 381 382 if (FriendlyCaptcha_Plugin::$instance->get_html_forms_active()) { 383 require plugin_dir_path(__FILE__) . '../modules/html-forms/html-forms.php'; 384 } 385 386 if (FriendlyCaptcha_Plugin::$instance->get_forminator_active()) { 387 require plugin_dir_path(__FILE__) . '../modules/forminator/forminator.php'; 388 } 389 390 if (FriendlyCaptcha_Plugin::$instance->get_formidable_active()) { 391 require plugin_dir_path(__FILE__) . '../modules/formidable/formidable.php'; 392 } 393 394 if (FriendlyCaptcha_Plugin::$instance->get_avada_forms_active()) { 395 require plugin_dir_path(__FILE__) . '../modules/avada-forms/avada-forms.php'; 396 } 397 398 if (FriendlyCaptcha_Plugin::$instance->get_wp_register_active()) { 399 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_register.php'; 400 } 401 402 if (FriendlyCaptcha_Plugin::$instance->get_wp_login_active()) { 403 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_login.php'; 404 } 405 406 if (FriendlyCaptcha_Plugin::$instance->get_wp_reset_password_active()) { 407 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_reset_password.php'; 408 } 409 410 if (FriendlyCaptcha_Plugin::$instance->get_wp_comments_active()) { 411 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_comments.php'; 412 } 413 414 if (FriendlyCaptcha_Plugin::$instance->get_wc_login_active()) { 415 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_login.php'; 416 } 417 418 if (FriendlyCaptcha_Plugin::$instance->get_wc_register_active()) { 419 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_register.php'; 420 } 421 422 if (FriendlyCaptcha_Plugin::$instance->get_wc_lost_password_active()) { 423 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_lost_password.php'; 424 } 425 426 if (FriendlyCaptcha_Plugin::$instance->get_wc_checkout_active()) { 427 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_checkout.php'; 428 } 429 430 if (FriendlyCaptcha_Plugin::$instance->get_um_login_active()) { 431 require plugin_dir_path(__FILE__) . '../modules/ultimate-member/ultimate-member_login.php'; 432 } 433 434 if (FriendlyCaptcha_Plugin::$instance->get_um_register_active()) { 435 require plugin_dir_path(__FILE__) . '../modules/ultimate-member/ultimate-member_register.php'; 436 } 437 438 if (FriendlyCaptcha_Plugin::$instance->get_um_reset_password_active()) { 439 require plugin_dir_path(__FILE__) . '../modules/ultimate-member/ultimate-member_reset_password.php'; 440 } 441 442 if (FriendlyCaptcha_Plugin::$instance->get_wpum_login_active()) { 443 require plugin_dir_path(__FILE__) . '../modules/wpum/wpum_login.php'; 444 require_once plugin_dir_path(__FILE__) . '../modules/wpum/wpum_validate.php'; 445 } 446 447 if (FriendlyCaptcha_Plugin::$instance->get_wpum_registration_active()) { 448 require plugin_dir_path(__FILE__) . '../modules/wpum/wpum_registration.php'; 449 require_once plugin_dir_path(__FILE__) . '../modules/wpum/wpum_validate.php'; 450 } 451 452 if (FriendlyCaptcha_Plugin::$instance->get_wpum_password_recovery_active()) { 453 require plugin_dir_path(__FILE__) . '../modules/wpum/wpum_password-recovery.php'; 454 require_once plugin_dir_path(__FILE__) . '../modules/wpum/wpum_validate.php'; 455 } 456 457 if (FriendlyCaptcha_Plugin::$instance->get_pb_login_active()) { 458 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_login.php'; 459 } 460 461 if (FriendlyCaptcha_Plugin::$instance->get_pb_register_active()) { 462 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_register.php'; 463 } 464 465 if (FriendlyCaptcha_Plugin::$instance->get_pb_reset_password_active()) { 466 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_reset_password.php'; 467 } 468 469 if (FriendlyCaptcha_Plugin::$instance->get_divi_active()) { 470 require plugin_dir_path(__FILE__) . '../modules/divi/divi.php'; 471 } -
friendly-captcha/tags/1.14.0/includes/helpers.php
r2443791 r3095155 1 1 <?php 2 2 3 function frcaptcha_log_remote_request($url, $re quest, $response)3 function frcaptcha_log_remote_request($url, $response) 4 4 { 5 5 $log = sprintf( … … 15 15 } 16 16 17 function frcaptcha_v2_log_verify_response($url, $status, $errorCode) 18 { 19 $log = sprintf( 20 /* translators: 1: response status, 2: error code, 3: error detail, 4: URL */ 21 __('Friendly Captcha: %1$s %2$s from %3$s', 'frcaptcha'), 22 $status, 23 $errorCode, 24 $url 25 ); 26 27 trigger_error($log); 28 } 29 17 30 function frcaptcha_get_sanitized_frcaptcha_solution_from_post() 18 31 { 19 $postValue = $_POST['frc-captcha-solution']; 32 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 33 34 $postValue = $_POST[$fieldName]; 20 35 $solution = isset($postValue) ? trim(sanitize_text_field($postValue)) : ''; 21 36 return $solution; -
friendly-captcha/tags/1.14.0/includes/settings.php
r3080369 r3095155 6 6 add_action('admin_init', 'frcaptcha_settings_init'); 7 7 8 function frcaptcha_settings_init() { 8 function frcaptcha_settings_init() 9 { 9 10 register_setting( 10 11 FriendlyCaptcha_Plugin::$option_group, … … 22 23 FriendlyCaptcha_Plugin::$option_group, 23 24 FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name 25 ); 26 register_setting( 27 FriendlyCaptcha_Plugin::$option_group, 28 FriendlyCaptcha_Plugin::$option_enable_v2_name 24 29 ); 25 30 … … 178 183 add_settings_field( 179 184 'frcaptcha_settings_sitekey_field', 180 'Sitekey', 'frcaptcha_settings_field_callback', 185 'Sitekey', 186 'frcaptcha_settings_field_callback', 181 187 'friendly_captcha_admin', 182 188 'frcaptcha_general_settings_section', … … 190 196 add_settings_field( 191 197 'frcaptcha_settings_api_key_field', 192 'API Key', 'frcaptcha_settings_field_callback', 198 'API Key', 199 'frcaptcha_settings_field_callback', 193 200 'friendly_captcha_admin', 194 201 'frcaptcha_general_settings_section', … … 212 219 add_settings_field( 213 220 'frcaptcha_settings_wpforms_integration_field', 214 'WPForms', 'frcaptcha_settings_field_callback', 221 'WPForms', 222 'frcaptcha_settings_field_callback', 215 223 'friendly_captcha_admin', 216 224 'frcaptcha_integrations_settings_section', … … 224 232 add_settings_field( 225 233 'frcaptcha_settings_wpcf7_integration_field', 226 'Contact Form 7', 'frcaptcha_settings_field_callback', 234 'Contact Form 7', 235 'frcaptcha_settings_field_callback', 227 236 'friendly_captcha_admin', 228 237 'frcaptcha_integrations_settings_section', … … 236 245 add_settings_field( 237 246 'frcaptcha_settings_f12_cf7_doubleoptin_integration_field', 238 'CF7 Double-Opt-In', 'frcaptcha_settings_field_callback', 247 'CF7 Double-Opt-In', 248 'frcaptcha_settings_field_callback', 239 249 'friendly_captcha_admin', 240 250 'frcaptcha_integrations_settings_section', … … 248 258 add_settings_field( 249 259 'frcaptcha_settings_gravity_forms_integration_field', 250 'Gravity Forms', 'frcaptcha_settings_field_callback', 260 'Gravity Forms', 261 'frcaptcha_settings_field_callback', 251 262 'friendly_captcha_admin', 252 263 'frcaptcha_integrations_settings_section', … … 260 271 add_settings_field( 261 272 'frcaptcha_settings_coblocks_integration_field', 262 'CoBlocks Forms', 'frcaptcha_settings_field_callback', 273 'CoBlocks Forms', 274 'frcaptcha_settings_field_callback', 263 275 'friendly_captcha_admin', 264 276 'frcaptcha_integrations_settings_section', … … 272 284 add_settings_field( 273 285 'frcaptcha_settings_fluentform_integration_field', 274 'Fluentform Forms', 'frcaptcha_settings_field_callback', 286 'Fluentform Forms', 287 'frcaptcha_settings_field_callback', 275 288 'friendly_captcha_admin', 276 289 'frcaptcha_integrations_settings_section', … … 284 297 add_settings_field( 285 298 'frcaptcha_settings_elementor_integration_field', 286 'Elementor Pro Forms', 'frcaptcha_settings_field_callback', 299 'Elementor Pro Forms', 300 'frcaptcha_settings_field_callback', 287 301 'friendly_captcha_admin', 288 302 'frcaptcha_integrations_settings_section', … … 296 310 add_settings_field( 297 311 'frcaptcha_settings_html_forms_integration_field', 298 'HTML Forms', 'frcaptcha_settings_field_callback', 312 'HTML Forms', 313 'frcaptcha_settings_field_callback', 299 314 'friendly_captcha_admin', 300 315 'frcaptcha_integrations_settings_section', … … 308 323 add_settings_field( 309 324 'frcaptcha_settings_forminator_integration_field', 310 'Forminator', 'frcaptcha_settings_field_callback', 325 'Forminator', 326 'frcaptcha_settings_field_callback', 311 327 'friendly_captcha_admin', 312 328 'frcaptcha_integrations_settings_section', … … 320 336 add_settings_field( 321 337 'frcaptcha_settings_formidable_integration_field', 322 'Formidable', 'frcaptcha_settings_field_callback', 338 'Formidable', 339 'frcaptcha_settings_field_callback', 323 340 'friendly_captcha_admin', 324 341 'frcaptcha_integrations_settings_section', … … 332 349 add_settings_field( 333 350 'frcaptcha_settings_avada_forms_integration_field', 334 'Avada Form Builder', 'frcaptcha_settings_field_callback', 351 'Avada Form Builder', 352 'frcaptcha_settings_field_callback', 335 353 'friendly_captcha_admin', 336 354 'frcaptcha_integrations_settings_section', … … 344 362 add_settings_field( 345 363 'frcaptcha_settings_wp_register_integration_field', 346 'WordPress Register', 'frcaptcha_settings_field_callback', 364 'WordPress Register', 365 'frcaptcha_settings_field_callback', 347 366 'friendly_captcha_admin', 348 367 'frcaptcha_integrations_settings_section', … … 356 375 add_settings_field( 357 376 'frcaptcha_settings_wp_login_integration_field', 358 'WordPress Login', 'frcaptcha_settings_field_callback', 377 'WordPress Login', 378 'frcaptcha_settings_field_callback', 359 379 'friendly_captcha_admin', 360 380 'frcaptcha_integrations_settings_section', … … 368 388 add_settings_field( 369 389 'frcaptcha_settings_wp_reset_password_integration_field', 370 'WordPress Reset Password', 'frcaptcha_settings_field_callback', 390 'WordPress Reset Password', 391 'frcaptcha_settings_field_callback', 371 392 'friendly_captcha_admin', 372 393 'frcaptcha_integrations_settings_section', … … 380 401 add_settings_field( 381 402 'frcaptcha_settings_wp_comments_integration_field', 382 'WordPress Comments<br>(guests)', 'frcaptcha_settings_field_callback', 403 'WordPress Comments<br>(guests)', 404 'frcaptcha_settings_field_callback', 383 405 'friendly_captcha_admin', 384 406 'frcaptcha_integrations_settings_section', … … 392 414 add_settings_field( 393 415 'frcaptcha_settings_wp_comments_logged_in_integration_field', 394 'WordPress Comments<br>(logged in users)', 'frcaptcha_settings_field_callback', 416 'WordPress Comments<br>(logged in users)', 417 'frcaptcha_settings_field_callback', 395 418 'friendly_captcha_admin', 396 419 'frcaptcha_integrations_settings_section', … … 404 427 add_settings_field( 405 428 'frcaptcha_settings_wc_register_integration_field', 406 'WooCommerce Register', 'frcaptcha_settings_field_callback', 429 'WooCommerce Register', 430 'frcaptcha_settings_field_callback', 407 431 'friendly_captcha_admin', 408 432 'frcaptcha_integrations_settings_section', … … 416 440 add_settings_field( 417 441 'frcaptcha_settings_wc_login_integration_field', 418 'WooCommerce Login', 'frcaptcha_settings_field_callback', 442 'WooCommerce Login', 443 'frcaptcha_settings_field_callback', 419 444 'friendly_captcha_admin', 420 445 'frcaptcha_integrations_settings_section', … … 428 453 add_settings_field( 429 454 'frcaptcha_settings_wc_lost_password_integration_field', 430 'WooCommerce Lost Password', 'frcaptcha_settings_field_callback', 455 'WooCommerce Lost Password', 456 'frcaptcha_settings_field_callback', 431 457 'friendly_captcha_admin', 432 458 'frcaptcha_integrations_settings_section', … … 440 466 add_settings_field( 441 467 'frcaptcha_settings_wc_checkout_integration_field', 442 'WooCommerce Checkout', 'frcaptcha_settings_field_callback', 468 'WooCommerce Checkout', 469 'frcaptcha_settings_field_callback', 443 470 'friendly_captcha_admin', 444 471 'frcaptcha_integrations_settings_section', … … 452 479 add_settings_field( 453 480 'frcaptcha_settings_um_login_integration_field', 454 'Ultimate Member Login', 'frcaptcha_settings_field_callback', 481 'Ultimate Member Login', 482 'frcaptcha_settings_field_callback', 455 483 'friendly_captcha_admin', 456 484 'frcaptcha_integrations_settings_section', … … 464 492 add_settings_field( 465 493 'frcaptcha_settings_um_register_integration_field', 466 'Ultimate Member Register', 'frcaptcha_settings_field_callback', 494 'Ultimate Member Register', 495 'frcaptcha_settings_field_callback', 467 496 'friendly_captcha_admin', 468 497 'frcaptcha_integrations_settings_section', … … 476 505 add_settings_field( 477 506 'frcaptcha_settings_um_reset_password_integration_field', 478 'Ultimate Member Reset Password', 'frcaptcha_settings_field_callback', 507 'Ultimate Member Reset Password', 508 'frcaptcha_settings_field_callback', 479 509 'friendly_captcha_admin', 480 510 'frcaptcha_integrations_settings_section', … … 488 518 add_settings_field( 489 519 'frcaptcha_settings_wpum_registration_integration_field', 490 'WPUM Registration', 'frcaptcha_settings_field_callback', 520 'WPUM Registration', 521 'frcaptcha_settings_field_callback', 491 522 'friendly_captcha_admin', 492 523 'frcaptcha_integrations_settings_section', … … 500 531 add_settings_field( 501 532 'frcaptcha_settings_wpum_login_integration_field', 502 'WPUM Login', 'frcaptcha_settings_field_callback', 533 'WPUM Login', 534 'frcaptcha_settings_field_callback', 503 535 'friendly_captcha_admin', 504 536 'frcaptcha_integrations_settings_section', … … 512 544 add_settings_field( 513 545 'frcaptcha_settings_wpum_password_recovery_integration_field', 514 'WPUM Password Recovery', 'frcaptcha_settings_field_callback', 546 'WPUM Password Recovery', 547 'frcaptcha_settings_field_callback', 515 548 'friendly_captcha_admin', 516 549 'frcaptcha_integrations_settings_section', … … 524 557 add_settings_field( 525 558 'frcaptcha_settings_pb_login_integration_field', 526 'Profile Builder Login', 'frcaptcha_settings_field_callback', 559 'Profile Builder Login', 560 'frcaptcha_settings_field_callback', 527 561 'friendly_captcha_admin', 528 562 'frcaptcha_integrations_settings_section', … … 536 570 add_settings_field( 537 571 'frcaptcha_settings_pb_register_integration_field', 538 'Profile Builder Register', 'frcaptcha_settings_field_callback', 572 'Profile Builder Register', 573 'frcaptcha_settings_field_callback', 539 574 'friendly_captcha_admin', 540 575 'frcaptcha_integrations_settings_section', … … 548 583 add_settings_field( 549 584 'frcaptcha_settings_pb_reset_password_integration_field', 550 'Profile Builder Reset Password', 'frcaptcha_settings_field_callback', 585 'Profile Builder Reset Password', 586 'frcaptcha_settings_field_callback', 551 587 'friendly_captcha_admin', 552 588 'frcaptcha_integrations_settings_section', … … 560 596 add_settings_field( 561 597 'frcaptcha_settings_divi_integration_field', 562 'Divi Theme Contact Form', 'frcaptcha_settings_field_callback', 598 'Divi Theme Contact Form', 599 'frcaptcha_settings_field_callback', 563 600 'friendly_captcha_admin', 564 601 'frcaptcha_integrations_settings_section', … … 580 617 ); 581 618 582 add_settings_field( 583 'frcaptcha_settings_widget_language_field', 584 'Widget Language', 585 'frcaptcha_widget_language_field_callback', 586 'friendly_captcha_admin', 587 'frcaptcha_widget_settings_section', 588 array( 589 "option_name" => FriendlyCaptcha_Plugin::$option_widget_language_name, 590 "description" => "Set the language for the widget. Need another language? <a href=\"https://docs.friendlycaptcha.com/#/widget_api?id=data-lang-attribute\">Help us translate</a>.", 591 ) 592 ); 619 if (!FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 620 add_settings_field( 621 'frcaptcha_settings_widget_language_field', 622 'Widget Language', 623 'frcaptcha_widget_language_field_callback', 624 'friendly_captcha_admin', 625 'frcaptcha_widget_settings_section', 626 array( 627 "option_name" => FriendlyCaptcha_Plugin::$option_widget_language_name, 628 "description" => "Set the language for the widget. Need another language? <a href=\"https://docs.friendlycaptcha.com/#/widget_api?id=data-lang-attribute\">Help us translate</a>.", 629 ) 630 ); 631 } 593 632 594 633 add_settings_field( 595 634 'frcaptcha_settings_widget_theme_field', 596 'Dark theme', 'frcaptcha_settings_field_callback', 635 'Dark theme', 636 'frcaptcha_settings_field_callback', 597 637 'friendly_captcha_admin', 598 638 'frcaptcha_widget_settings_section', … … 604 644 ); 605 645 606 add_settings_field( 607 'frcaptcha_settings_skip_style_injection_field', 608 'Disable Style Injection', 'frcaptcha_settings_field_callback', 609 'friendly_captcha_admin', 610 'frcaptcha_widget_settings_section', 611 array( 612 "option_name" => FriendlyCaptcha_Plugin::$option_skip_style_injection_name, 613 "description" => "Don't load the CSS-Styles for the widget. Use this if you want to style the widget yourself.", 614 "type" => "checkbox" 615 ) 616 ); 646 if (!FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 647 add_settings_field( 648 'frcaptcha_settings_skip_style_injection_field', 649 'Disable Style Injection', 650 'frcaptcha_settings_field_callback', 651 'friendly_captcha_admin', 652 'frcaptcha_widget_settings_section', 653 array( 654 "option_name" => FriendlyCaptcha_Plugin::$option_skip_style_injection_name, 655 "description" => "Don't load the CSS-Styles for the widget. Use this if you want to style the widget yourself.", 656 "type" => "checkbox" 657 ) 658 ); 659 } 617 660 618 661 add_settings_field( 619 662 'frcaptcha_settings_mutation_observer', 620 'Dynamically Initialize', 'frcaptcha_settings_field_callback', 663 'Dynamically Initialize', 664 'frcaptcha_settings_field_callback', 621 665 'friendly_captcha_admin', 622 666 'frcaptcha_widget_settings_section', … … 624 668 "option_name" => FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name, 625 669 "description" => "Make Friendly Captcha look for new widgets that are dynamically added to the page.<br>Enable this when you are using Friendly Captcha in a popup or a multi-step form.", 670 "type" => "checkbox" 671 ) 672 ); 673 674 add_settings_field( 675 'frcaptcha_settings_enable_v2', 676 'Use Friendly Captcha v2', 677 'frcaptcha_settings_field_callback', 678 'friendly_captcha_admin', 679 'frcaptcha_widget_settings_section', 680 array( 681 "option_name" => FriendlyCaptcha_Plugin::$option_enable_v2_name, 682 "description" => " Friendly Captcha v2 is in preview and is <b>not yet intended for production use</b>. You need to enable v2 in the Friendly Captcha dashboard.", 683 "type" => "checkbox" 684 ) 685 ); 686 687 add_settings_field( 688 'frcaptcha_settings_enable_v2', 689 'Use Friendly Captcha v2', 690 'frcaptcha_settings_field_callback', 691 'friendly_captcha_admin', 692 'frcaptcha_widget_settings_section', 693 array( 694 "option_name" => FriendlyCaptcha_Plugin::$option_enable_v2_name, 695 "description" => " Friendly Captcha v2 is in its alpha stage and is <b>not yet intended for production use</b>.", 626 696 "type" => "checkbox" 627 697 ) … … 641 711 add_settings_field( 642 712 'frcaptcha_settings_global_endpoint_field', 643 '🌍 Global Endpoint', 'frcaptcha_settings_field_callback', 713 '🌍 Global Endpoint', 714 'frcaptcha_settings_field_callback', 644 715 'friendly_captcha_admin', 645 716 'frcaptcha_endpoint_settings_section', … … 653 724 add_settings_field( 654 725 'frcaptcha_settings_eu_endpoint_field', 655 '🇪🇺 Dedicated EU Endpoint', 'frcaptcha_settings_field_callback', 726 '🇪🇺 Dedicated EU Endpoint', 727 'frcaptcha_settings_field_callback', 656 728 'friendly_captcha_admin', 657 729 'frcaptcha_endpoint_settings_section', -
friendly-captcha/tags/1.14.0/includes/verification.php
r2851826 r3095155 1 1 <?php 2 2 3 use FriendlyCaptcha\SDK\{Client, ClientConfig}; 3 4 4 function frcaptcha_verify_captcha_solution($solution, $sitekey, $api_key) { 5 $endpoint = 'https://api.friendlycaptcha.com/api/v1/siteverify'; 5 function frcaptcha_verify_captcha_solution($solution, $sitekey, $api_key) 6 { 7 if (FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 8 return frcaptcha_v2_verify_captcha_solution($solution, $sitekey, $api_key); 9 } else { 10 return frcaptcha_v1_verify_captcha_solution($solution, $sitekey, $api_key); 11 } 12 } 6 13 7 $response_body = array( 8 'secret' => $api_key, 9 'sitekey' => $sitekey, 10 'solution' => $solution, 14 function frcaptcha_v1_verify_captcha_solution($solution, $sitekey, $api_key) 15 { 16 $endpoint = 'https://api.friendlycaptcha.com/api/v1/siteverify'; 17 18 $request_body = array( 19 'secret' => $api_key, 20 'sitekey' => $sitekey, 21 'solution' => $solution, 22 ); 23 24 $request = array( 25 'body' => $request_body, 26 ); 27 28 $response = wp_remote_post(esc_url_raw($endpoint), $request); 29 $status = wp_remote_retrieve_response_code($response); 30 31 // Useful for debugging 32 // $body = json_encode($request_body); 33 // trigger_error($body); 34 35 $raw_response_body = wp_remote_retrieve_body($response); 36 $response_body = json_decode($raw_response_body, true); 37 38 if (200 != $status) { 39 if (WP_DEBUG) { 40 frcaptcha_log_remote_request($endpoint, $response); 41 } 42 43 FriendlyCaptcha_Plugin::$instance->show_verification_failed_alert($raw_response_body); 44 45 // Better safe than sorry, if the request is non-200 we can not verify the response 46 // Either the user's credentials are wrong (e.g. wrong sitekey, api key) or the friendly 47 // captcha servers are unresponsive. 48 49 return array( 50 "success" => true, 51 "status" => $status, 52 "errors" => array() 11 53 ); 54 } 12 55 13 $body = json_encode($response_body); 14 $request = array( 15 'body' => $response_body, 16 ); 56 $success = isset($response_body['success']) 57 ? $response_body['success'] 58 : false; 17 59 18 $response = wp_remote_post( esc_url_raw( $endpoint ), $request ); 19 $status = wp_remote_retrieve_response_code( $response ); 60 $errorCodes = isset($response_body['errors']) 61 ? $response_body['errors'] 62 : array(); 20 63 21 // Useful for debugging22 // trigger_error($body);23 64 24 $response_body = wp_remote_retrieve_body( $response ); 25 $response_body = json_decode( $response_body, true ); 65 return array( 66 "success" => $success, 67 "status" => $status, 68 "error_codes" => $errorCodes 69 ); 70 } 26 71 27 if ( 200 != $status ) { 28 if ( WP_DEBUG ) { 29 frcaptcha_log_remote_request( $endpoint, $request, $response ); 30 // error_log("The body was " . $body); 31 } 32 // Better safe than sorry, if the request is non-200 we can not verify the response 33 // Either the user's credentials are wrong (e.g. wrong sitekey, api key) or the friendly 34 // captcha servers are unresponsive. 35 36 // TODO notify site admin somehow 37 return array( 38 "success" => true, 39 "status" => $status, 40 "errors" => array(), 41 "response_body" => $response_body 72 function frcaptcha_v2_verify_captcha_solution($solution, $sitekey, $api_key) 73 { 74 $config = new ClientConfig(); 75 $config->setAPIKey($api_key)->setSitekey($sitekey); 76 if (FriendlyCaptcha_Plugin::$instance->get_eu_puzzle_endpoint_active()) { 77 $config->setSiteverifyEndpoint("eu"); 78 } 79 80 $captchaClient = new Client($config); 81 82 $result = $captchaClient->verifyCaptchaResponse($solution); 83 84 if (!$result->wasAbleToVerify()) { 85 if (WP_DEBUG) { 86 frcaptcha_v2_log_verify_response( 87 $config->siteverifyEndpoint, 88 $result->status, 89 $result->response->error->error_code 42 90 ); 43 91 } 44 92 45 $success = isset( $response_body['success'] ) 46 ? $response_body['success'] 47 : false; 93 $raw_response = json_encode($result->response); 94 FriendlyCaptcha_Plugin::$instance->show_verification_failed_alert($raw_response); 48 95 49 $errorCodes = isset( $response_body['errors'] )50 ? $response_body['errors'] 51 : array(); 96 // Better safe than sorry, when we can not verify the response 97 // Either the user's credentials are wrong (e.g. wrong sitekey, api key) or the friendly 98 // captcha servers are unresponsive. 52 99 100 return array( 101 "success" => true, 102 "status" => $result->status, 103 "errors" => array() 104 ); 105 } 53 106 54 return array( 55 "success" => $success,56 "status" => $status,57 "error_codes" => $errorCodes,58 "response_body" => $response_body59 107 $errorCodes = $result->getErrorCode() ? [$result->getErrorCode()] : []; 108 return array( 109 "success" => $result->shouldAccept(), 110 "status" => $result->status, 111 "error_codes" => $errorCodes 112 ); 60 113 } -
friendly-captcha/tags/1.14.0/modules/avada-forms/avada-forms.php
r2937557 r3095155 1 1 <?php 2 2 3 add_action( 'fusion_element_button_content', 'add_friendly_captcha', 10, 2);4 add_filter( 'fusion_form_demo_mode', 'verify_friendly_captcha');3 add_action('fusion_element_button_content', 'add_friendly_captcha', 10, 2); 4 add_filter('fusion_form_demo_mode', 'verify_friendly_captcha'); 5 5 6 function add_friendly_captcha( $html, $args ) { 7 if ( false === strpos( $html, '<button type="submit"' ) ) { 6 function add_friendly_captcha($html, $args) 7 { 8 if (false === strpos($html, '<button type="submit"')) { 8 9 return $html; 9 10 } … … 21 22 } 22 23 23 function verify_friendly_captcha( $demo_mode ) { 24 function verify_friendly_captcha($demo_mode) 25 { 24 26 $plugin = FriendlyCaptcha_Plugin::$instance; 25 27 … … 30 32 // This is a modified version of frcaptcha_get_sanitized_frcaptcha_solution_from_post which looks for the solution in the formData key 31 33 $form_data = $_POST['formData']; 32 $form_data = wp_parse_args( str_replace( '&', '&', $form_data ));34 $form_data = wp_parse_args(str_replace('&', '&', $form_data)); 33 35 34 $post_value = $form_data['frc-captcha-solution']; 35 $solution = isset($post_value) ? trim(sanitize_text_field($post_value)) : ''; 36 $field_name = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 37 $post_value = $form_data[$field_name]; 38 $solution = isset($post_value) ? trim(sanitize_text_field($post_value)) : ''; 36 39 37 if ( empty( $solution )) {40 if (empty($solution)) { 38 41 $message = FriendlyCaptcha_Plugin::default_error_user_message() . __(" (captcha missing)", "frcaptcha"); 39 die( wp_json_encode( [ 'status' => 'error', 'info' => [ 'friendly_captcha' => $message ] ] ));42 die(wp_json_encode(['status' => 'error', 'info' => ['friendly_captcha' => $message]])); 40 43 } 41 44 42 45 $verification = frcaptcha_verify_captcha_solution($solution, $plugin->get_sitekey(), $plugin->get_api_key()); 43 46 44 if ( !$verification["success"]) {47 if (!$verification["success"]) { 45 48 $message = FriendlyCaptcha_Plugin::default_error_user_message(); 46 die( wp_json_encode( [ 'status' => 'error', 'info' => [ 'friendly_captcha' => $message ] ] ));49 die(wp_json_encode(['status' => 'error', 'info' => ['friendly_captcha' => $message]])); 47 50 } 48 51 -
friendly-captcha/tags/1.14.0/modules/coblocks/coblocks.php
r2673817 r3095155 24 24 25 25 add_action('enqueue_block_editor_assets', array($instance, 'frcaptcha_coblocks_enqueue_block_editor_assets')); 26 27 26 } 28 27 … … 35 34 public function frcaptcha_coblocks_enqueue_block_editor_assets() 36 35 { 37 wp_enqueue_script('frcaptcha_coblocks_load_addon', plugin_dir_url(__FILE__) . '/script.js', 36 wp_enqueue_script( 37 'frcaptcha_coblocks_load_addon', 38 plugin_dir_url(__FILE__) . '/script.js', 38 39 array('wp-blocks', 'wp-editor', 'wp-element', 'wp-i18n'), 39 40 filemtime(plugin_dir_path(__FILE__) . 'script.js') … … 58 59 } 59 60 60 $errorPrefix = '<strong>' . __( 'Error', 'wp-captcha') . '</strong> : ';61 $errorPrefix = '<strong>' . __('Error', 'wp-captcha') . '</strong> : '; 61 62 $solution = frcaptcha_get_sanitized_frcaptcha_solution_from_post(); 62 63 63 if (empty( $solution)) {64 if (empty($solution)) { 64 65 wp_die($errorPrefix . FriendlyCaptcha_Plugin::default_error_user_message() . __(" (captcha missing)", "frcaptcha")); 65 66 } … … 70 71 } 71 72 72 unset($_POST['frc-captcha-solution']); // suppress the solution in email message 73 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 74 unset($_POST[$fieldName]); // suppress the solution in email message 73 75 } 74 76 } 75 76 77 78 79 80 81 -
friendly-captcha/tags/1.14.0/modules/contact-form-7/script.js
r3045871 r3095155 1 1 (function () { 2 2 var resetFriendlyCaptchaWidget = function () { 3 window.friendlyChallenge.autoWidget.reset(); 3 if (window.friendlyChallenge) { 4 window.friendlyChallenge.autoWidget.reset(); 5 } 6 if (window.frcaptcha) { 7 window.frcaptcha.widgets.forEach(function(w) { w.reset() }); 8 } 4 9 }; 5 10 document.addEventListener("DOMContentLoaded", function (event) { -
friendly-captcha/tags/1.14.0/modules/divi/divi.php
r3080369 r3095155 26 26 } 27 27 28 public static function enable($_names_by_slug) { 28 public static function enable($_names_by_slug) 29 { 29 30 $plugin = FriendlyCaptcha_Plugin::$instance; 30 31 … … 52 53 53 54 return $value; 54 55 55 } 56 56 … … 67 67 } 68 68 69 $output = str_replace(self::INSERT_BEFORE, 69 $output = str_replace( 70 self::INSERT_BEFORE, 70 71 frcaptcha_generate_widget_tag_from_plugin(FriendlyCaptcha_Plugin::$instance) . self::INSERT_BEFORE, 71 72 $output … … 82 83 public static function fakeToken() 83 84 { 84 if (isset($_POST['frc-captcha-solution'])) { 85 $_POST['token'] = $_POST['frc-captcha-solution']; 85 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 86 if (isset($_POST[$fieldName])) { 87 $_POST['token'] = $_POST[$fieldName]; 86 88 } 87 89 } -
friendly-captcha/tags/1.14.0/modules/elementor/script.js
r3045871 r3095155 11 11 } 12 12 13 const widget = element.friendlyChallengeWidget;14 if (!widget) {15 return;16 }17 18 13 setTimeout(() => { 19 14 // We reset the widget after a short delay to give the form time to grab the solution and submit it 20 15 // This is a workaround for the fact that the form submit event is fired before the solution value is grabbed 21 16 // 1 second is really conservative as this is not affected by network speed or anything like that 22 widget.reset(); 17 if (element.friendlyChallengeWidget) { 18 element.friendlyChallengeWidget.reset(); 19 } else if (element.frcWidget) { 20 element.frcWidget.reset(); 21 } 23 22 }, 1000); 24 23 }); -
friendly-captcha/tags/1.14.0/modules/fluentform/fluentform.php
r2709857 r3095155 1 1 <?php 2 2 3 add_action( 'fluentform_render_item_submit_button', 'frcaptcha_fluentform_show_widget', 10, 0);3 add_action('fluentform_render_item_submit_button', 'frcaptcha_fluentform_show_widget', 10, 0); 4 4 5 function frcaptcha_fluentform_show_widget() { 5 function frcaptcha_fluentform_show_widget() 6 { 6 7 $plugin = FriendlyCaptcha_Plugin::$instance; 7 8 if (!$plugin->is_configured() or !$plugin->get_fluentform_active()) { … … 17 18 } 18 19 19 add_filter( 'fluentform_before_insert_submission', 'frcaptcha_fluentform_validate', 20, 3 );20 add_filter('fluentform_before_insert_submission', 'frcaptcha_fluentform_validate', 20, 3); 20 21 21 function frcaptcha_fluentform_validate($insert_data, $data, $form) { 22 function frcaptcha_fluentform_validate($insert_data, $data, $form) 23 { 22 24 23 25 $plugin = FriendlyCaptcha_Plugin::$instance; … … 26 28 } 27 29 28 $solution = $data['frc-captcha-solution']; 30 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 31 $solution = $data[$fieldName]; 29 32 30 if ( empty( $solution )) {33 if (empty($solution)) { 31 34 $error_message = FriendlyCaptcha_Plugin::default_error_user_message() . __(" (captcha missing)", "frcaptcha"); 32 35 wp_send_json( 33 36 [ 34 37 'errors' => [ 35 'g-recaptcha-response' => [ $error_message],38 'g-recaptcha-response' => [$error_message], 36 39 ], 37 40 ], … … 47 50 [ 48 51 'errors' => [ 49 'g-recaptcha-response' => [ $error_message],52 'g-recaptcha-response' => [$error_message], 50 53 ], 51 54 ], -
friendly-captcha/tags/1.14.0/modules/wpforms/script.js
r3045871 r3095155 7 7 8 8 elements.each((_, e) => { 9 const widget = e.friendlyChallengeWidget;10 console.log(widget);11 if (!widget) {12 return;9 if (e.friendlyChallengeWidget) { 10 e.friendlyChallengeWidget.reset(); 11 } else if (e.frcWidget) { 12 e.frcWidget.reset(); 13 13 } 14 15 widget.reset();16 14 }); 17 15 } -
friendly-captcha/tags/1.14.0/public/mutation-observer.js
r3080369 r3095155 8 8 } 9 9 10 function setupCaptchaElements(node) { 11 if (!window.friendlyChallenge) { 12 // The friendly-challenge library has not been loaded yet 13 return; 14 } 15 10 function setupV1CaptchaElements(node) { 16 11 let autoWidget = window.friendlyChallenge.autoWidget; 17 12 … … 29 24 } 30 25 26 function setupV2CaptchaElements(node) { 27 const elements = findCaptchaElements(node); 28 window.frcaptcha.attach(elements); 29 } 30 31 31 const observer = new MutationObserver((mutationList) => { 32 32 for (let m = 0; m < mutationList.length; m++) { … … 34 34 35 35 const nodes = mutation.addedNodes; 36 37 36 for (let n = 0; n < nodes.length; n++) { 38 setupCaptchaElements(nodes[n]); 37 if (window.friendlyChallenge) { 38 setupV1CaptchaElements(nodes[n]); 39 } else if (window.frcaptcha) { 40 setupV2CaptchaElements(nodes[n]); 41 } 39 42 } 40 43 } 41 44 }); 42 45 43 function init() 46 function init() { 44 47 // Start observing the document body for changes 45 48 observer.observe(document.body, { … … 47 50 childList: true, 48 51 subtree: true, 49 })}; 52 }); 53 } 50 54 51 55 init(); -
friendly-captcha/tags/1.14.0/public/widgets.php
r3080369 r3095155 1 1 <?php 2 2 3 function frcaptcha_enqueue_widget_scripts($forceMutationObserver = false) { 3 function frcaptcha_enqueue_widget_scripts($forceMutationObserver = false) 4 { 4 5 $plugin = FriendlyCaptcha_Plugin::$instance; 5 6 6 if ( !$plugin->is_configured()) {7 if (!$plugin->is_configured()) { 7 8 return; 8 9 } 9 10 11 if (FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 12 return frcaptcha_v2_enqueue_widget_scripts(); 13 } else { 14 return frcaptcha_v1_enqueue_widget_scripts(); 15 } 16 17 frcaptcha_mutation_observer_scripts($plugin, $forceMutationObserver); 18 } 19 20 function frcaptcha_v1_enqueue_widget_scripts() 21 { 10 22 $version = FriendlyCaptcha_Plugin::$friendly_challenge_version; 11 23 12 24 /* Modern browsers will load this smaller bundle */ 13 wp_enqueue_script( 'friendly-captcha-widget-module', 14 plugin_dir_url( __FILE__ ) . 'vendor/widget.module.min.js', 25 wp_enqueue_script( 26 'friendly-captcha-widget-module', 27 plugin_dir_url(__FILE__) . 'vendor/v1/widget.module.min.js', 15 28 array(), 16 29 $version, … … 19 32 20 33 /* Fallback for (very) old browsers */ 21 wp_enqueue_script( 'friendly-captcha-widget-fallback', 22 plugin_dir_url( __FILE__ ) . 'vendor/widget.polyfilled.min.js', 23 array(), 24 $version, 25 true 26 ); 27 28 if ( $forceMutationObserver || $plugin->get_enable_mutation_observer() ) { 29 wp_enqueue_script( 'friendly-captcha-mutation-observer', 30 plugin_dir_url( __FILE__ ) . 'mutation-observer.js', 34 wp_enqueue_script( 35 'friendly-captcha-widget-fallback', 36 plugin_dir_url(__FILE__) . 'vendor/v1/widget.min.js', 37 array(), 38 $version, 39 true 40 ); 41 } 42 43 function frcaptcha_v2_enqueue_widget_scripts() 44 { 45 $version = FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version; 46 47 /* Modern browsers will load this smaller bundle */ 48 wp_enqueue_script( 49 'friendly-captcha-widget-module', 50 plugin_dir_url(__FILE__) . 'vendor/v2/site.min.js', 51 array(), 52 $version, 53 true 54 ); 55 56 /* Fallback for (very) old browsers */ 57 wp_enqueue_script( 58 'friendly-captcha-widget-fallback', 59 plugin_dir_url(__FILE__) . 'vendor/v2/site.compat.min.js', 60 array(), 61 $version, 62 true 63 ); 64 } 65 66 function frcaptcha_mutation_observer_scripts($plugin, $forceMutationObserver) 67 { 68 $version = FriendlyCaptcha_Plugin::$version; 69 70 if ($forceMutationObserver || $plugin->get_enable_mutation_observer()) { 71 wp_enqueue_script( 72 'friendly-captcha-mutation-observer', 73 plugin_dir_url(__FILE__) . 'mutation-observer.js', 31 74 array(), 32 75 $version, … … 39 82 * Useful if for some reason wp_enqueue_script doesn't work (as seems to be the case with WPForms?!) 40 83 */ 41 function frcaptcha_echo_script_tags() { 84 function frcaptcha_echo_script_tags() 85 { 42 86 $plugin = FriendlyCaptcha_Plugin::$instance; 43 87 44 if ( !$plugin->is_configured()) {88 if (!$plugin->is_configured()) { 45 89 return; 46 90 } 47 91 92 if ($plugin->get_enable_v2()) { 93 return frcaptcha_v2_echo_script_tags(); 94 } else { 95 return frcaptcha_v1_echo_script_tags(); 96 } 97 } 98 99 function frcaptcha_v1_echo_script_tags() 100 { 48 101 $version = FriendlyCaptcha_Plugin::$friendly_challenge_version; 49 102 50 echo '<script async defer type="module" src="'. plugin_dir_url( __FILE__ ) . 'vendor/widget.module.min.js?ver=' . $version . '"></script>'; 51 echo '<script async defer nomodule src="'. plugin_dir_url( __FILE__ ) . 'vendor/widget.polyfilled.min.js?ver=' . $version . '"></script>'; 52 } 53 54 add_filter( 'script_loader_tag', 'frcaptcha_transform_friendly_captcha_script_tags', 10, 3 ); 55 56 function frcaptcha_transform_friendly_captcha_script_tags( $tag, $handle, $src ) 57 { 58 if ( 'friendly-captcha-widget-module' == $handle) { 59 return str_replace( '<script', '<script async defer type="module"', $tag ); 60 } 61 if ( 'friendly-captcha-widget-fallback' == $handle) { 62 return str_replace( '<script', '<script async defer nomodule', $tag ); 63 } 64 if ( 'friendly-captcha-mutation-observer' == $handle) { 65 return str_replace( '<script', '<script async defer', $tag ); 66 } 67 68 return $tag; 69 } 70 71 function frcaptcha_generate_widget_tag_from_plugin($plugin) { 72 if (!$plugin->is_configured()) { 73 return ""; 74 } 75 76 $sitekey = $plugin->get_sitekey(); 77 $lang = $plugin->get_widget_language(); 103 echo '<script async defer type="module" src="' . plugin_dir_url(__FILE__) . 'vendor/v1/widget.module.min.js?ver=' . $version . '"></script>'; 104 echo '<script async defer nomodule src="' . plugin_dir_url(__FILE__) . 'vendor/v1/widget.min.js?ver=' . $version . '"></script>'; 105 } 106 107 108 function frcaptcha_v2_echo_script_tags() 109 { 110 $version = FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version; 111 112 echo '<script async defer type="module" src="' . plugin_dir_url(__FILE__) . 'vendor/v2/site.min.js?ver=' . $version . '"></script>'; 113 echo '<script async defer nomodule src="' . plugin_dir_url(__FILE__) . 'vendor/v2/site.compat.min.js?ver=' . $version . '"></script>'; 114 } 115 116 add_filter('script_loader_tag', 'frcaptcha_transform_friendly_captcha_script_tags', 10, 3); 117 118 function frcaptcha_transform_friendly_captcha_script_tags($tag, $handle, $src) 119 { 120 if ('friendly-captcha-widget-module' == $handle) { 121 return str_replace('<script', '<script async defer type="module"', $tag); 122 } 123 if ('friendly-captcha-widget-fallback' == $handle) { 124 return str_replace('<script', '<script async defer nomodule', $tag); 125 } 126 if ('friendly-captcha-mutation-observer' == $handle) { 127 return str_replace('<script', '<script async defer', $tag); 128 } 129 130 return $tag; 131 } 132 133 function frcaptcha_generate_widget_tag_from_plugin($plugin) 134 { 135 if (!$plugin->is_configured()) { 136 return ""; 137 } 138 139 if ($plugin->get_enable_v2()) { 140 return frcaptcha_v2_generate_widget_tag_from_plugin($plugin); 141 } else { 142 return frcaptcha_v1_generate_widget_tag_from_plugin($plugin); 143 } 144 } 145 146 function frcaptcha_v1_generate_widget_tag_from_plugin($plugin) 147 { 148 $sitekey = $plugin->get_sitekey(); 149 $lang = $plugin->get_widget_language(); 78 150 79 151 $extra_attributes = ""; … … 92 164 '%s%s', 93 165 frcaptcha_generate_skip_style_injection_tag($plugin), 94 frcaptcha_generate_widget_tag($sitekey, $lang, $extra_attributes, $theme) 95 ); 96 } 97 98 function frcaptcha_generate_widget_tag($sitekey, $language, $extra_attributes = "", $theme = "") { 99 return sprintf( 166 frcaptcha_v1_generate_widget_tag($sitekey, $lang, $extra_attributes, $theme) 167 ); 168 } 169 170 function frcaptcha_v2_generate_widget_tag_from_plugin($plugin) 171 { 172 $sitekey = $plugin->get_sitekey(); 173 174 $extra_attributes = ""; 175 $eu = $plugin->get_eu_puzzle_endpoint_active(); 176 177 if ($eu) { 178 $extra_attributes = "data-api-endpoint=\"eu\""; 179 } 180 181 $theme = $plugin->get_widget_dark_theme_active() ? "dark" : "light"; 182 183 return sprintf( 184 '%s%s', 185 frcaptcha_generate_skip_style_injection_tag($plugin), 186 frcaptcha_v2_generate_widget_tag($sitekey, $extra_attributes, $theme) 187 ); 188 } 189 190 function frcaptcha_v1_generate_widget_tag($sitekey, $language, $extra_attributes = "", $theme = "") 191 { 192 return sprintf( 100 193 '<div class="frc-captcha %s" data-sitekey="%s" data-lang="%s" %s></div> 101 194 <noscript>You need to enable Javascript for the anti-spam check.</noscript>', 102 esc_html($theme), 103 esc_html($sitekey), 104 esc_html($language), 105 $extra_attributes); 195 esc_html($theme), 196 esc_html($sitekey), 197 esc_html($language), 198 $extra_attributes 199 ); 200 } 201 202 function frcaptcha_v2_generate_widget_tag($sitekey, $extra_attributes = "", $theme = "light") 203 { 204 return sprintf( 205 '<div class="frc-captcha" data-sitekey="%s" data-theme="%s" %s></div> 206 <noscript>You need to enable Javascript for the anti-spam check.</noscript>', 207 esc_html($sitekey), 208 esc_html($theme), 209 $extra_attributes 210 ); 106 211 } 107 212 108 213 $frcaptcha_skip_style_injection_tag_injected = false; 109 214 110 function frcaptcha_generate_skip_style_injection_tag($plugin) { 215 function frcaptcha_generate_skip_style_injection_tag($plugin) 216 { 217 global $frcaptcha_skip_style_injection_tag_injected; 218 111 219 if (!$plugin->get_skip_style_injection()) { 112 220 return ''; … … 121 229 return '<div id="frc-style"></div>'; 122 230 } 123 124 function frcaptcha_generate_extra_widget_attributes($plugin) {125 } -
friendly-captcha/tags/1.14.0/readme.txt
r3080369 r3095155 3 3 Tags: captcha, antispam, spam, contact form, recaptcha, friendly-captcha, block spam, anti-spam, comments, elementor 4 4 Requires at least: 5.0 5 Tested up to: 6. 45 Tested up to: 6.5 6 6 Requires PHP: 7.3 7 Stable tag: 1.1 3.07 Stable tag: 1.14.0 8 8 License: GPL v2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 97 97 == Changelog == 98 98 99 = 1.14.0 = 100 101 * Add support for Friendly Captcha v2 (preview) 102 * Show an admin notice when verification has failed 103 99 104 = 1.13.0 = 100 105 -
friendly-captcha/trunk/friendly-captcha.php
r3080369 r3095155 4 4 * Plugin Name: Friendly Captcha for WordPress 5 5 * Description: Protect WordPress website forms from spam and abuse with Friendly Captcha, a privacy-first anti-bot solution. 6 * Version: 1.1 3.06 * Version: 1.14.0 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.3 … … 20 20 } 21 21 22 define('FRIENDLY_CAPTCHA_VERSION', '1.1 3.0');22 define('FRIENDLY_CAPTCHA_VERSION', '1.14.0'); 23 23 define('FRIENDLY_CAPTCHA_FRIENDLY_CHALLENGE_VERSION', '0.9.12'); 24 define('FRIENDLY_CAPTCHA_FRIENDLY_CAPTCHA_SDK_VERSION', '0.1.7'); 24 25 define('FRIENDLY_CAPTCHA_SUPPORTED_LANGUAGES', [ 25 26 "en" => "English", … … 66 67 } 67 68 69 require plugin_dir_path(__FILE__) . 'vendor/autoload.php'; 68 70 require plugin_dir_path(__FILE__) . 'includes/core.php'; -
friendly-captcha/trunk/includes/admin.php
r2889247 r3095155 1 1 <?php 2 2 3 require plugin_dir_path( __FILE__) . '../admin/options.php';3 require plugin_dir_path(__FILE__) . '../admin/options.php'; 4 4 5 5 if (is_admin()) { 6 add_action( 'admin_menu', 'frcaptcha_options_page');6 add_action('admin_menu', 'frcaptcha_options_page'); 7 7 8 8 // Add link to settings page in the navbar 9 function frcaptcha_options_page() { 9 function frcaptcha_options_page() 10 { 10 11 add_options_page( 11 12 'Friendly Captcha', … … 19 20 20 21 // Add link to settings in the plugin list 21 add_filter( 'plugin_action_links_friendly-captcha/friendly-captcha.php', 'frcaptcha_settings_link' ); 22 function frcaptcha_settings_link( $links ) { 23 $url = esc_url( add_query_arg( 22 add_filter('plugin_action_links_friendly-captcha/friendly-captcha.php', 'frcaptcha_settings_link'); 23 function frcaptcha_settings_link($links) 24 { 25 $url = esc_url(add_query_arg( 24 26 'page', 25 27 'friendly_captcha_admin', 26 28 get_admin_url() . 'options-general.php' 27 ) 28 $settings_link = "<a href='$url'>" . __( 'Settings') . '</a>';29 29 )); 30 $settings_link = "<a href='$url'>" . __('Settings') . '</a>'; 31 30 32 array_push( 31 33 $links, … … 36 38 37 39 if (!FriendlyCaptcha_Plugin::$instance->is_configured()) { 38 function frcaptcha_admin_notice__not_configured() { 39 $url = esc_url( add_query_arg( 40 function frcaptcha_admin_notice__not_configured() 41 { 42 $url = esc_url(add_query_arg( 40 43 'page', 41 44 'friendly_captcha_admin', 42 45 get_admin_url() . 'options-general.php' 43 ) 46 )); 44 47 45 48 ?> 46 49 <div class="notice notice-error is-dismissible"> 47 50 <p> 48 <b>Friendly Captcha is not configured yet!</b> 49 Visit the <a href="<?php echo $url ?>">Friendly Captcha settings</a> and enter a valid Sitekey and API Key to complete the setup.</p> 51 <b>Friendly Captcha is not configured yet!</b> 52 Visit the <a href="<?php echo $url ?>">Friendly Captcha settings</a> and enter a valid Sitekey and API Key to complete the setup. 53 </p> 50 54 </div> 51 55 <?php 52 56 } 53 57 54 add_action( 'admin_notices', 'frcaptcha_admin_notice__not_configured' ); 58 add_action('admin_notices', 'frcaptcha_admin_notice__not_configured'); 59 } 60 61 if (isset($_GET['frcaptcha-verification-failed-dismissed'])) { 62 FriendlyCaptcha_Plugin::$instance->remove_verification_failed_alert(); 63 } 64 65 if (FriendlyCaptcha_Plugin::$instance->get_verification_failed_alert() != false) { 66 function frcaptcha_admin_notice__verification_failed() 67 { 68 $url = esc_url(add_query_arg( 69 'page', 70 'friendly_captcha_admin', 71 get_admin_url() . 'options-general.php' 72 )); 73 74 ?> 75 <div class="notice notice-error is-dismissible"> 76 <p> 77 <b>Friendly Captcha verification has failed!</b> 78 <br> 79 This is usually because you have entered an incorrect API Key. Please visit the <a href="<?php echo $url ?>">Friendly Captcha settings</a> and enter a valid Sitekey and API Key. 80 <br><br> 81 <code><?php echo FriendlyCaptcha_Plugin::$instance->get_verification_failed_alert(); ?></code> 82 </p> 83 <a href="?frcaptcha-verification-failed-dismissed" class="notice-dismiss" style="text-decoration: none;"> 84 <span class="screen-reader-text">Dismiss this notice.</span> 85 </a> 86 </div> 87 <?php 88 } 89 90 add_action('admin_notices', 'frcaptcha_admin_notice__verification_failed'); 55 91 } 56 92 } -
friendly-captcha/trunk/includes/core.php
r3080369 r3095155 2 2 3 3 /* Main entry point */ 4 5 // TODO: is this necessary? It breaks intellisense.. 6 // if ( !class_exists( 'FriendlyCaptcha_Plugin' ) ) { 7 class FriendlyCaptcha_Plugin { 8 9 /** 10 * Singleton global instance 11 */ 12 public static $instance; 13 public $plugin_name; 14 15 public static $version; 16 public static $friendly_challenge_version; 17 18 // Global constants 19 public static $option_group = "frcaptcha_options"; 20 public static $option_sitekey_name = "frcaptcha_sitekey"; 21 public static $option_api_key_name = "frcaptcha_api_key"; 22 public static $option_skip_style_injection_name = "frcaptcha_skip_style_injection"; 23 public static $option_enable_mutation_observer_name = "frcaptcha_enable_mutation_observer"; 24 25 // Integrations 26 public static $option_contact_form_7_integration_active_name = "frcaptcha_contact_form_7_integration_active"; 27 public static $option_f12_cf7_doubleoptin_integration_active_name = "frcaptcha_f12_cf7_doubleoptin_integration_active"; 28 public static $option_wpforms_integration_active_name = "frcaptcha_wpforms_integration_active"; 29 public static $option_gravity_forms_integration_active_name = "frcaptcha_gravity_forms_integration_active"; 30 public static $option_coblocks_integration_active_name = "frcaptcha_coblocks_integration_active"; 31 public static $option_fluentform_integration_active_name = "frcaptcha_fluentform_integration_active"; 32 public static $option_elementor_forms_integration_active_name = "frcaptcha_elementor_integration_active"; 33 public static $option_html_forms_integration_active_name = "frcaptcha_html_forms_integration_active"; 34 public static $option_forminator_integration_active_name = "frcaptcha_forminator_integration_active"; 35 public static $option_formidable_integration_active_name = "frcaptcha_formidable_integration_active"; 36 public static $option_avada_forms_integration_active_name = "frcaptcha_avada_forms_integration_active"; 37 38 public static $option_wp_register_integration_active_name = "frcaptcha_wp_register_integration_active"; 39 public static $option_wp_login_integration_active_name = "frcaptcha_wp_login_integration_active"; 40 public static $option_wp_reset_password_integration_active_name = "frcaptcha_wp_reset_password_integration_active"; 41 public static $option_wp_comments_integration_active_name = "frcaptcha_wp_comments_integration_active"; 42 public static $option_wp_comments_logged_in_integration_active_name = "frcaptcha_wp_comments_logged_in_integration_active"; 43 44 public static $option_wc_register_integration_active_name = "frcaptcha_wc_register_integration_active"; 45 public static $option_wc_login_integration_active_name = "frcaptcha_wc_login_integration_active"; 46 public static $option_wc_lost_password_integration_active_name = "frcaptcha_wc_lost_password_integration_active"; 47 public static $option_wc_checkout_integration_active_name = "frcaptcha_wc_checkout_integration_active"; 48 49 public static $option_um_login_integration_active_name = "frcaptcha_um_login_integration_active"; 50 public static $option_um_register_integration_active_name = "frcaptcha_um_register_integration_active"; 51 public static $option_um_reset_password_integration_active_name = "frcaptcha_um_reset_password_integration_active"; 52 53 public static $option_wpum_registration_integration_active_name = "frcaptcha_wpum_registration_integration_active"; 54 public static $option_wpum_login_integration_active_name = "frcaptcha_wpum_login_integration_active"; 55 public static $option_wpum_password_recovery_integration_active_name = "frcaptcha_wpum_password_recovery_integration_active"; 56 57 public static $option_pb_login_integration_active_name = "frcaptcha_pb_login_integration_active"; 58 public static $option_pb_register_integration_active_name = "frcaptcha_pb_register_integration_active"; 59 public static $option_pb_reset_password_integration_active_name = "frcaptcha_pb_reset_password_integration_active"; 60 public static $option_divi_integration_active_name = "frcaptcha_divi_integration_active"; 61 62 public static $option_widget_language_name = "frcaptcha_widget_language"; 63 public static $option_widget_dark_theme_active_name = "frcaptcha_widget_dark_theme_active"; 64 65 public static $option_global_puzzle_endpoint_active_name = "frcaptcha_global_endpoint_active"; 66 public static $option_eu_puzzle_endpoint_active_name = "frcaptcha_eu_endpoint_active"; 67 68 69 public function init() { 70 if ( defined( 'FRIENDLY_CAPTCHA_VERSION' ) ) { 71 FriendlyCaptcha_Plugin::$version = FRIENDLY_CAPTCHA_VERSION; 72 FriendlyCaptcha_Plugin::$friendly_challenge_version = FRIENDLY_CAPTCHA_FRIENDLY_CHALLENGE_VERSION; 73 } else { 74 FriendlyCaptcha_Plugin::$version = '0.0.0'; 75 FriendlyCaptcha_Plugin::$friendly_challenge_version = '0.0.0'; 4 class FriendlyCaptcha_Plugin 5 { 6 7 /** 8 * Singleton global instance 9 * @var FriendlyCaptcha_Plugin 10 */ 11 public static $instance; 12 public $plugin_name; 13 14 public static $version; 15 // JavaScript client SDK for v1 16 public static $friendly_challenge_version; 17 // JavaScript client SDK for v2 18 public static $friendly_captcha_sdk_version; 19 20 // Global constants 21 public static $option_group = "frcaptcha_options"; 22 public static $option_sitekey_name = "frcaptcha_sitekey"; 23 public static $option_api_key_name = "frcaptcha_api_key"; 24 public static $option_skip_style_injection_name = "frcaptcha_skip_style_injection"; 25 public static $option_enable_mutation_observer_name = "frcaptcha_enable_mutation_observer"; 26 public static $option_enable_v2_name = "frcaptcha_enable_v2"; 27 28 // Integrations 29 public static $option_contact_form_7_integration_active_name = "frcaptcha_contact_form_7_integration_active"; 30 public static $option_f12_cf7_doubleoptin_integration_active_name = "frcaptcha_f12_cf7_doubleoptin_integration_active"; 31 public static $option_wpforms_integration_active_name = "frcaptcha_wpforms_integration_active"; 32 public static $option_gravity_forms_integration_active_name = "frcaptcha_gravity_forms_integration_active"; 33 public static $option_coblocks_integration_active_name = "frcaptcha_coblocks_integration_active"; 34 public static $option_fluentform_integration_active_name = "frcaptcha_fluentform_integration_active"; 35 public static $option_elementor_forms_integration_active_name = "frcaptcha_elementor_integration_active"; 36 public static $option_html_forms_integration_active_name = "frcaptcha_html_forms_integration_active"; 37 public static $option_forminator_integration_active_name = "frcaptcha_forminator_integration_active"; 38 public static $option_formidable_integration_active_name = "frcaptcha_formidable_integration_active"; 39 public static $option_avada_forms_integration_active_name = "frcaptcha_avada_forms_integration_active"; 40 41 public static $option_wp_register_integration_active_name = "frcaptcha_wp_register_integration_active"; 42 public static $option_wp_login_integration_active_name = "frcaptcha_wp_login_integration_active"; 43 public static $option_wp_reset_password_integration_active_name = "frcaptcha_wp_reset_password_integration_active"; 44 public static $option_wp_comments_integration_active_name = "frcaptcha_wp_comments_integration_active"; 45 public static $option_wp_comments_logged_in_integration_active_name = "frcaptcha_wp_comments_logged_in_integration_active"; 46 47 public static $option_wc_register_integration_active_name = "frcaptcha_wc_register_integration_active"; 48 public static $option_wc_login_integration_active_name = "frcaptcha_wc_login_integration_active"; 49 public static $option_wc_lost_password_integration_active_name = "frcaptcha_wc_lost_password_integration_active"; 50 public static $option_wc_checkout_integration_active_name = "frcaptcha_wc_checkout_integration_active"; 51 52 public static $option_um_login_integration_active_name = "frcaptcha_um_login_integration_active"; 53 public static $option_um_register_integration_active_name = "frcaptcha_um_register_integration_active"; 54 public static $option_um_reset_password_integration_active_name = "frcaptcha_um_reset_password_integration_active"; 55 56 public static $option_wpum_registration_integration_active_name = "frcaptcha_wpum_registration_integration_active"; 57 public static $option_wpum_login_integration_active_name = "frcaptcha_wpum_login_integration_active"; 58 public static $option_wpum_password_recovery_integration_active_name = "frcaptcha_wpum_password_recovery_integration_active"; 59 60 public static $option_pb_login_integration_active_name = "frcaptcha_pb_login_integration_active"; 61 public static $option_pb_register_integration_active_name = "frcaptcha_pb_register_integration_active"; 62 public static $option_pb_reset_password_integration_active_name = "frcaptcha_pb_reset_password_integration_active"; 63 public static $option_divi_integration_active_name = "frcaptcha_divi_integration_active"; 64 65 public static $option_widget_language_name = "frcaptcha_widget_language"; 66 public static $option_widget_dark_theme_active_name = "frcaptcha_widget_dark_theme_active"; 67 68 public static $option_global_puzzle_endpoint_active_name = "frcaptcha_global_endpoint_active"; 69 public static $option_eu_puzzle_endpoint_active_name = "frcaptcha_eu_endpoint_active"; 70 71 public static $option_verification_failed_alert_name = "frcaptcha_verification_failed_alert"; 72 73 public function init() 74 { 75 if (defined('FRIENDLY_CAPTCHA_VERSION')) { 76 FriendlyCaptcha_Plugin::$version = FRIENDLY_CAPTCHA_VERSION; 77 FriendlyCaptcha_Plugin::$friendly_challenge_version = FRIENDLY_CAPTCHA_FRIENDLY_CHALLENGE_VERSION; 78 FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version = FRIENDLY_CAPTCHA_FRIENDLY_CAPTCHA_SDK_VERSION; 79 } else { 80 FriendlyCaptcha_Plugin::$version = '0.0.0'; 81 FriendlyCaptcha_Plugin::$friendly_challenge_version = '0.0.0'; 82 FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version = '0.0.0'; 83 } 84 $this->plugin_name = 'friendly-captcha'; 85 86 FriendlyCaptcha_Plugin::$instance = $this; 87 } 88 89 public static function default_error_user_message() 90 { 91 /* translators: this is the main error message shown to the user when the captcha failed or wasn't completed. */ 92 return __("Anti-robot verification failed, please try again.", "frcaptcha"); 93 } 94 95 /** 96 * When both the sitekey and the apikey are set, we can consider the plugin configured. 97 */ 98 public function is_configured() 99 { 100 return $this->get_sitekey() !== null && $this->get_sitekey() !== "" && $this->get_api_key() !== null && $this->get_api_key() !== ""; 101 } 102 103 public function get_sitekey() 104 { 105 return trim(get_option(FriendlyCaptcha_Plugin::$option_sitekey_name)); 106 } 107 108 public function get_api_key() 109 { 110 return trim(get_option(FriendlyCaptcha_Plugin::$option_api_key_name)); 111 } 112 113 public function get_skip_style_injection() 114 { 115 return get_option(FriendlyCaptcha_Plugin::$option_skip_style_injection_name) == 1; 116 } 117 118 public function get_enable_mutation_observer() 119 { 120 return get_option(FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name) == 1; 121 } 122 123 public function get_enable_v2() 124 { 125 return get_option(FriendlyCaptcha_Plugin::$option_enable_v2_name) == 1; 126 } 127 128 public function get_solution_field_name() 129 { 130 if ($this->get_enable_v2()) { 131 return "frc-captcha-response"; 132 } else { 133 return "frc-captcha-solution"; 134 } 135 } 136 137 public function get_contact_form_7_active() 138 { 139 return get_option(FriendlyCaptcha_Plugin::$option_contact_form_7_integration_active_name) == 1; 140 } 141 142 public function get_f12_cf7_doubleoptin_active() 143 { 144 return get_option(FriendlyCaptcha_Plugin::$option_f12_cf7_doubleoptin_integration_active_name) == 1; 145 } 146 147 public function get_wpforms_active() 148 { 149 return get_option(FriendlyCaptcha_Plugin::$option_wpforms_integration_active_name) == 1; 150 } 151 152 public function get_gravity_forms_active() 153 { 154 return get_option(FriendlyCaptcha_Plugin::$option_gravity_forms_integration_active_name) == 1; 155 } 156 157 public function get_coblocks_active() 158 { 159 return get_option(FriendlyCaptcha_Plugin::$option_coblocks_integration_active_name) == 1; 160 } 161 162 public function get_fluentform_active() 163 { 164 return get_option(FriendlyCaptcha_Plugin::$option_fluentform_integration_active_name) == 1; 165 } 166 167 public function get_elementor_active() 168 { 169 return get_option(FriendlyCaptcha_Plugin::$option_elementor_forms_integration_active_name) == 1; 170 } 171 172 public function get_html_forms_active() 173 { 174 return get_option(FriendlyCaptcha_Plugin::$option_html_forms_integration_active_name) == 1; 175 } 176 177 public function get_forminator_active() 178 { 179 return get_option(FriendlyCaptcha_Plugin::$option_forminator_integration_active_name) == 1; 180 } 181 182 public function get_formidable_active() 183 { 184 return get_option(FriendlyCaptcha_Plugin::$option_formidable_integration_active_name) == 1; 185 } 186 187 public function get_avada_forms_active() 188 { 189 return get_option(FriendlyCaptcha_Plugin::$option_avada_forms_integration_active_name) == 1; 190 } 191 192 public function get_wp_register_active() 193 { 194 return get_option(FriendlyCaptcha_Plugin::$option_wp_register_integration_active_name) == 1; 195 } 196 197 public function get_wp_login_active() 198 { 199 return get_option(FriendlyCaptcha_Plugin::$option_wp_login_integration_active_name) == 1; 200 } 201 202 public function get_wp_reset_password_active() 203 { 204 return get_option(FriendlyCaptcha_Plugin::$option_wp_reset_password_integration_active_name) == 1; 205 } 206 207 public function get_wp_comments_active() 208 { 209 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_integration_active_name) == 1; 210 } 211 212 public function get_wp_comments_logged_in_active() 213 { 214 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_logged_in_integration_active_name) == 1; 215 } 216 217 public function get_wc_login_active() 218 { 219 return get_option(FriendlyCaptcha_Plugin::$option_wc_login_integration_active_name) == 1; 220 } 221 222 public function get_wc_register_active() 223 { 224 return get_option(FriendlyCaptcha_Plugin::$option_wc_register_integration_active_name) == 1; 225 } 226 227 public function get_wc_lost_password_active() 228 { 229 return get_option(FriendlyCaptcha_Plugin::$option_wc_lost_password_integration_active_name) == 1; 230 } 231 232 public function get_wc_checkout_active() 233 { 234 return get_option(FriendlyCaptcha_Plugin::$option_wc_checkout_integration_active_name) == 1; 235 } 236 237 public function get_um_login_active() 238 { 239 return get_option(FriendlyCaptcha_Plugin::$option_um_login_integration_active_name) == 1; 240 } 241 242 public function get_um_register_active() 243 { 244 return get_option(FriendlyCaptcha_Plugin::$option_um_register_integration_active_name) == 1; 245 } 246 247 public function get_um_reset_password_active() 248 { 249 return get_option(FriendlyCaptcha_Plugin::$option_um_reset_password_integration_active_name) == 1; 250 } 251 252 public function get_wpum_login_active() 253 { 254 return get_option(FriendlyCaptcha_Plugin::$option_wpum_login_integration_active_name) == 1; 255 } 256 257 public function get_wpum_registration_active() 258 { 259 return get_option(FriendlyCaptcha_Plugin::$option_wpum_registration_integration_active_name) == 1; 260 } 261 262 public function get_wpum_password_recovery_active() 263 { 264 return get_option(FriendlyCaptcha_Plugin::$option_wpum_password_recovery_integration_active_name) == 1; 265 } 266 267 public function get_pb_login_active() 268 { 269 return get_option(FriendlyCaptcha_Plugin::$option_pb_login_integration_active_name) == 1; 270 } 271 272 public function get_pb_register_active() 273 { 274 return get_option(FriendlyCaptcha_Plugin::$option_pb_register_integration_active_name) == 1; 275 } 276 277 public function get_pb_reset_password_active() 278 { 279 return get_option(FriendlyCaptcha_Plugin::$option_pb_reset_password_integration_active_name) == 1; 280 } 281 282 283 public function get_divi_active() 284 { 285 return get_option(FriendlyCaptcha_Plugin::$option_divi_integration_active_name) == 1; 286 } 287 288 /* Widget options */ 289 290 public function get_widget_language() 291 { 292 $lang = get_option(FriendlyCaptcha_Plugin::$option_widget_language_name); 293 $lang = empty($lang) ? "automatic" : $lang; // Default to automatic 294 if ($lang == "automatic") { 295 $lang = substr(get_locale(), 0, 2); 296 if (!array_key_exists($lang, FRIENDLY_CAPTCHA_SUPPORTED_LANGUAGES)) { 297 $lang = "en"; // Fallback to en 76 298 } 77 $this->plugin_name = 'friendly-captcha';78 79 FriendlyCaptcha_Plugin::$instance = $this;80 299 } 81 82 public static function default_error_user_message() { 83 /* translators: this is the main error message shown to the user when the captcha failed or wasn't completed. */ 84 return __("Anti-robot verification failed, please try again.", "frcaptcha"); 85 } 86 87 /** 88 * When both the sitekey and the apikey are set, we can consider the plugin configured. 89 */ 90 public function is_configured() { 91 return $this->get_sitekey() !== null && $this->get_sitekey() !== "" && $this->get_api_key() !== null && $this->get_api_key() !== ""; 92 } 93 94 public function get_sitekey() { 95 return trim(get_option(FriendlyCaptcha_Plugin::$option_sitekey_name)); 96 } 97 98 public function get_api_key() { 99 return trim(get_option(FriendlyCaptcha_Plugin::$option_api_key_name)); 100 } 101 102 public function get_skip_style_injection() { 103 return get_option(FriendlyCaptcha_Plugin::$option_skip_style_injection_name) == 1; 104 } 105 106 public function get_enable_mutation_observer() { 107 return get_option(FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name) == 1; 108 } 109 110 public function get_contact_form_7_active() { 111 return get_option(FriendlyCaptcha_Plugin::$option_contact_form_7_integration_active_name) == 1; 112 } 113 114 public function get_f12_cf7_doubleoptin_active() { 115 return get_option(FriendlyCaptcha_Plugin::$option_f12_cf7_doubleoptin_integration_active_name) == 1; 116 } 117 118 public function get_wpforms_active() { 119 return get_option(FriendlyCaptcha_Plugin::$option_wpforms_integration_active_name) == 1; 120 } 121 122 public function get_gravity_forms_active() { 123 return get_option(FriendlyCaptcha_Plugin::$option_gravity_forms_integration_active_name) == 1; 124 } 125 126 public function get_coblocks_active() { 127 return get_option(FriendlyCaptcha_Plugin::$option_coblocks_integration_active_name) == 1; 128 } 129 130 public function get_fluentform_active() { 131 return get_option(FriendlyCaptcha_Plugin::$option_fluentform_integration_active_name) == 1; 132 } 133 134 public function get_elementor_active() { 135 return get_option(FriendlyCaptcha_Plugin::$option_elementor_forms_integration_active_name) == 1; 136 } 137 138 public function get_html_forms_active() { 139 return get_option(FriendlyCaptcha_Plugin::$option_html_forms_integration_active_name) == 1; 140 } 141 142 public function get_forminator_active() { 143 return get_option(FriendlyCaptcha_Plugin::$option_forminator_integration_active_name) == 1; 144 } 145 146 public function get_formidable_active() { 147 return get_option(FriendlyCaptcha_Plugin::$option_formidable_integration_active_name) == 1; 148 } 149 150 public function get_avada_forms_active() { 151 return get_option(FriendlyCaptcha_Plugin::$option_avada_forms_integration_active_name) == 1; 152 } 153 154 public function get_wp_register_active() { 155 return get_option(FriendlyCaptcha_Plugin::$option_wp_register_integration_active_name) == 1; 156 } 157 158 public function get_wp_login_active() { 159 return get_option(FriendlyCaptcha_Plugin::$option_wp_login_integration_active_name) == 1; 160 } 161 162 public function get_wp_reset_password_active() { 163 return get_option(FriendlyCaptcha_Plugin::$option_wp_reset_password_integration_active_name) == 1; 164 } 165 166 public function get_wp_comments_active() { 167 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_integration_active_name) == 1; 168 } 169 170 public function get_wp_comments_logged_in_active() { 171 return get_option(FriendlyCaptcha_Plugin::$option_wp_comments_logged_in_integration_active_name) == 1; 172 } 173 174 public function get_wc_login_active() { 175 return get_option(FriendlyCaptcha_Plugin::$option_wc_login_integration_active_name) == 1; 176 } 177 178 public function get_wc_register_active() { 179 return get_option(FriendlyCaptcha_Plugin::$option_wc_register_integration_active_name) == 1; 180 } 181 182 public function get_wc_lost_password_active() { 183 return get_option(FriendlyCaptcha_Plugin::$option_wc_lost_password_integration_active_name) == 1; 184 } 185 186 public function get_wc_checkout_active() { 187 return get_option(FriendlyCaptcha_Plugin::$option_wc_checkout_integration_active_name) == 1; 188 } 189 190 public function get_um_login_active() { 191 return get_option(FriendlyCaptcha_Plugin::$option_um_login_integration_active_name) == 1; 192 } 193 194 public function get_um_register_active() { 195 return get_option(FriendlyCaptcha_Plugin::$option_um_register_integration_active_name) == 1; 196 } 197 198 public function get_um_reset_password_active() { 199 return get_option(FriendlyCaptcha_Plugin::$option_um_reset_password_integration_active_name) == 1; 200 } 201 202 public function get_wpum_login_active() { 203 return get_option(FriendlyCaptcha_Plugin::$option_wpum_login_integration_active_name) == 1; 204 } 205 206 public function get_wpum_registration_active() { 207 return get_option(FriendlyCaptcha_Plugin::$option_wpum_registration_integration_active_name) == 1; 208 } 209 210 public function get_wpum_password_recovery_active() { 211 return get_option(FriendlyCaptcha_Plugin::$option_wpum_password_recovery_integration_active_name) == 1; 212 } 213 214 public function get_pb_login_active() { 215 return get_option(FriendlyCaptcha_Plugin::$option_pb_login_integration_active_name) == 1; 216 } 217 218 public function get_pb_register_active() { 219 return get_option(FriendlyCaptcha_Plugin::$option_pb_register_integration_active_name) == 1; 220 } 221 222 public function get_pb_reset_password_active() { 223 return get_option(FriendlyCaptcha_Plugin::$option_pb_reset_password_integration_active_name) == 1; 224 } 225 226 public function get_divi_active() { 227 return get_option(FriendlyCaptcha_Plugin::$option_divi_integration_active_name) == 1; 228 } 229 230 231 /* Widget options */ 232 233 public function get_widget_language() { 234 $lang = get_option(FriendlyCaptcha_Plugin::$option_widget_language_name); 235 $lang = empty($lang) ? "automatic" : $lang; // Default to automatic 236 if ( $lang == "automatic" ) { 237 $lang = substr(get_locale(), 0, 2); 238 if ( ! array_key_exists($lang, FRIENDLY_CAPTCHA_SUPPORTED_LANGUAGES) ) { 239 $lang = "en"; // Fallback to en 240 } 241 } 242 return $lang; 243 } 244 245 public function get_widget_dark_theme_active() { 246 return get_option(FriendlyCaptcha_Plugin::$option_widget_dark_theme_active_name) == 1; 247 } 248 249 /* Endpoint settings */ 250 251 public function get_eu_puzzle_endpoint_active() { 252 return get_option(FriendlyCaptcha_Plugin::$option_eu_puzzle_endpoint_active_name) == 1; 253 } 254 255 public function get_global_puzzle_endpoint_active() { 256 $eu_active = $this->get_eu_puzzle_endpoint_active(); 257 if (!$eu_active) return true; // At least one must be enabled. 258 259 return get_option(FriendlyCaptcha_Plugin::$option_global_puzzle_endpoint_active_name) == 1; 260 } 261 } 262 263 // This creates the singleton instance 264 if ( !isset(FriendlyCaptcha_Plugin::$instance)) { 265 $frcaptcha_plugin_instance = new FriendlyCaptcha_Plugin(); 266 $frcaptcha_plugin_instance->init(); 267 } 268 269 // These only contain pure functions 270 require plugin_dir_path( __FILE__ ) . 'helpers.php'; 271 require plugin_dir_path( __FILE__ ) . 'verification.php'; 272 273 // Register widget routines 274 require plugin_dir_path( __FILE__ ) . '../public/widgets.php'; 275 276 // Set up the admin pages & settings 277 require plugin_dir_path( __FILE__ ) . 'admin.php'; 278 require plugin_dir_path( __FILE__ ) . 'settings.php'; 279 280 if (FriendlyCaptcha_Plugin::$instance->get_contact_form_7_active()) { 281 require plugin_dir_path( __FILE__ ) . '../modules/contact-form-7/contact-form-7.php'; 282 } 283 284 if (FriendlyCaptcha_Plugin::$instance->get_wpforms_active()) { 285 require plugin_dir_path( __FILE__ ) . '../modules/wpforms/wpforms.php'; 286 } 287 288 if (FriendlyCaptcha_Plugin::$instance->get_gravity_forms_active()) { 289 require plugin_dir_path( __FILE__ ) . '../modules/gravityforms/gravityforms.php'; 290 } 291 292 if (FriendlyCaptcha_Plugin::$instance->get_coblocks_active()) { 293 require plugin_dir_path( __FILE__ ) . '../modules/coblocks/coblocks.php'; 294 } 295 296 if (FriendlyCaptcha_Plugin::$instance->get_fluentform_active()) { 297 require plugin_dir_path( __FILE__ ) . '../modules/fluentform/fluentform.php'; 298 } 299 300 if (FriendlyCaptcha_Plugin::$instance->get_elementor_active()) { 301 require plugin_dir_path( __FILE__ ) . '../modules/elementor/elementor.php'; 302 } 303 304 if (FriendlyCaptcha_Plugin::$instance->get_html_forms_active()) { 305 require plugin_dir_path( __FILE__ ) . '../modules/html-forms/html-forms.php'; 306 } 307 308 if (FriendlyCaptcha_Plugin::$instance->get_forminator_active()) { 309 require plugin_dir_path( __FILE__ ) . '../modules/forminator/forminator.php'; 310 } 311 312 if (FriendlyCaptcha_Plugin::$instance->get_formidable_active()) { 313 require plugin_dir_path( __FILE__ ) . '../modules/formidable/formidable.php'; 314 } 315 316 if (FriendlyCaptcha_Plugin::$instance->get_avada_forms_active()) { 317 require plugin_dir_path( __FILE__ ) . '../modules/avada-forms/avada-forms.php'; 318 } 319 320 if (FriendlyCaptcha_Plugin::$instance->get_wp_register_active()) { 321 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_register.php'; 322 } 323 324 if (FriendlyCaptcha_Plugin::$instance->get_wp_login_active()) { 325 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_login.php'; 326 } 327 328 if (FriendlyCaptcha_Plugin::$instance->get_wp_reset_password_active()) { 329 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_reset_password.php'; 330 } 331 332 if (FriendlyCaptcha_Plugin::$instance->get_wp_comments_active()) { 333 require plugin_dir_path( __FILE__ ) . '../modules/wordpress/wordpress_comments.php'; 334 } 335 336 if (FriendlyCaptcha_Plugin::$instance->get_wc_login_active()) { 337 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_login.php'; 338 } 339 340 if (FriendlyCaptcha_Plugin::$instance->get_wc_register_active()) { 341 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_register.php'; 342 } 343 344 if (FriendlyCaptcha_Plugin::$instance->get_wc_lost_password_active()) { 345 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_lost_password.php'; 346 } 347 348 if (FriendlyCaptcha_Plugin::$instance->get_wc_checkout_active()) { 349 require plugin_dir_path( __FILE__ ) . '../modules/woocommerce/woocommerce_checkout.php'; 350 } 351 352 if (FriendlyCaptcha_Plugin::$instance->get_um_login_active()) { 353 require plugin_dir_path( __FILE__ ) . '../modules/ultimate-member/ultimate-member_login.php'; 354 } 355 356 if (FriendlyCaptcha_Plugin::$instance->get_um_register_active()) { 357 require plugin_dir_path( __FILE__ ) . '../modules/ultimate-member/ultimate-member_register.php'; 358 } 359 360 if (FriendlyCaptcha_Plugin::$instance->get_um_reset_password_active()) { 361 require plugin_dir_path( __FILE__ ) . '../modules/ultimate-member/ultimate-member_reset_password.php'; 362 } 363 364 if (FriendlyCaptcha_Plugin::$instance->get_wpum_login_active()) { 365 require plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_login.php'; 366 require_once plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_validate.php'; 367 } 368 369 if (FriendlyCaptcha_Plugin::$instance->get_wpum_registration_active()) { 370 require plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_registration.php'; 371 require_once plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_validate.php'; 372 } 373 374 if (FriendlyCaptcha_Plugin::$instance->get_wpum_password_recovery_active()) { 375 require plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_password-recovery.php'; 376 require_once plugin_dir_path( __FILE__ ) . '../modules/wpum/wpum_validate.php'; 377 } 378 379 if (FriendlyCaptcha_Plugin::$instance->get_pb_login_active()) { 380 require plugin_dir_path( __FILE__ ) . '../modules/profile-builder/profile_builder_login.php'; 381 } 382 383 if (FriendlyCaptcha_Plugin::$instance->get_pb_register_active()) { 384 require plugin_dir_path( __FILE__ ) . '../modules/profile-builder/profile_builder_register.php'; 385 } 386 387 if (FriendlyCaptcha_Plugin::$instance->get_pb_reset_password_active()) { 388 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_reset_password.php'; 389 } 390 391 if (FriendlyCaptcha_Plugin::$instance->get_divi_active()) { 392 require plugin_dir_path( __FILE__ ) . '../modules/divi/divi.php'; 393 } 394 // } 300 return $lang; 301 } 302 303 public function get_widget_dark_theme_active() 304 { 305 return get_option(FriendlyCaptcha_Plugin::$option_widget_dark_theme_active_name) == 1; 306 } 307 308 /* Endpoint settings */ 309 310 public function get_eu_puzzle_endpoint_active() 311 { 312 return get_option(FriendlyCaptcha_Plugin::$option_eu_puzzle_endpoint_active_name) == 1; 313 } 314 315 public function get_global_puzzle_endpoint_active() 316 { 317 $eu_active = $this->get_eu_puzzle_endpoint_active(); 318 if (!$eu_active) return true; // At least one must be enabled. 319 320 return get_option(FriendlyCaptcha_Plugin::$option_global_puzzle_endpoint_active_name) == 1; 321 } 322 323 /* Verification failure alert */ 324 325 public function show_verification_failed_alert($response) 326 { 327 update_option(FriendlyCaptcha_Plugin::$option_verification_failed_alert_name, $response); 328 } 329 330 public function get_verification_failed_alert() 331 { 332 return get_option(FriendlyCaptcha_Plugin::$option_verification_failed_alert_name); 333 } 334 335 public function remove_verification_failed_alert() 336 { 337 delete_option(FriendlyCaptcha_Plugin::$option_verification_failed_alert_name); 338 } 339 } 340 341 // This creates the singleton instance 342 if (!isset(FriendlyCaptcha_Plugin::$instance)) { 343 $frcaptcha_plugin_instance = new FriendlyCaptcha_Plugin(); 344 $frcaptcha_plugin_instance->init(); 345 } 346 347 // These only contain pure functions 348 require plugin_dir_path(__FILE__) . 'helpers.php'; 349 require plugin_dir_path(__FILE__) . 'verification.php'; 350 351 // Register widget routines 352 require plugin_dir_path(__FILE__) . '../public/widgets.php'; 353 354 // Set up the admin pages & settings 355 require plugin_dir_path(__FILE__) . 'admin.php'; 356 require plugin_dir_path(__FILE__) . 'settings.php'; 357 358 if (FriendlyCaptcha_Plugin::$instance->get_contact_form_7_active()) { 359 require plugin_dir_path(__FILE__) . '../modules/contact-form-7/contact-form-7.php'; 360 } 361 362 if (FriendlyCaptcha_Plugin::$instance->get_wpforms_active()) { 363 require plugin_dir_path(__FILE__) . '../modules/wpforms/wpforms.php'; 364 } 365 366 if (FriendlyCaptcha_Plugin::$instance->get_gravity_forms_active()) { 367 require plugin_dir_path(__FILE__) . '../modules/gravityforms/gravityforms.php'; 368 } 369 370 if (FriendlyCaptcha_Plugin::$instance->get_coblocks_active()) { 371 require plugin_dir_path(__FILE__) . '../modules/coblocks/coblocks.php'; 372 } 373 374 if (FriendlyCaptcha_Plugin::$instance->get_fluentform_active()) { 375 require plugin_dir_path(__FILE__) . '../modules/fluentform/fluentform.php'; 376 } 377 378 if (FriendlyCaptcha_Plugin::$instance->get_elementor_active()) { 379 require plugin_dir_path(__FILE__) . '../modules/elementor/elementor.php'; 380 } 381 382 if (FriendlyCaptcha_Plugin::$instance->get_html_forms_active()) { 383 require plugin_dir_path(__FILE__) . '../modules/html-forms/html-forms.php'; 384 } 385 386 if (FriendlyCaptcha_Plugin::$instance->get_forminator_active()) { 387 require plugin_dir_path(__FILE__) . '../modules/forminator/forminator.php'; 388 } 389 390 if (FriendlyCaptcha_Plugin::$instance->get_formidable_active()) { 391 require plugin_dir_path(__FILE__) . '../modules/formidable/formidable.php'; 392 } 393 394 if (FriendlyCaptcha_Plugin::$instance->get_avada_forms_active()) { 395 require plugin_dir_path(__FILE__) . '../modules/avada-forms/avada-forms.php'; 396 } 397 398 if (FriendlyCaptcha_Plugin::$instance->get_wp_register_active()) { 399 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_register.php'; 400 } 401 402 if (FriendlyCaptcha_Plugin::$instance->get_wp_login_active()) { 403 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_login.php'; 404 } 405 406 if (FriendlyCaptcha_Plugin::$instance->get_wp_reset_password_active()) { 407 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_reset_password.php'; 408 } 409 410 if (FriendlyCaptcha_Plugin::$instance->get_wp_comments_active()) { 411 require plugin_dir_path(__FILE__) . '../modules/wordpress/wordpress_comments.php'; 412 } 413 414 if (FriendlyCaptcha_Plugin::$instance->get_wc_login_active()) { 415 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_login.php'; 416 } 417 418 if (FriendlyCaptcha_Plugin::$instance->get_wc_register_active()) { 419 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_register.php'; 420 } 421 422 if (FriendlyCaptcha_Plugin::$instance->get_wc_lost_password_active()) { 423 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_lost_password.php'; 424 } 425 426 if (FriendlyCaptcha_Plugin::$instance->get_wc_checkout_active()) { 427 require plugin_dir_path(__FILE__) . '../modules/woocommerce/woocommerce_checkout.php'; 428 } 429 430 if (FriendlyCaptcha_Plugin::$instance->get_um_login_active()) { 431 require plugin_dir_path(__FILE__) . '../modules/ultimate-member/ultimate-member_login.php'; 432 } 433 434 if (FriendlyCaptcha_Plugin::$instance->get_um_register_active()) { 435 require plugin_dir_path(__FILE__) . '../modules/ultimate-member/ultimate-member_register.php'; 436 } 437 438 if (FriendlyCaptcha_Plugin::$instance->get_um_reset_password_active()) { 439 require plugin_dir_path(__FILE__) . '../modules/ultimate-member/ultimate-member_reset_password.php'; 440 } 441 442 if (FriendlyCaptcha_Plugin::$instance->get_wpum_login_active()) { 443 require plugin_dir_path(__FILE__) . '../modules/wpum/wpum_login.php'; 444 require_once plugin_dir_path(__FILE__) . '../modules/wpum/wpum_validate.php'; 445 } 446 447 if (FriendlyCaptcha_Plugin::$instance->get_wpum_registration_active()) { 448 require plugin_dir_path(__FILE__) . '../modules/wpum/wpum_registration.php'; 449 require_once plugin_dir_path(__FILE__) . '../modules/wpum/wpum_validate.php'; 450 } 451 452 if (FriendlyCaptcha_Plugin::$instance->get_wpum_password_recovery_active()) { 453 require plugin_dir_path(__FILE__) . '../modules/wpum/wpum_password-recovery.php'; 454 require_once plugin_dir_path(__FILE__) . '../modules/wpum/wpum_validate.php'; 455 } 456 457 if (FriendlyCaptcha_Plugin::$instance->get_pb_login_active()) { 458 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_login.php'; 459 } 460 461 if (FriendlyCaptcha_Plugin::$instance->get_pb_register_active()) { 462 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_register.php'; 463 } 464 465 if (FriendlyCaptcha_Plugin::$instance->get_pb_reset_password_active()) { 466 require plugin_dir_path(__FILE__) . '../modules/profile-builder/profile_builder_reset_password.php'; 467 } 468 469 if (FriendlyCaptcha_Plugin::$instance->get_divi_active()) { 470 require plugin_dir_path(__FILE__) . '../modules/divi/divi.php'; 471 } -
friendly-captcha/trunk/includes/helpers.php
r2443791 r3095155 1 1 <?php 2 2 3 function frcaptcha_log_remote_request($url, $re quest, $response)3 function frcaptcha_log_remote_request($url, $response) 4 4 { 5 5 $log = sprintf( … … 15 15 } 16 16 17 function frcaptcha_v2_log_verify_response($url, $status, $errorCode) 18 { 19 $log = sprintf( 20 /* translators: 1: response status, 2: error code, 3: error detail, 4: URL */ 21 __('Friendly Captcha: %1$s %2$s from %3$s', 'frcaptcha'), 22 $status, 23 $errorCode, 24 $url 25 ); 26 27 trigger_error($log); 28 } 29 17 30 function frcaptcha_get_sanitized_frcaptcha_solution_from_post() 18 31 { 19 $postValue = $_POST['frc-captcha-solution']; 32 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 33 34 $postValue = $_POST[$fieldName]; 20 35 $solution = isset($postValue) ? trim(sanitize_text_field($postValue)) : ''; 21 36 return $solution; -
friendly-captcha/trunk/includes/settings.php
r3080369 r3095155 6 6 add_action('admin_init', 'frcaptcha_settings_init'); 7 7 8 function frcaptcha_settings_init() { 8 function frcaptcha_settings_init() 9 { 9 10 register_setting( 10 11 FriendlyCaptcha_Plugin::$option_group, … … 22 23 FriendlyCaptcha_Plugin::$option_group, 23 24 FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name 25 ); 26 register_setting( 27 FriendlyCaptcha_Plugin::$option_group, 28 FriendlyCaptcha_Plugin::$option_enable_v2_name 24 29 ); 25 30 … … 178 183 add_settings_field( 179 184 'frcaptcha_settings_sitekey_field', 180 'Sitekey', 'frcaptcha_settings_field_callback', 185 'Sitekey', 186 'frcaptcha_settings_field_callback', 181 187 'friendly_captcha_admin', 182 188 'frcaptcha_general_settings_section', … … 190 196 add_settings_field( 191 197 'frcaptcha_settings_api_key_field', 192 'API Key', 'frcaptcha_settings_field_callback', 198 'API Key', 199 'frcaptcha_settings_field_callback', 193 200 'friendly_captcha_admin', 194 201 'frcaptcha_general_settings_section', … … 212 219 add_settings_field( 213 220 'frcaptcha_settings_wpforms_integration_field', 214 'WPForms', 'frcaptcha_settings_field_callback', 221 'WPForms', 222 'frcaptcha_settings_field_callback', 215 223 'friendly_captcha_admin', 216 224 'frcaptcha_integrations_settings_section', … … 224 232 add_settings_field( 225 233 'frcaptcha_settings_wpcf7_integration_field', 226 'Contact Form 7', 'frcaptcha_settings_field_callback', 234 'Contact Form 7', 235 'frcaptcha_settings_field_callback', 227 236 'friendly_captcha_admin', 228 237 'frcaptcha_integrations_settings_section', … … 236 245 add_settings_field( 237 246 'frcaptcha_settings_f12_cf7_doubleoptin_integration_field', 238 'CF7 Double-Opt-In', 'frcaptcha_settings_field_callback', 247 'CF7 Double-Opt-In', 248 'frcaptcha_settings_field_callback', 239 249 'friendly_captcha_admin', 240 250 'frcaptcha_integrations_settings_section', … … 248 258 add_settings_field( 249 259 'frcaptcha_settings_gravity_forms_integration_field', 250 'Gravity Forms', 'frcaptcha_settings_field_callback', 260 'Gravity Forms', 261 'frcaptcha_settings_field_callback', 251 262 'friendly_captcha_admin', 252 263 'frcaptcha_integrations_settings_section', … … 260 271 add_settings_field( 261 272 'frcaptcha_settings_coblocks_integration_field', 262 'CoBlocks Forms', 'frcaptcha_settings_field_callback', 273 'CoBlocks Forms', 274 'frcaptcha_settings_field_callback', 263 275 'friendly_captcha_admin', 264 276 'frcaptcha_integrations_settings_section', … … 272 284 add_settings_field( 273 285 'frcaptcha_settings_fluentform_integration_field', 274 'Fluentform Forms', 'frcaptcha_settings_field_callback', 286 'Fluentform Forms', 287 'frcaptcha_settings_field_callback', 275 288 'friendly_captcha_admin', 276 289 'frcaptcha_integrations_settings_section', … … 284 297 add_settings_field( 285 298 'frcaptcha_settings_elementor_integration_field', 286 'Elementor Pro Forms', 'frcaptcha_settings_field_callback', 299 'Elementor Pro Forms', 300 'frcaptcha_settings_field_callback', 287 301 'friendly_captcha_admin', 288 302 'frcaptcha_integrations_settings_section', … … 296 310 add_settings_field( 297 311 'frcaptcha_settings_html_forms_integration_field', 298 'HTML Forms', 'frcaptcha_settings_field_callback', 312 'HTML Forms', 313 'frcaptcha_settings_field_callback', 299 314 'friendly_captcha_admin', 300 315 'frcaptcha_integrations_settings_section', … … 308 323 add_settings_field( 309 324 'frcaptcha_settings_forminator_integration_field', 310 'Forminator', 'frcaptcha_settings_field_callback', 325 'Forminator', 326 'frcaptcha_settings_field_callback', 311 327 'friendly_captcha_admin', 312 328 'frcaptcha_integrations_settings_section', … … 320 336 add_settings_field( 321 337 'frcaptcha_settings_formidable_integration_field', 322 'Formidable', 'frcaptcha_settings_field_callback', 338 'Formidable', 339 'frcaptcha_settings_field_callback', 323 340 'friendly_captcha_admin', 324 341 'frcaptcha_integrations_settings_section', … … 332 349 add_settings_field( 333 350 'frcaptcha_settings_avada_forms_integration_field', 334 'Avada Form Builder', 'frcaptcha_settings_field_callback', 351 'Avada Form Builder', 352 'frcaptcha_settings_field_callback', 335 353 'friendly_captcha_admin', 336 354 'frcaptcha_integrations_settings_section', … … 344 362 add_settings_field( 345 363 'frcaptcha_settings_wp_register_integration_field', 346 'WordPress Register', 'frcaptcha_settings_field_callback', 364 'WordPress Register', 365 'frcaptcha_settings_field_callback', 347 366 'friendly_captcha_admin', 348 367 'frcaptcha_integrations_settings_section', … … 356 375 add_settings_field( 357 376 'frcaptcha_settings_wp_login_integration_field', 358 'WordPress Login', 'frcaptcha_settings_field_callback', 377 'WordPress Login', 378 'frcaptcha_settings_field_callback', 359 379 'friendly_captcha_admin', 360 380 'frcaptcha_integrations_settings_section', … … 368 388 add_settings_field( 369 389 'frcaptcha_settings_wp_reset_password_integration_field', 370 'WordPress Reset Password', 'frcaptcha_settings_field_callback', 390 'WordPress Reset Password', 391 'frcaptcha_settings_field_callback', 371 392 'friendly_captcha_admin', 372 393 'frcaptcha_integrations_settings_section', … … 380 401 add_settings_field( 381 402 'frcaptcha_settings_wp_comments_integration_field', 382 'WordPress Comments<br>(guests)', 'frcaptcha_settings_field_callback', 403 'WordPress Comments<br>(guests)', 404 'frcaptcha_settings_field_callback', 383 405 'friendly_captcha_admin', 384 406 'frcaptcha_integrations_settings_section', … … 392 414 add_settings_field( 393 415 'frcaptcha_settings_wp_comments_logged_in_integration_field', 394 'WordPress Comments<br>(logged in users)', 'frcaptcha_settings_field_callback', 416 'WordPress Comments<br>(logged in users)', 417 'frcaptcha_settings_field_callback', 395 418 'friendly_captcha_admin', 396 419 'frcaptcha_integrations_settings_section', … … 404 427 add_settings_field( 405 428 'frcaptcha_settings_wc_register_integration_field', 406 'WooCommerce Register', 'frcaptcha_settings_field_callback', 429 'WooCommerce Register', 430 'frcaptcha_settings_field_callback', 407 431 'friendly_captcha_admin', 408 432 'frcaptcha_integrations_settings_section', … … 416 440 add_settings_field( 417 441 'frcaptcha_settings_wc_login_integration_field', 418 'WooCommerce Login', 'frcaptcha_settings_field_callback', 442 'WooCommerce Login', 443 'frcaptcha_settings_field_callback', 419 444 'friendly_captcha_admin', 420 445 'frcaptcha_integrations_settings_section', … … 428 453 add_settings_field( 429 454 'frcaptcha_settings_wc_lost_password_integration_field', 430 'WooCommerce Lost Password', 'frcaptcha_settings_field_callback', 455 'WooCommerce Lost Password', 456 'frcaptcha_settings_field_callback', 431 457 'friendly_captcha_admin', 432 458 'frcaptcha_integrations_settings_section', … … 440 466 add_settings_field( 441 467 'frcaptcha_settings_wc_checkout_integration_field', 442 'WooCommerce Checkout', 'frcaptcha_settings_field_callback', 468 'WooCommerce Checkout', 469 'frcaptcha_settings_field_callback', 443 470 'friendly_captcha_admin', 444 471 'frcaptcha_integrations_settings_section', … … 452 479 add_settings_field( 453 480 'frcaptcha_settings_um_login_integration_field', 454 'Ultimate Member Login', 'frcaptcha_settings_field_callback', 481 'Ultimate Member Login', 482 'frcaptcha_settings_field_callback', 455 483 'friendly_captcha_admin', 456 484 'frcaptcha_integrations_settings_section', … … 464 492 add_settings_field( 465 493 'frcaptcha_settings_um_register_integration_field', 466 'Ultimate Member Register', 'frcaptcha_settings_field_callback', 494 'Ultimate Member Register', 495 'frcaptcha_settings_field_callback', 467 496 'friendly_captcha_admin', 468 497 'frcaptcha_integrations_settings_section', … … 476 505 add_settings_field( 477 506 'frcaptcha_settings_um_reset_password_integration_field', 478 'Ultimate Member Reset Password', 'frcaptcha_settings_field_callback', 507 'Ultimate Member Reset Password', 508 'frcaptcha_settings_field_callback', 479 509 'friendly_captcha_admin', 480 510 'frcaptcha_integrations_settings_section', … … 488 518 add_settings_field( 489 519 'frcaptcha_settings_wpum_registration_integration_field', 490 'WPUM Registration', 'frcaptcha_settings_field_callback', 520 'WPUM Registration', 521 'frcaptcha_settings_field_callback', 491 522 'friendly_captcha_admin', 492 523 'frcaptcha_integrations_settings_section', … … 500 531 add_settings_field( 501 532 'frcaptcha_settings_wpum_login_integration_field', 502 'WPUM Login', 'frcaptcha_settings_field_callback', 533 'WPUM Login', 534 'frcaptcha_settings_field_callback', 503 535 'friendly_captcha_admin', 504 536 'frcaptcha_integrations_settings_section', … … 512 544 add_settings_field( 513 545 'frcaptcha_settings_wpum_password_recovery_integration_field', 514 'WPUM Password Recovery', 'frcaptcha_settings_field_callback', 546 'WPUM Password Recovery', 547 'frcaptcha_settings_field_callback', 515 548 'friendly_captcha_admin', 516 549 'frcaptcha_integrations_settings_section', … … 524 557 add_settings_field( 525 558 'frcaptcha_settings_pb_login_integration_field', 526 'Profile Builder Login', 'frcaptcha_settings_field_callback', 559 'Profile Builder Login', 560 'frcaptcha_settings_field_callback', 527 561 'friendly_captcha_admin', 528 562 'frcaptcha_integrations_settings_section', … … 536 570 add_settings_field( 537 571 'frcaptcha_settings_pb_register_integration_field', 538 'Profile Builder Register', 'frcaptcha_settings_field_callback', 572 'Profile Builder Register', 573 'frcaptcha_settings_field_callback', 539 574 'friendly_captcha_admin', 540 575 'frcaptcha_integrations_settings_section', … … 548 583 add_settings_field( 549 584 'frcaptcha_settings_pb_reset_password_integration_field', 550 'Profile Builder Reset Password', 'frcaptcha_settings_field_callback', 585 'Profile Builder Reset Password', 586 'frcaptcha_settings_field_callback', 551 587 'friendly_captcha_admin', 552 588 'frcaptcha_integrations_settings_section', … … 560 596 add_settings_field( 561 597 'frcaptcha_settings_divi_integration_field', 562 'Divi Theme Contact Form', 'frcaptcha_settings_field_callback', 598 'Divi Theme Contact Form', 599 'frcaptcha_settings_field_callback', 563 600 'friendly_captcha_admin', 564 601 'frcaptcha_integrations_settings_section', … … 580 617 ); 581 618 582 add_settings_field( 583 'frcaptcha_settings_widget_language_field', 584 'Widget Language', 585 'frcaptcha_widget_language_field_callback', 586 'friendly_captcha_admin', 587 'frcaptcha_widget_settings_section', 588 array( 589 "option_name" => FriendlyCaptcha_Plugin::$option_widget_language_name, 590 "description" => "Set the language for the widget. Need another language? <a href=\"https://docs.friendlycaptcha.com/#/widget_api?id=data-lang-attribute\">Help us translate</a>.", 591 ) 592 ); 619 if (!FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 620 add_settings_field( 621 'frcaptcha_settings_widget_language_field', 622 'Widget Language', 623 'frcaptcha_widget_language_field_callback', 624 'friendly_captcha_admin', 625 'frcaptcha_widget_settings_section', 626 array( 627 "option_name" => FriendlyCaptcha_Plugin::$option_widget_language_name, 628 "description" => "Set the language for the widget. Need another language? <a href=\"https://docs.friendlycaptcha.com/#/widget_api?id=data-lang-attribute\">Help us translate</a>.", 629 ) 630 ); 631 } 593 632 594 633 add_settings_field( 595 634 'frcaptcha_settings_widget_theme_field', 596 'Dark theme', 'frcaptcha_settings_field_callback', 635 'Dark theme', 636 'frcaptcha_settings_field_callback', 597 637 'friendly_captcha_admin', 598 638 'frcaptcha_widget_settings_section', … … 604 644 ); 605 645 606 add_settings_field( 607 'frcaptcha_settings_skip_style_injection_field', 608 'Disable Style Injection', 'frcaptcha_settings_field_callback', 609 'friendly_captcha_admin', 610 'frcaptcha_widget_settings_section', 611 array( 612 "option_name" => FriendlyCaptcha_Plugin::$option_skip_style_injection_name, 613 "description" => "Don't load the CSS-Styles for the widget. Use this if you want to style the widget yourself.", 614 "type" => "checkbox" 615 ) 616 ); 646 if (!FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 647 add_settings_field( 648 'frcaptcha_settings_skip_style_injection_field', 649 'Disable Style Injection', 650 'frcaptcha_settings_field_callback', 651 'friendly_captcha_admin', 652 'frcaptcha_widget_settings_section', 653 array( 654 "option_name" => FriendlyCaptcha_Plugin::$option_skip_style_injection_name, 655 "description" => "Don't load the CSS-Styles for the widget. Use this if you want to style the widget yourself.", 656 "type" => "checkbox" 657 ) 658 ); 659 } 617 660 618 661 add_settings_field( 619 662 'frcaptcha_settings_mutation_observer', 620 'Dynamically Initialize', 'frcaptcha_settings_field_callback', 663 'Dynamically Initialize', 664 'frcaptcha_settings_field_callback', 621 665 'friendly_captcha_admin', 622 666 'frcaptcha_widget_settings_section', … … 624 668 "option_name" => FriendlyCaptcha_Plugin::$option_enable_mutation_observer_name, 625 669 "description" => "Make Friendly Captcha look for new widgets that are dynamically added to the page.<br>Enable this when you are using Friendly Captcha in a popup or a multi-step form.", 670 "type" => "checkbox" 671 ) 672 ); 673 674 add_settings_field( 675 'frcaptcha_settings_enable_v2', 676 'Use Friendly Captcha v2', 677 'frcaptcha_settings_field_callback', 678 'friendly_captcha_admin', 679 'frcaptcha_widget_settings_section', 680 array( 681 "option_name" => FriendlyCaptcha_Plugin::$option_enable_v2_name, 682 "description" => " Friendly Captcha v2 is in preview and is <b>not yet intended for production use</b>. You need to enable v2 in the Friendly Captcha dashboard.", 683 "type" => "checkbox" 684 ) 685 ); 686 687 add_settings_field( 688 'frcaptcha_settings_enable_v2', 689 'Use Friendly Captcha v2', 690 'frcaptcha_settings_field_callback', 691 'friendly_captcha_admin', 692 'frcaptcha_widget_settings_section', 693 array( 694 "option_name" => FriendlyCaptcha_Plugin::$option_enable_v2_name, 695 "description" => " Friendly Captcha v2 is in its alpha stage and is <b>not yet intended for production use</b>.", 626 696 "type" => "checkbox" 627 697 ) … … 641 711 add_settings_field( 642 712 'frcaptcha_settings_global_endpoint_field', 643 '🌍 Global Endpoint', 'frcaptcha_settings_field_callback', 713 '🌍 Global Endpoint', 714 'frcaptcha_settings_field_callback', 644 715 'friendly_captcha_admin', 645 716 'frcaptcha_endpoint_settings_section', … … 653 724 add_settings_field( 654 725 'frcaptcha_settings_eu_endpoint_field', 655 '🇪🇺 Dedicated EU Endpoint', 'frcaptcha_settings_field_callback', 726 '🇪🇺 Dedicated EU Endpoint', 727 'frcaptcha_settings_field_callback', 656 728 'friendly_captcha_admin', 657 729 'frcaptcha_endpoint_settings_section', -
friendly-captcha/trunk/includes/verification.php
r2851826 r3095155 1 1 <?php 2 2 3 use FriendlyCaptcha\SDK\{Client, ClientConfig}; 3 4 4 function frcaptcha_verify_captcha_solution($solution, $sitekey, $api_key) { 5 $endpoint = 'https://api.friendlycaptcha.com/api/v1/siteverify'; 5 function frcaptcha_verify_captcha_solution($solution, $sitekey, $api_key) 6 { 7 if (FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 8 return frcaptcha_v2_verify_captcha_solution($solution, $sitekey, $api_key); 9 } else { 10 return frcaptcha_v1_verify_captcha_solution($solution, $sitekey, $api_key); 11 } 12 } 6 13 7 $response_body = array( 8 'secret' => $api_key, 9 'sitekey' => $sitekey, 10 'solution' => $solution, 14 function frcaptcha_v1_verify_captcha_solution($solution, $sitekey, $api_key) 15 { 16 $endpoint = 'https://api.friendlycaptcha.com/api/v1/siteverify'; 17 18 $request_body = array( 19 'secret' => $api_key, 20 'sitekey' => $sitekey, 21 'solution' => $solution, 22 ); 23 24 $request = array( 25 'body' => $request_body, 26 ); 27 28 $response = wp_remote_post(esc_url_raw($endpoint), $request); 29 $status = wp_remote_retrieve_response_code($response); 30 31 // Useful for debugging 32 // $body = json_encode($request_body); 33 // trigger_error($body); 34 35 $raw_response_body = wp_remote_retrieve_body($response); 36 $response_body = json_decode($raw_response_body, true); 37 38 if (200 != $status) { 39 if (WP_DEBUG) { 40 frcaptcha_log_remote_request($endpoint, $response); 41 } 42 43 FriendlyCaptcha_Plugin::$instance->show_verification_failed_alert($raw_response_body); 44 45 // Better safe than sorry, if the request is non-200 we can not verify the response 46 // Either the user's credentials are wrong (e.g. wrong sitekey, api key) or the friendly 47 // captcha servers are unresponsive. 48 49 return array( 50 "success" => true, 51 "status" => $status, 52 "errors" => array() 11 53 ); 54 } 12 55 13 $body = json_encode($response_body); 14 $request = array( 15 'body' => $response_body, 16 ); 56 $success = isset($response_body['success']) 57 ? $response_body['success'] 58 : false; 17 59 18 $response = wp_remote_post( esc_url_raw( $endpoint ), $request ); 19 $status = wp_remote_retrieve_response_code( $response ); 60 $errorCodes = isset($response_body['errors']) 61 ? $response_body['errors'] 62 : array(); 20 63 21 // Useful for debugging22 // trigger_error($body);23 64 24 $response_body = wp_remote_retrieve_body( $response ); 25 $response_body = json_decode( $response_body, true ); 65 return array( 66 "success" => $success, 67 "status" => $status, 68 "error_codes" => $errorCodes 69 ); 70 } 26 71 27 if ( 200 != $status ) { 28 if ( WP_DEBUG ) { 29 frcaptcha_log_remote_request( $endpoint, $request, $response ); 30 // error_log("The body was " . $body); 31 } 32 // Better safe than sorry, if the request is non-200 we can not verify the response 33 // Either the user's credentials are wrong (e.g. wrong sitekey, api key) or the friendly 34 // captcha servers are unresponsive. 35 36 // TODO notify site admin somehow 37 return array( 38 "success" => true, 39 "status" => $status, 40 "errors" => array(), 41 "response_body" => $response_body 72 function frcaptcha_v2_verify_captcha_solution($solution, $sitekey, $api_key) 73 { 74 $config = new ClientConfig(); 75 $config->setAPIKey($api_key)->setSitekey($sitekey); 76 if (FriendlyCaptcha_Plugin::$instance->get_eu_puzzle_endpoint_active()) { 77 $config->setSiteverifyEndpoint("eu"); 78 } 79 80 $captchaClient = new Client($config); 81 82 $result = $captchaClient->verifyCaptchaResponse($solution); 83 84 if (!$result->wasAbleToVerify()) { 85 if (WP_DEBUG) { 86 frcaptcha_v2_log_verify_response( 87 $config->siteverifyEndpoint, 88 $result->status, 89 $result->response->error->error_code 42 90 ); 43 91 } 44 92 45 $success = isset( $response_body['success'] ) 46 ? $response_body['success'] 47 : false; 93 $raw_response = json_encode($result->response); 94 FriendlyCaptcha_Plugin::$instance->show_verification_failed_alert($raw_response); 48 95 49 $errorCodes = isset( $response_body['errors'] )50 ? $response_body['errors'] 51 : array(); 96 // Better safe than sorry, when we can not verify the response 97 // Either the user's credentials are wrong (e.g. wrong sitekey, api key) or the friendly 98 // captcha servers are unresponsive. 52 99 100 return array( 101 "success" => true, 102 "status" => $result->status, 103 "errors" => array() 104 ); 105 } 53 106 54 return array( 55 "success" => $success,56 "status" => $status,57 "error_codes" => $errorCodes,58 "response_body" => $response_body59 107 $errorCodes = $result->getErrorCode() ? [$result->getErrorCode()] : []; 108 return array( 109 "success" => $result->shouldAccept(), 110 "status" => $result->status, 111 "error_codes" => $errorCodes 112 ); 60 113 } -
friendly-captcha/trunk/modules/avada-forms/avada-forms.php
r2937557 r3095155 1 1 <?php 2 2 3 add_action( 'fusion_element_button_content', 'add_friendly_captcha', 10, 2);4 add_filter( 'fusion_form_demo_mode', 'verify_friendly_captcha');3 add_action('fusion_element_button_content', 'add_friendly_captcha', 10, 2); 4 add_filter('fusion_form_demo_mode', 'verify_friendly_captcha'); 5 5 6 function add_friendly_captcha( $html, $args ) { 7 if ( false === strpos( $html, '<button type="submit"' ) ) { 6 function add_friendly_captcha($html, $args) 7 { 8 if (false === strpos($html, '<button type="submit"')) { 8 9 return $html; 9 10 } … … 21 22 } 22 23 23 function verify_friendly_captcha( $demo_mode ) { 24 function verify_friendly_captcha($demo_mode) 25 { 24 26 $plugin = FriendlyCaptcha_Plugin::$instance; 25 27 … … 30 32 // This is a modified version of frcaptcha_get_sanitized_frcaptcha_solution_from_post which looks for the solution in the formData key 31 33 $form_data = $_POST['formData']; 32 $form_data = wp_parse_args( str_replace( '&', '&', $form_data ));34 $form_data = wp_parse_args(str_replace('&', '&', $form_data)); 33 35 34 $post_value = $form_data['frc-captcha-solution']; 35 $solution = isset($post_value) ? trim(sanitize_text_field($post_value)) : ''; 36 $field_name = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 37 $post_value = $form_data[$field_name]; 38 $solution = isset($post_value) ? trim(sanitize_text_field($post_value)) : ''; 36 39 37 if ( empty( $solution )) {40 if (empty($solution)) { 38 41 $message = FriendlyCaptcha_Plugin::default_error_user_message() . __(" (captcha missing)", "frcaptcha"); 39 die( wp_json_encode( [ 'status' => 'error', 'info' => [ 'friendly_captcha' => $message ] ] ));42 die(wp_json_encode(['status' => 'error', 'info' => ['friendly_captcha' => $message]])); 40 43 } 41 44 42 45 $verification = frcaptcha_verify_captcha_solution($solution, $plugin->get_sitekey(), $plugin->get_api_key()); 43 46 44 if ( !$verification["success"]) {47 if (!$verification["success"]) { 45 48 $message = FriendlyCaptcha_Plugin::default_error_user_message(); 46 die( wp_json_encode( [ 'status' => 'error', 'info' => [ 'friendly_captcha' => $message ] ] ));49 die(wp_json_encode(['status' => 'error', 'info' => ['friendly_captcha' => $message]])); 47 50 } 48 51 -
friendly-captcha/trunk/modules/coblocks/coblocks.php
r2673817 r3095155 24 24 25 25 add_action('enqueue_block_editor_assets', array($instance, 'frcaptcha_coblocks_enqueue_block_editor_assets')); 26 27 26 } 28 27 … … 35 34 public function frcaptcha_coblocks_enqueue_block_editor_assets() 36 35 { 37 wp_enqueue_script('frcaptcha_coblocks_load_addon', plugin_dir_url(__FILE__) . '/script.js', 36 wp_enqueue_script( 37 'frcaptcha_coblocks_load_addon', 38 plugin_dir_url(__FILE__) . '/script.js', 38 39 array('wp-blocks', 'wp-editor', 'wp-element', 'wp-i18n'), 39 40 filemtime(plugin_dir_path(__FILE__) . 'script.js') … … 58 59 } 59 60 60 $errorPrefix = '<strong>' . __( 'Error', 'wp-captcha') . '</strong> : ';61 $errorPrefix = '<strong>' . __('Error', 'wp-captcha') . '</strong> : '; 61 62 $solution = frcaptcha_get_sanitized_frcaptcha_solution_from_post(); 62 63 63 if (empty( $solution)) {64 if (empty($solution)) { 64 65 wp_die($errorPrefix . FriendlyCaptcha_Plugin::default_error_user_message() . __(" (captcha missing)", "frcaptcha")); 65 66 } … … 70 71 } 71 72 72 unset($_POST['frc-captcha-solution']); // suppress the solution in email message 73 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 74 unset($_POST[$fieldName]); // suppress the solution in email message 73 75 } 74 76 } 75 76 77 78 79 80 81 -
friendly-captcha/trunk/modules/contact-form-7/script.js
r3045871 r3095155 1 1 (function () { 2 2 var resetFriendlyCaptchaWidget = function () { 3 window.friendlyChallenge.autoWidget.reset(); 3 if (window.friendlyChallenge) { 4 window.friendlyChallenge.autoWidget.reset(); 5 } 6 if (window.frcaptcha) { 7 window.frcaptcha.widgets.forEach(function(w) { w.reset() }); 8 } 4 9 }; 5 10 document.addEventListener("DOMContentLoaded", function (event) { -
friendly-captcha/trunk/modules/divi/divi.php
r3080369 r3095155 26 26 } 27 27 28 public static function enable($_names_by_slug) { 28 public static function enable($_names_by_slug) 29 { 29 30 $plugin = FriendlyCaptcha_Plugin::$instance; 30 31 … … 52 53 53 54 return $value; 54 55 55 } 56 56 … … 67 67 } 68 68 69 $output = str_replace(self::INSERT_BEFORE, 69 $output = str_replace( 70 self::INSERT_BEFORE, 70 71 frcaptcha_generate_widget_tag_from_plugin(FriendlyCaptcha_Plugin::$instance) . self::INSERT_BEFORE, 71 72 $output … … 82 83 public static function fakeToken() 83 84 { 84 if (isset($_POST['frc-captcha-solution'])) { 85 $_POST['token'] = $_POST['frc-captcha-solution']; 85 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 86 if (isset($_POST[$fieldName])) { 87 $_POST['token'] = $_POST[$fieldName]; 86 88 } 87 89 } -
friendly-captcha/trunk/modules/elementor/script.js
r3045871 r3095155 11 11 } 12 12 13 const widget = element.friendlyChallengeWidget;14 if (!widget) {15 return;16 }17 18 13 setTimeout(() => { 19 14 // We reset the widget after a short delay to give the form time to grab the solution and submit it 20 15 // This is a workaround for the fact that the form submit event is fired before the solution value is grabbed 21 16 // 1 second is really conservative as this is not affected by network speed or anything like that 22 widget.reset(); 17 if (element.friendlyChallengeWidget) { 18 element.friendlyChallengeWidget.reset(); 19 } else if (element.frcWidget) { 20 element.frcWidget.reset(); 21 } 23 22 }, 1000); 24 23 }); -
friendly-captcha/trunk/modules/fluentform/fluentform.php
r2709857 r3095155 1 1 <?php 2 2 3 add_action( 'fluentform_render_item_submit_button', 'frcaptcha_fluentform_show_widget', 10, 0);3 add_action('fluentform_render_item_submit_button', 'frcaptcha_fluentform_show_widget', 10, 0); 4 4 5 function frcaptcha_fluentform_show_widget() { 5 function frcaptcha_fluentform_show_widget() 6 { 6 7 $plugin = FriendlyCaptcha_Plugin::$instance; 7 8 if (!$plugin->is_configured() or !$plugin->get_fluentform_active()) { … … 17 18 } 18 19 19 add_filter( 'fluentform_before_insert_submission', 'frcaptcha_fluentform_validate', 20, 3 );20 add_filter('fluentform_before_insert_submission', 'frcaptcha_fluentform_validate', 20, 3); 20 21 21 function frcaptcha_fluentform_validate($insert_data, $data, $form) { 22 function frcaptcha_fluentform_validate($insert_data, $data, $form) 23 { 22 24 23 25 $plugin = FriendlyCaptcha_Plugin::$instance; … … 26 28 } 27 29 28 $solution = $data['frc-captcha-solution']; 30 $fieldName = FriendlyCaptcha_Plugin::$instance->get_solution_field_name(); 31 $solution = $data[$fieldName]; 29 32 30 if ( empty( $solution )) {33 if (empty($solution)) { 31 34 $error_message = FriendlyCaptcha_Plugin::default_error_user_message() . __(" (captcha missing)", "frcaptcha"); 32 35 wp_send_json( 33 36 [ 34 37 'errors' => [ 35 'g-recaptcha-response' => [ $error_message],38 'g-recaptcha-response' => [$error_message], 36 39 ], 37 40 ], … … 47 50 [ 48 51 'errors' => [ 49 'g-recaptcha-response' => [ $error_message],52 'g-recaptcha-response' => [$error_message], 50 53 ], 51 54 ], -
friendly-captcha/trunk/modules/wpforms/script.js
r3045871 r3095155 7 7 8 8 elements.each((_, e) => { 9 const widget = e.friendlyChallengeWidget;10 console.log(widget);11 if (!widget) {12 return;9 if (e.friendlyChallengeWidget) { 10 e.friendlyChallengeWidget.reset(); 11 } else if (e.frcWidget) { 12 e.frcWidget.reset(); 13 13 } 14 15 widget.reset();16 14 }); 17 15 } -
friendly-captcha/trunk/public/mutation-observer.js
r3080369 r3095155 8 8 } 9 9 10 function setupCaptchaElements(node) { 11 if (!window.friendlyChallenge) { 12 // The friendly-challenge library has not been loaded yet 13 return; 14 } 15 10 function setupV1CaptchaElements(node) { 16 11 let autoWidget = window.friendlyChallenge.autoWidget; 17 12 … … 29 24 } 30 25 26 function setupV2CaptchaElements(node) { 27 const elements = findCaptchaElements(node); 28 window.frcaptcha.attach(elements); 29 } 30 31 31 const observer = new MutationObserver((mutationList) => { 32 32 for (let m = 0; m < mutationList.length; m++) { … … 34 34 35 35 const nodes = mutation.addedNodes; 36 37 36 for (let n = 0; n < nodes.length; n++) { 38 setupCaptchaElements(nodes[n]); 37 if (window.friendlyChallenge) { 38 setupV1CaptchaElements(nodes[n]); 39 } else if (window.frcaptcha) { 40 setupV2CaptchaElements(nodes[n]); 41 } 39 42 } 40 43 } 41 44 }); 42 45 43 function init() 46 function init() { 44 47 // Start observing the document body for changes 45 48 observer.observe(document.body, { … … 47 50 childList: true, 48 51 subtree: true, 49 })}; 52 }); 53 } 50 54 51 55 init(); -
friendly-captcha/trunk/public/widgets.php
r3080369 r3095155 1 1 <?php 2 2 3 function frcaptcha_enqueue_widget_scripts($forceMutationObserver = false) { 3 function frcaptcha_enqueue_widget_scripts($forceMutationObserver = false) 4 { 4 5 $plugin = FriendlyCaptcha_Plugin::$instance; 5 6 6 if ( !$plugin->is_configured()) {7 if (!$plugin->is_configured()) { 7 8 return; 8 9 } 9 10 11 if (FriendlyCaptcha_Plugin::$instance->get_enable_v2()) { 12 return frcaptcha_v2_enqueue_widget_scripts(); 13 } else { 14 return frcaptcha_v1_enqueue_widget_scripts(); 15 } 16 17 frcaptcha_mutation_observer_scripts($plugin, $forceMutationObserver); 18 } 19 20 function frcaptcha_v1_enqueue_widget_scripts() 21 { 10 22 $version = FriendlyCaptcha_Plugin::$friendly_challenge_version; 11 23 12 24 /* Modern browsers will load this smaller bundle */ 13 wp_enqueue_script( 'friendly-captcha-widget-module', 14 plugin_dir_url( __FILE__ ) . 'vendor/widget.module.min.js', 25 wp_enqueue_script( 26 'friendly-captcha-widget-module', 27 plugin_dir_url(__FILE__) . 'vendor/v1/widget.module.min.js', 15 28 array(), 16 29 $version, … … 19 32 20 33 /* Fallback for (very) old browsers */ 21 wp_enqueue_script( 'friendly-captcha-widget-fallback', 22 plugin_dir_url( __FILE__ ) . 'vendor/widget.polyfilled.min.js', 23 array(), 24 $version, 25 true 26 ); 27 28 if ( $forceMutationObserver || $plugin->get_enable_mutation_observer() ) { 29 wp_enqueue_script( 'friendly-captcha-mutation-observer', 30 plugin_dir_url( __FILE__ ) . 'mutation-observer.js', 34 wp_enqueue_script( 35 'friendly-captcha-widget-fallback', 36 plugin_dir_url(__FILE__) . 'vendor/v1/widget.min.js', 37 array(), 38 $version, 39 true 40 ); 41 } 42 43 function frcaptcha_v2_enqueue_widget_scripts() 44 { 45 $version = FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version; 46 47 /* Modern browsers will load this smaller bundle */ 48 wp_enqueue_script( 49 'friendly-captcha-widget-module', 50 plugin_dir_url(__FILE__) . 'vendor/v2/site.min.js', 51 array(), 52 $version, 53 true 54 ); 55 56 /* Fallback for (very) old browsers */ 57 wp_enqueue_script( 58 'friendly-captcha-widget-fallback', 59 plugin_dir_url(__FILE__) . 'vendor/v2/site.compat.min.js', 60 array(), 61 $version, 62 true 63 ); 64 } 65 66 function frcaptcha_mutation_observer_scripts($plugin, $forceMutationObserver) 67 { 68 $version = FriendlyCaptcha_Plugin::$version; 69 70 if ($forceMutationObserver || $plugin->get_enable_mutation_observer()) { 71 wp_enqueue_script( 72 'friendly-captcha-mutation-observer', 73 plugin_dir_url(__FILE__) . 'mutation-observer.js', 31 74 array(), 32 75 $version, … … 39 82 * Useful if for some reason wp_enqueue_script doesn't work (as seems to be the case with WPForms?!) 40 83 */ 41 function frcaptcha_echo_script_tags() { 84 function frcaptcha_echo_script_tags() 85 { 42 86 $plugin = FriendlyCaptcha_Plugin::$instance; 43 87 44 if ( !$plugin->is_configured()) {88 if (!$plugin->is_configured()) { 45 89 return; 46 90 } 47 91 92 if ($plugin->get_enable_v2()) { 93 return frcaptcha_v2_echo_script_tags(); 94 } else { 95 return frcaptcha_v1_echo_script_tags(); 96 } 97 } 98 99 function frcaptcha_v1_echo_script_tags() 100 { 48 101 $version = FriendlyCaptcha_Plugin::$friendly_challenge_version; 49 102 50 echo '<script async defer type="module" src="'. plugin_dir_url( __FILE__ ) . 'vendor/widget.module.min.js?ver=' . $version . '"></script>'; 51 echo '<script async defer nomodule src="'. plugin_dir_url( __FILE__ ) . 'vendor/widget.polyfilled.min.js?ver=' . $version . '"></script>'; 52 } 53 54 add_filter( 'script_loader_tag', 'frcaptcha_transform_friendly_captcha_script_tags', 10, 3 ); 55 56 function frcaptcha_transform_friendly_captcha_script_tags( $tag, $handle, $src ) 57 { 58 if ( 'friendly-captcha-widget-module' == $handle) { 59 return str_replace( '<script', '<script async defer type="module"', $tag ); 60 } 61 if ( 'friendly-captcha-widget-fallback' == $handle) { 62 return str_replace( '<script', '<script async defer nomodule', $tag ); 63 } 64 if ( 'friendly-captcha-mutation-observer' == $handle) { 65 return str_replace( '<script', '<script async defer', $tag ); 66 } 67 68 return $tag; 69 } 70 71 function frcaptcha_generate_widget_tag_from_plugin($plugin) { 72 if (!$plugin->is_configured()) { 73 return ""; 74 } 75 76 $sitekey = $plugin->get_sitekey(); 77 $lang = $plugin->get_widget_language(); 103 echo '<script async defer type="module" src="' . plugin_dir_url(__FILE__) . 'vendor/v1/widget.module.min.js?ver=' . $version . '"></script>'; 104 echo '<script async defer nomodule src="' . plugin_dir_url(__FILE__) . 'vendor/v1/widget.min.js?ver=' . $version . '"></script>'; 105 } 106 107 108 function frcaptcha_v2_echo_script_tags() 109 { 110 $version = FriendlyCaptcha_Plugin::$friendly_captcha_sdk_version; 111 112 echo '<script async defer type="module" src="' . plugin_dir_url(__FILE__) . 'vendor/v2/site.min.js?ver=' . $version . '"></script>'; 113 echo '<script async defer nomodule src="' . plugin_dir_url(__FILE__) . 'vendor/v2/site.compat.min.js?ver=' . $version . '"></script>'; 114 } 115 116 add_filter('script_loader_tag', 'frcaptcha_transform_friendly_captcha_script_tags', 10, 3); 117 118 function frcaptcha_transform_friendly_captcha_script_tags($tag, $handle, $src) 119 { 120 if ('friendly-captcha-widget-module' == $handle) { 121 return str_replace('<script', '<script async defer type="module"', $tag); 122 } 123 if ('friendly-captcha-widget-fallback' == $handle) { 124 return str_replace('<script', '<script async defer nomodule', $tag); 125 } 126 if ('friendly-captcha-mutation-observer' == $handle) { 127 return str_replace('<script', '<script async defer', $tag); 128 } 129 130 return $tag; 131 } 132 133 function frcaptcha_generate_widget_tag_from_plugin($plugin) 134 { 135 if (!$plugin->is_configured()) { 136 return ""; 137 } 138 139 if ($plugin->get_enable_v2()) { 140 return frcaptcha_v2_generate_widget_tag_from_plugin($plugin); 141 } else { 142 return frcaptcha_v1_generate_widget_tag_from_plugin($plugin); 143 } 144 } 145 146 function frcaptcha_v1_generate_widget_tag_from_plugin($plugin) 147 { 148 $sitekey = $plugin->get_sitekey(); 149 $lang = $plugin->get_widget_language(); 78 150 79 151 $extra_attributes = ""; … … 92 164 '%s%s', 93 165 frcaptcha_generate_skip_style_injection_tag($plugin), 94 frcaptcha_generate_widget_tag($sitekey, $lang, $extra_attributes, $theme) 95 ); 96 } 97 98 function frcaptcha_generate_widget_tag($sitekey, $language, $extra_attributes = "", $theme = "") { 99 return sprintf( 166 frcaptcha_v1_generate_widget_tag($sitekey, $lang, $extra_attributes, $theme) 167 ); 168 } 169 170 function frcaptcha_v2_generate_widget_tag_from_plugin($plugin) 171 { 172 $sitekey = $plugin->get_sitekey(); 173 174 $extra_attributes = ""; 175 $eu = $plugin->get_eu_puzzle_endpoint_active(); 176 177 if ($eu) { 178 $extra_attributes = "data-api-endpoint=\"eu\""; 179 } 180 181 $theme = $plugin->get_widget_dark_theme_active() ? "dark" : "light"; 182 183 return sprintf( 184 '%s%s', 185 frcaptcha_generate_skip_style_injection_tag($plugin), 186 frcaptcha_v2_generate_widget_tag($sitekey, $extra_attributes, $theme) 187 ); 188 } 189 190 function frcaptcha_v1_generate_widget_tag($sitekey, $language, $extra_attributes = "", $theme = "") 191 { 192 return sprintf( 100 193 '<div class="frc-captcha %s" data-sitekey="%s" data-lang="%s" %s></div> 101 194 <noscript>You need to enable Javascript for the anti-spam check.</noscript>', 102 esc_html($theme), 103 esc_html($sitekey), 104 esc_html($language), 105 $extra_attributes); 195 esc_html($theme), 196 esc_html($sitekey), 197 esc_html($language), 198 $extra_attributes 199 ); 200 } 201 202 function frcaptcha_v2_generate_widget_tag($sitekey, $extra_attributes = "", $theme = "light") 203 { 204 return sprintf( 205 '<div class="frc-captcha" data-sitekey="%s" data-theme="%s" %s></div> 206 <noscript>You need to enable Javascript for the anti-spam check.</noscript>', 207 esc_html($sitekey), 208 esc_html($theme), 209 $extra_attributes 210 ); 106 211 } 107 212 108 213 $frcaptcha_skip_style_injection_tag_injected = false; 109 214 110 function frcaptcha_generate_skip_style_injection_tag($plugin) { 215 function frcaptcha_generate_skip_style_injection_tag($plugin) 216 { 217 global $frcaptcha_skip_style_injection_tag_injected; 218 111 219 if (!$plugin->get_skip_style_injection()) { 112 220 return ''; … … 121 229 return '<div id="frc-style"></div>'; 122 230 } 123 124 function frcaptcha_generate_extra_widget_attributes($plugin) {125 } -
friendly-captcha/trunk/readme.txt
r3080369 r3095155 3 3 Tags: captcha, antispam, spam, contact form, recaptcha, friendly-captcha, block spam, anti-spam, comments, elementor 4 4 Requires at least: 5.0 5 Tested up to: 6. 45 Tested up to: 6.5 6 6 Requires PHP: 7.3 7 Stable tag: 1.1 3.07 Stable tag: 1.14.0 8 8 License: GPL v2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 97 97 == Changelog == 98 98 99 = 1.14.0 = 100 101 * Add support for Friendly Captcha v2 (preview) 102 * Show an admin notice when verification has failed 103 99 104 = 1.13.0 = 100 105
Note: See TracChangeset
for help on using the changeset viewer.