$challengeInfo], sessionData: $sessionData, ); } /** * Create a redirect result (for OIDC/SAML) */ public static function redirect(string $url, array $sessionData): self { return new self( status: self::REDIRECT, clientData: ['redirect_url' => $url], sessionData: $sessionData, ); } // ========================================================================= // Status Checks // ========================================================================= public function isSuccess(): bool { return $this->status === self::SUCCESS; } public function isFailed(): bool { return $this->status === self::FAILED; } public function isChallenge(): bool { return $this->status === self::CHALLENGE; } public function isRedirect(): bool { return $this->status === self::REDIRECT; } // ========================================================================= // Data Access // ========================================================================= /** * Get identity claim */ public function getIdentity(string $key, mixed $default = null): mixed { return $this->identity[$key] ?? $default; } /** * Get client data value */ public function getClientData(string $key, mixed $default = null): mixed { return $this->clientData[$key] ?? $default; } /** * Get session data value */ public function getSessionData(string $key, mixed $default = null): mixed { return $this->sessionData[$key] ?? $default; } }