Jake Vanderwerf
2026-02-17 a24a06002081ad71a78ffeff9072725ba39cf121
inc/managers/LoginManager.php
@@ -61,6 +61,7 @@
      // Login success handling
      add_action('wp_login', [$this, 'handleSuccessfulLogin'], 10, 2);
      add_filter('lostpassword_url', [$this, 'resetPasswordUrl'], 10, 2);
      add_filter( 'login_url', [$this, 'loginUrl'], 10, 3 );
      add_filter( 'logout_url', [$this, 'logoutUrl'], 10, 2 );
      // Allow other features to register handlers
@@ -306,18 +307,26 @@
   }
   public function logoutUrl(string $logout_url, string $redirect): string
{
   // Build custom logout URL
   $logout_url = site_url('/login/', 'login');
   $logout_url = add_query_arg('action', 'logout', $logout_url);
   {
      // Build custom logout URL
      $logout_url = site_url('/login/', 'login');
      $logout_url = add_query_arg('action', 'logout', $logout_url);
   if (!empty($redirect)) {
      $logout_url = add_query_arg('redirect_to', urlencode($redirect), $logout_url);
      if (!empty($redirect)) {
         $logout_url = add_query_arg('redirect_to', urlencode($redirect), $logout_url);
      }
      // Add nonce for security
      return wp_nonce_url($logout_url, 'log-out');
   }
   public function resetPasswordUrl(string $url, string $redirect):string
   {
      error_log('reset Password Url:'.print_r($url, true));
      error_log('reset password redirect: '.print_r($redirect, true));
   // Add nonce for security
   return wp_nonce_url($logout_url, 'log-out');
}
      return str_replace('wp_login.php', 'login/', $url);
   }
   public function getLoginPage():int|false
   {
      return (int)get_option(BASE.'login_page');
@@ -404,12 +413,6 @@
         wp_redirect(esc_attr($_GET['redirect_to'] ?? get_home_url()));
         exit;
      }
      if (in_array($this->action, ['rp', 'resetpass']) && !is_user_logged_in()) {
         wp_redirect(wp_login_url());
         exit;
      } elseif (is_user_logged_in()) {
         wp_redirect(get_home_url(null, '/dash/'));
      }
      $this->setupLabels();
      $this->setupFields();
      $this->setupTitle();
@@ -436,11 +439,9 @@
   protected function customStyles():void
   {
      $logo = get_theme_mod('custom_logo');
      $small = $large = '';
      if ($logo) {
         $small = wp_get_attachment_image_src($logo, 'medium')[0];
         $large = wp_get_attachment_image_src($logo, 'large')[0];
         $small = wp_get_attachment_image_src($logo, 'medium')[0]??'';
         $large = wp_get_attachment_image_src($logo, 'large')[0]??'';
      }
      echo '<style>
         .login header,
@@ -804,6 +805,7 @@
               'successDescription' => JVB_LOGIN['forgot_password']['success']['description'] ?? ['Check your email for reset instructions'],
            ];
         case 'resetpass':
         case 'rp':
            return [
               'title' => JVB_LOGIN['reset_pass']['title'] ?? 'Reset Your Password',
               'description' => JVB_LOGIN['reset_pass']['description'] ?? [],
@@ -871,6 +873,7 @@
    $has_turnstile = Features::hasIntegration('cloudflare');
    ob_start();
    ?>
   document.addEventListener('DOMContentLoaded', async function () {
@@ -898,6 +901,14 @@
                  const formData = new FormData(formElement);
                  const formObject = Object.fromEntries(formData.entries());
                  let params = new URLSearchParams(window.location.search);
                  if (params.has('key')) {
                     formObject['key'] = params.get('key');
                  }
                  if (params.has('login')) {
                     formObject['login'] = params.get('login');
                  }
                  // Add redirect_to from URL
                  if (redirectTo) {
                     formObject.redirect_to = redirectTo;