From 3aada9949d51024a92a8b5c6cb70d12f9c3cac16 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 21 Dec 2025 19:59:48 +0000
Subject: [PATCH] =auth refactored via rest, referral system set up for Jane, some javascript consolidation

---
 inc/managers/LoginManager.php |   40 ++++++++++++++++++++++++++++++----------
 1 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/inc/managers/LoginManager.php b/inc/managers/LoginManager.php
index 525a53f..f336e23 100644
--- a/inc/managers/LoginManager.php
+++ b/inc/managers/LoginManager.php
@@ -17,10 +17,7 @@
 class LoginManager
 {
 	protected Features $siteFeatures;
-	protected ?MagicLinkManager $magicLink = null;
 	protected ?MetaForm $metaForm = null;
-	protected EmailManager $emailManager;
-	protected AjaxRateLimiter $rateLimiter;
 	protected CacheManager $cache;
 
 
@@ -44,7 +41,6 @@
 	public function __construct()
 	{
 		$this->siteFeatures = Features::forSite();
-		$this->emailManager = new EmailManager();
 
 
 		$this->cache = CacheManager::for('login');
@@ -67,8 +63,10 @@
 		// Login success handling
 		add_action('wp_login', [$this, 'handleSuccessfulLogin'], 10, 2);
 
+		add_filter( 'login_url', [$this, 'loginUrl'], 10, 3 );
 		// Allow other features to register handlers
 		do_action('jvbLoginManagerInit', $this);
+		add_action('user_register', array($this, 'saveRegistrationFields'), 999, 2);
 	}
 
 	/**************************************************************************
@@ -90,7 +88,7 @@
 			return;
 		}
 		// Build custom login URL with all query args
-		$custom_login_page = home_url('/login');
+		$custom_login_page = home_url('/login/');
 		$query_args = $_GET;
 
 		// Remove WordPress internal args
@@ -287,6 +285,18 @@
 			}
 		}
 	}
+	public function loginUrl(string $login_url, string $redirect, bool $force_reauth):string
+	{
+		// This will append /custom-login/ to you main site URL as configured in general settings (ie https://domain.com/custom-login/)
+		$login_url = site_url( '/login/', 'login' );
+		if ( ! empty( $redirect ) ) {
+			$login_url = add_query_arg( 'redirect_to', urlencode( $redirect ), $login_url );
+		}
+		if ( $force_reauth ) {
+			$login_url = add_query_arg( 'reauth', '1', $login_url );
+		}
+		return $login_url;
+	}
 	public function getLoginPage():int|false
 	{
 		return (int)get_option(BASE.'login_page');
@@ -308,7 +318,6 @@
 		if (!Features::forSite()->has('magicLink')) {
 			return;
 		}
-		$this->magicLink = new MagicLinkManager();
 	}
 
 	/*********************************************************************
@@ -597,7 +606,8 @@
             $checked = (is_user_logged_in() && current_user_can('prefers_dark_theme', true)) ? ' checked' : '';
             $title = ($checked == '') ? 'Toggle Dark Mode' : 'Toggle Light Mode';
             echo '<label title="'.$title.'" id="theme-switch" class="toggle-switch" for="theme-switcher">
-                    <input class="theme-switch row" id="theme-switcher" type="checkbox"'.$checked.' data-setting="theme" data-theme role="switch" name="dark-mode"><span class="slider">'.
+    				<span class="screen-reader-text">Toggle dark mode</span>
+                    <input class="theme-switch row" id="theme-switcher" name="theme-switcher" type="checkbox"'.$checked.' data-setting="theme" data-theme name="dark-mode" aria-label="Toggle dark mode"><span class="slider">'.
 					jvbIcon('sun-dim', ['title'=> 'Light Mode']).
 					jvbIcon('moon', ['title'=>'Dark Mode']).
 					'</span></label>';
@@ -812,7 +822,7 @@
 
 	protected function maybeMagicLink(): void
 	{
-		if (!$this->magicLink || !in_array($this->action, ['login', 'lostpassword'])) {
+		if (!JVB()->magicLink() || !in_array($this->action, ['login', 'lostpassword'])) {
 			return;
 		}
 		?>
@@ -883,7 +893,7 @@
 					method: 'POST',
 					headers: {
                 		'Content-Type': 'application/json',
-						'X-WP-Nonce': jvbSettings.nonce
+						'X-WP-Nonce': window.auth.getNonce()
 					},
 					body: JSON.stringify(realFormData)
 				});
@@ -905,11 +915,16 @@
 						window.LoginController.handleFormSuccess(form, result);
 					}
 
+					if (window.auth && typeof window.auth.handleLogin === 'function' && Object.hasOwn(result, 'auth')) {
+						console.log('Awaiting Auth...');
+						await window.auth.handleLogin(result.auth); // Pass the full result
+					}
+
 					// Handle redirect
 					if (result.redirect) {
 						setTimeout(() => {
 							window.location.href = result.redirect;
-						}, 500); // Brief delay to show success message
+						}, 200); // Brief delay to show success message
 					}
 
 				} catch (error) {
@@ -962,6 +977,11 @@
 		wp_safe_redirect($login_url);
 		exit;
 	}
+
+	public function saveRegistrationFields(int $user_id, array $userdata):void
+	{
+
+	}
 }
 
 // Initialize the login manager

--
Gitblit v1.10.0