From 90549fd2bce62723c35cc7d40551f1c5f2d2ba9d Mon Sep 17 00:00:00 2001
From: Rory& User is a local user!
+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
@@ -44,8 +66,12 @@
private class TableEntry {
public required string Homeserver { get; set; }
- public string? LegacyClientUrl { get; set; }
- public string? RewriteClientUrl { 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() {
@@ -55,7 +81,7 @@
foreach (var homeserver in homeservers) {
var e = new TableEntry() { Homeserver = homeserver };
_ = TryResolveLegacy(e);
- _ = TryResolveRewrite(e);
+ _ = TryFullResolveRewrite(e);
entries.Add(e);
}
@@ -65,23 +91,32 @@
private async Task TryResolveLegacy(TableEntry entry) {
try {
- entry.LegacyClientUrl = (await legacyResolver.ResolveHomeserverFromWellKnown(entry.Homeserver, enableServer: false)).Client;
+ 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 TryResolveRewrite(TableEntry entry) {
+ private async Task TryFullResolveRewrite(TableEntry entry) {
try {
- entry.RewriteClientUrl = (await rewriteClientResolver.TryResolveClientWellKnown(entry.Homeserver)).WellKnown.Homeserver.BaseUrl;
+ entry.WellKnownResolutionResult = await rewriteResolver.TryResolveWellKnownRecords(entry.Homeserver);
StateHasChanged();
}
catch { }
}
-
- private string GetColor(TableEntry entry) {
- if (entry.LegacyClientUrl == entry.RewriteClientUrl && entry.RewriteClientUrl == null) return "#333333";
- if (entry.LegacyClientUrl == entry.RewriteClientUrl?.TrimEnd('/')) return "#008800";
+
+ 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";
}
diff --git a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
index 09cc2cd..6ccdce4 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
@@ -10,7 +10,8 @@ else {
@if (Homeserver is AuthenticatedHomeserverSynapse) {
Homeserver
- Legacy client URL
- Rewrite client URL
+ Client API
+ Server API
+ Has support record
@foreach (var entry in entries) {
-
+
+ @entry.Homeserver
- @(entry.LegacyClientUrl ?? "null")
- @(entry.RewriteClientUrl ?? "null")
+
+ 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")
+ Synapse tools
- Query rooms
+ Query rooms
+ Block media
}
else if (Homeserver is AuthenticatedHomeserverHSE) {
Rory&::LibMatrix.HomeserverEmulator tools
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor
new file mode 100644
index 0000000..02bf88f
--- /dev/null
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor
@@ -0,0 +1,29 @@
+@page "/HSAdmin/Synapse/BackgroundJobs"
+@using ArcaneLibs.Extensions
+@using LibMatrix.Homeservers.ImplementationDetails.Synapse.Models.Responses
+
+Homeserver Administration - Background jobs
+@BackgroundJobStatus?.ToJson(ignoreNull: true)
+
+@code {
+ private AuthenticatedHomeserverSynapse? Homeserver { get; set; }
+ private SynapseAdminBackgroundUpdateStatusResponse? BackgroundJobStatus { get; set; }
+
+ protected override async Task OnInitializedAsync() {
+ var hs = await RmuStorage.GetCurrentSessionOrNavigate() as AuthenticatedHomeserverSynapse;
+ if (hs is null) return;
+ Homeserver = hs;
+
+ while (true) {
+ try {
+ BackgroundJobStatus = await hs.Admin.GetBackgroundUpdatesStatusAsync();
+ StateHasChanged();
+ await Task.Delay(1000);
+ }
+ catch (Exception ex) {
+ Console.WriteLine(ex);
+ }
+ }
+ }
+
+}
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor
new file mode 100644
index 0000000..6de4e4d
--- /dev/null
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor
@@ -0,0 +1,191 @@
+@page "/HSAdmin/Synapse/BlockMedia"
+@using System.Text.Json
+@using ArcaneLibs.Extensions
+@using LibMatrix
+@using LibMatrix.EventTypes.Spec
+
+Homeserver Administration - Block media
+@if (Homeserver is not null) {
+
+
+
+ @(string.IsNullOrEmpty(EventJson) ? "" : "{ ... }")
+
+
+
+
+
+ @MxcUri?.ToJson(ignoreNull: true)
+
+ @if (Event is not null) {
+ SynapseRoomShutdownWindow
+
+@code {
+
+}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/Components/SynapseRoomShutdownWindowContent.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/Components/SynapseRoomShutdownWindowContent.razor
new file mode 100644
index 0000000..d5daf75
--- /dev/null
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/Components/SynapseRoomShutdownWindowContent.razor
@@ -0,0 +1,113 @@
+@using LibMatrix.Homeservers.Extensions.NamedCaches
+@using LibMatrix.Homeservers.ImplementationDetails.Synapse.Models.Requests
+
+@if (string.IsNullOrWhiteSpace(Context.DeleteId)) {
+ Media options
+
+
+ Quarantine local media:
+
+ Quarantine remote media:
+
+ Delete remote media:
+
+
+ User options
+
+
+ Suspend local users:
+
+ Quarantine ALL local user media:
+
+ Delete ALL local user media:
+
+
+ Room deletion options
+
+
+ Block room:
+
+ Purge room:
+
+ Force purge room (unsafe):
+
+ Warning room User ID (optional):
+
+ @if (!string.IsNullOrWhiteSpace(Context.DeleteRequest.NewRoomUserId)) {
+ Warning room name:
+
+ Warning room message (plaintext):
+
+ }
+
+ Homeserver Administration - Room Query
@@ -48,13 +51,17 @@
Ranges
-
}
+
@res.ToJson(ignoreNull: true)
@status.ToJson()*@ +@*