Jake Vanderwerf
2026-01-25 b38f03c0e7218762d90fa5092696b127f24f36db
inc/rest/routes/LoginRoutes.php
@@ -31,23 +31,7 @@
      register_rest_route($this->namespace, '/auth/login', [
         'methods' => 'POST',
         'callback' => [$this, 'handleLogin'],
         'permission_callback' => [$this, 'checkRateLimit'],
         'args' => [
            'user_email' => [
               'required' => true,
               'type' => 'string',
               'sanitize_callback' => 'sanitize_email'
            ],
            'user_password' => [
               'required' => true,
               'type' => 'string'
            ],
            'remember_me' => [
               'required' => false,
               'type' => 'boolean',
               'default' => false
            ]
         ]
         'permission_callback' => [$this, 'checkRateLimit']
      ]);
      // Logout endpoint
@@ -125,7 +109,7 @@
   public function handleLogin(WP_REST_Request $request): WP_REST_Response
   {
      $data = $request->get_json_params();
      $data = $request->get_params();
      // Verify Turnstile
      if (!$this->verifyTurnstile($data['cf-turnstile-response'] ?? '')) {
         return $this->error('Security verification failed', 'turnstile_failed', 403);
@@ -154,7 +138,7 @@
         'user_login'   => $username,
         'user_password' => $password,
         'remember' => $remember
      ], false);
      ], is_ssl());
      if (is_wp_error($user)) {
@@ -172,7 +156,7 @@
      // Set auth cookie with remember me flag
      wp_set_current_user($user->ID);
      wp_set_auth_cookie($user->ID, $remember);
      wp_set_auth_cookie($user->ID, $remember, is_ssl());
@@ -370,6 +354,9 @@
      wp_set_current_user($user->ID);
      wp_set_auth_cookie($user->ID, true);
      if (session_status() === PHP_SESSION_ACTIVE) {
         session_regenerate_id(true);
      }
      // Store session fingerprint
      $this->storeSessionFingerprint($user->ID, $request);
@@ -581,7 +568,7 @@
      ];
   }
   protected function getRedirect(WP_User $user, string $url, string $context = 'login'):string
   protected function getRedirect(WP_User $user, ?string $url=null, string $context = 'login'):string
   {
      if (!empty($url)) {
         $url = sanitize_url($url);
@@ -662,7 +649,7 @@
         }
         // Lockout expired - clear attempts
         $this->cache->delete($cache_key);
         $this->cache->forget($cache_key);
         return true;
      }
@@ -702,7 +689,7 @@
   protected function clearFailedAttempts(string $username): void
   {
      $cache_key = 'login_attempts_' . md5($username);
      $this->cache->delete($cache_key);
      $this->cache->forget($cache_key);
   }