@using System.Security.Claims @inject NavigationManager Navigation
@code { private static readonly string[] HomePaths = ["", "index.html"]; private static readonly string[] ApplicationPaths = ["application", "application.html"]; private static readonly string[] RulesPaths = ["reglement", "reglement.html"]; private string LoginHref => BuildAuthHref("login", EffectiveReturnUrl); private string RegisterHref => BuildAuthHref("register", EffectiveReturnUrl); private string LogoutHref => BuildAuthHref("logout", "/"); private string CurrentPath { get { var absolutePath = new Uri(Navigation.Uri).AbsolutePath; return absolutePath.Trim('/'); } } private string EffectiveReturnUrl { get { var absolutePath = new Uri(Navigation.Uri).AbsolutePath; if (absolutePath.StartsWith("/authentication/", StringComparison.OrdinalIgnoreCase)) { return "/"; } return string.IsNullOrWhiteSpace(absolutePath) ? "/" : absolutePath; } } private string BuildNavLinkClass(string[] paths) => IsCurrentPage(paths) ? "site-menu-link is-active" : "site-menu-link"; private string? BuildAriaCurrent(string[] paths) => IsCurrentPage(paths) ? "page" : null; private bool IsCurrentPage(string[] paths) => paths.Any(path => string.Equals(CurrentPath, path, StringComparison.OrdinalIgnoreCase)); private static string BuildAuthHref(string action, string returnUrl) => $"authentication/{action}?returnUrl={Uri.EscapeDataString(returnUrl)}"; private static string BuildDisplayName(ClaimsPrincipal user) => user.Identity?.Name ?? user.FindFirst("name")?.Value ?? user.FindFirst("preferred_username")?.Value ?? "Utilisateur connecte"; private static string BuildMeta(ClaimsPrincipal user) => user.FindFirst("email")?.Value ?? "Session active"; }