@page "/Dev/WellKnownRes" @using ArcaneLibs.Extensions @using LibMatrix.Services.WellKnownResolver @using LibMatrix.Services.WellKnownResolver.WellKnownResolvers @inject HomeserverResolverService legacyResolver @inject WellKnownResolverService rewriteResolver @inject ClientWellKnownResolver rewriteClientResolver

Known Homeserver List


Room ID: Execute Stats:
Server count: @entries.Count
Client server resolution rate (N/O/T): @entries.Count(x => x.HasClientWellKnown)/@entries.Count(x => !string.IsNullOrWhiteSpace(x.LegacyResolutionResult?.Client))/@entries.Count
Server server resolution rate (N/T): @entries.Count(x => x.HasServerWellKnown)/@entries.Count
Support resolution rate (N/T): @entries.Count(x => x.HasSupportWellKnown)/@entries.Count
@foreach (var entry in entries) { }
Homeserver Client API Server API Has support record
@entry.Homeserver L: @entry.LegacyResolutionResult?.Client
R: @entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver.BaseUrl
L: @entry.LegacyResolutionResult?.Server
R: @entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver
@(entry.HasSupportWellKnown ? "Y" : "X")
@(entry.WellKnownResolutionResult?.ToJson() ?? "null")
@code { private List entries = new(); [SupplyParameterFromQuery] public string? RoomId { get; set; } AuthenticatedHomeserverGeneric? hs { get; set; } protected override async Task OnInitializedAsync() { hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; if (RoomId is not null) { await Execute(); } } private class TableEntry { public required string Homeserver { get; set; } public HomeserverResolverService.WellKnownUris? LegacyResolutionResult { get; set; } public WellKnownResolverService.WellKnownRecords? WellKnownResolutionResult { get; set; } public bool HasClientWellKnown => WellKnownResolutionResult?.ClientWellKnown is { Content.Homeserver.BaseUrl: { Length: > 0 } }; public bool HasServerWellKnown => WellKnownResolutionResult?.ServerWellKnown is { Content.Homeserver.Length: > 0 }; public bool HasSupportWellKnown => WellKnownResolutionResult?.SupportWellKnown?.Content is not null and not { SupportPage: null, Contacts: null or { Count: 0 } }; } private async Task Execute() { var members = await hs!.GetRoom(RoomId!).GetMembersListAsync(); var homeservers = members.Select(x => x.StateKey!.Split(':', 2)[1]).Distinct().ToList(); var entries = new List(); foreach (var homeserver in homeservers) { var e = new TableEntry() { Homeserver = homeserver }; _ = TryResolveLegacy(e); _ = TryFullResolveRewrite(e); entries.Add(e); } this.entries = entries; StateHasChanged(); } private async Task TryResolveLegacy(TableEntry entry) { try { var cTask = legacyResolver.ResolveHomeserverFromWellKnown(entry.Homeserver, enableServer: false); var sTask = legacyResolver.ResolveHomeserverFromWellKnown(entry.Homeserver, enableClient: false); entry.LegacyResolutionResult = (await cTask); entry.LegacyResolutionResult.Server = (await sTask).Server; StateHasChanged(); } catch { } } private async Task TryFullResolveRewrite(TableEntry entry) { try { entry.WellKnownResolutionResult = await rewriteResolver.TryResolveWellKnownRecords(entry.Homeserver); StateHasChanged(); } catch { } } private string GetClientColor(TableEntry entry) { if (entry.LegacyResolutionResult?.Client == entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver?.BaseUrl && entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver?.BaseUrl == null) return "#333333"; if (entry.LegacyResolutionResult?.Client == entry.WellKnownResolutionResult?.ClientWellKnown?.Content?.Homeserver?.BaseUrl?.TrimEnd('/')) return "#008800"; return "#ff0000"; } private string GetServerColor(TableEntry entry) { if (entry.LegacyResolutionResult?.Server == entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver && entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver == null) return "#333333"; if (entry.LegacyResolutionResult?.Server == entry.WellKnownResolutionResult?.ServerWellKnown?.Content?.Homeserver.TrimEnd('/')) return "#008800"; return "#ff0000"; } }