Jake Vanderwerf
2026-01-04 22e1bb3fcc3b3db1c0f5c2e6a4aecaf408c307a5
inc/integrations/Cloudflare.php
@@ -11,7 +11,6 @@
{
   private string $site_key;
   private string $secret_key;
   private bool $auto_protect_forms = true;
   private string $theme = 'light';
   private string $size = 'normal';
@@ -56,13 +55,9 @@
   {
      $this->site_key = $this->credentials['site_key'] ?? '';
      $this->secret_key = $this->credentials['secret_key'] ?? '';
      $this->auto_protect_forms = $this->credentials['auto_protect_forms'] ?? true;
      $this->theme = $this->credentials['theme'] ?? 'light';
      $this->size = $this->credentials['size'] ?? 'normal';
      if ($this->isSetUp()) {
         $this->initializeTurnstileProtection();
      }
   }
   /**
@@ -101,40 +96,8 @@
      $result = json_decode(wp_remote_retrieve_body($response), true);
      error_log('Cloudflare Result: '.print_r($result, true));
      // If we get a response with success field (even if false), connection works
      return array_key_exists('success', $result) && $result['success'];
   }
   /**
    * Initialize Turnstile protection on various forms
    */
   private function initializeTurnstileProtection(): void
   {
      // Skip on local development if configured
      if (defined('JVB_LOCAL') && strpos(get_home_url(), JVB_LOCAL) !== false) {
         return;
      }
      if (!$this->auto_protect_forms) {
         return;
      }
      // WordPress login/registration forms
      add_action('login_enqueue_scripts', [$this, 'enqueueTurnstileScripts']);
      add_action('login_form', [$this, 'renderTurnstile']);
      add_action('register_form', [$this, 'renderTurnstile']);
      add_action('lostpassword_form', [$this, 'renderTurnstile']);
      // Verification hooks
      add_filter('authenticate', [$this, 'verifyLoginTurnstile'], 99, 3);
      add_filter('registration_errors', [$this, 'verifyRegisterTurnstile'], 10, 3);
      add_action('lostpassword_post', [$this, 'verifyLostpasswordTurnstile']);
      // Custom form support
      add_action('jvb_form_before_submit', [$this, 'renderTurnstile']);
      add_filter('jvb_form_validate', [$this, 'validateFormTurnstile'], 10, 2);
      return array_key_exists('success', $result);
   }
   protected function validateCredentials(array $credentials): bool
@@ -220,6 +183,7 @@
    */
   public function verifyTurnstile(?string $token = null, string $remote_ip = ''): bool
   {
      $this->ensureInitialized();
      if (!$this->isSetUp()) {
         return false;
      }
@@ -267,78 +231,6 @@
   }
   /**
    * Verify login form Turnstile
    */
   public function verifyLoginTurnstile($user, string $username, string $password)
   {
      // Skip verification if already logged in or no credentials
      if (is_user_logged_in() || empty($username) || empty($password)) {
         return $user;
      }
      // Skip on AJAX requests for compatibility
      if (wp_doing_ajax()) {
         return $user;
      }
      // If already have an error, return it
      if (is_wp_error($user)) {
         return $user;
      }
      // Verify Turnstile
      if (!$this->verifyTurnstile()) {
         return new \WP_Error(
            'turnstile_verification_failed',
            '<strong>ERROR</strong>: Please complete the security check.'
         );
      }
      return $user;
   }
   /**
    * Verify registration form Turnstile
    */
   public function verifyRegisterTurnstile($errors, string $sanitized_user_login, string $user_email)
   {
      if (!$this->verifyTurnstile()) {
         $errors->add(
            'turnstile_verification_failed',
            '<strong>ERROR</strong>: Please complete the security check.'
         );
      }
      return $errors;
   }
   /**
    * Verify lost password form Turnstile
    */
   public function verifyLostpasswordTurnstile($errors): void
   {
      if (!$this->verifyTurnstile()) {
         if (!is_wp_error($errors)) {
            $errors = new \WP_Error();
         }
         $errors->add(
            'turnstile_verification_failed',
            '<strong>ERROR</strong>: Please complete the security check.'
         );
      }
   }
   /**
    * Validate Turnstile for custom JVB forms
    */
   public function validateFormTurnstile(array $errors, array $form_data): array
   {
      if (!$this->verifyTurnstile()) {
         $errors[] = 'Please complete the security verification.';
      }
      return $errors;
   }
   /**
    * Get site key for frontend use
    */
   public function getSiteKey(): string