From 863faaa050c4ba02190c0d53e41d931df890e593 Mon Sep 17 00:00:00 2001 From: Rory& Date: Fri, 21 Feb 2025 18:13:02 +0100 Subject: HomeserverEmulator changes --- MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor | 5 + .../Pages/HSAdmin/HSE/ManageExternalProfiles.razor | 43 +++++ MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor | 201 --------------------- MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor.css | 0 .../Pages/HSAdmin/Synapse/RoomQuery.razor | 201 +++++++++++++++++++++ .../Pages/HSAdmin/Synapse/RoomQuery.razor.css | 0 6 files changed, 249 insertions(+), 201 deletions(-) create mode 100644 MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor delete mode 100644 MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor delete mode 100644 MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor.css create mode 100644 MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor create mode 100644 MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor.css (limited to 'MatrixUtils.Web/Pages/HSAdmin') diff --git a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor index 409d582..09cc2cd 100644 --- a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor +++ b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor @@ -12,6 +12,11 @@ else {
Query rooms } + else if (Homeserver is AuthenticatedHomeserverHSE) { +

Rory&::LibMatrix.HomeserverEmulator tools

+
+ Manage external profiles + } else {

Homeserver type @Homeserver.GetType().Name does not have any administration tools in RMU.

Server info:

diff --git a/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor b/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor new file mode 100644 index 0000000..6d492a7 --- /dev/null +++ b/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor @@ -0,0 +1,43 @@ +@page "/HSAdmin/HSE/ManageExternalProfiles" +@using ArcaneLibs.Extensions +@using LibMatrix.Responses +

Manage external profiles

+ +Add local sessions + +@foreach(var p in ExternalProfiles) +{ +

@p.Key

+
@p.Value.ToJson(indent: true)
+} + +@code { + public AuthenticatedHomeserverGeneric? Homeserver { get; set; } + private Dictionary ExternalProfiles = new(); + + protected override async Task OnInitializedAsync() + { + Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + if (Homeserver is null) return; + await LoadProfiles(); + await base.OnInitializedAsync(); + } + + private async Task LoadProfiles() { + if(Homeserver is AuthenticatedHomeserverHSE hse) + { + ExternalProfiles = await hse.GetExternalProfilesAsync(); + } + StateHasChanged(); + } + + private async Task AddAllLocalProfiles() { + if(Homeserver is AuthenticatedHomeserverHSE hse) { + var sessions = await RmuStorage.GetAllTokens(); + foreach(var session in sessions) { + await hse.SetExternalProfile(session.UserId, session); + } + await LoadProfiles(); + } + } +} \ No newline at end of file diff --git a/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor b/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor deleted file mode 100644 index 1e63e16..0000000 --- a/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor +++ /dev/null @@ -1,201 +0,0 @@ -@page "/HSAdmin/RoomQuery" -@using LibMatrix.Responses.Admin -@using LibMatrix.Filters -@using ArcaneLibs.Extensions - -

Homeserver Administration - Room Query

- - -
- -
- -
-
- - Local filtering (slow) - - -
- String contains - Room ID: - Room name: - Canonical alias: - Creator: - Room version: - Encryption algorithm: - Join rules: - Guest access: - History visibility: - - Optional checks - - Is federated: - @if (Filter.CheckFederation) { - - } - - - Is public: - @if (Filter.CheckPublic) { - - } - - - Ranges - - state events - - - members - - - local members - -
-
- -
- -@if (Results.Count > 0) { -

Found @Results.Count rooms

-
- TSV data (copy/paste) -
-            
-                @foreach (var res in Results) {
-                    
-                        
-                        
-                        
-                        
-                    
-                }
-            
@res.RoomId@("\t")@res.CanonicalAlias@("\t")@res.Creator@("\t")@res.Name
-
-
-} - -@foreach (var res in Results) { -
- @* *@ -

- @if (!string.IsNullOrWhiteSpace(res.CanonicalAlias)) { - @res.CanonicalAlias - @res.RoomId (@res.Name) -
- } - else { - @res.RoomId (@res.Name) -
- } - @if (!string.IsNullOrWhiteSpace(res.Creator)) { - @* Created by *@ - Created by @res.Creator -
- } -

- @res.StateEvents state events
- @res.JoinedMembers members, of which @res.JoinedLocalMembers are on this server -
- Full result data -
@res.ToJson(ignoreNull: true)
-
-
-} - - - -@code { - - [Parameter] - [SupplyParameterFromQuery(Name = "order_by")] - public string? OrderBy { get; set; } - - [Parameter] - [SupplyParameterFromQuery(Name = "name_search")] - public string SearchTerm { get; set; } - - [Parameter] - [SupplyParameterFromQuery(Name = "ascending")] - public bool Ascending { get; set; } - - public List Results { get; set; } = new(); - - private string Status { get; set; } - - public LocalRoomQueryFilter Filter { get; set; } = new(); - - protected override Task OnParametersSetAsync() { - if (Ascending == null) - Ascending = true; - OrderBy ??= "name"; - return Task.CompletedTask; - } - - private async Task Search() { - Results.Clear(); - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); - if (hs is AuthenticatedHomeserverSynapse synapse) { - var searchRooms = synapse.Admin.SearchRoomsAsync(orderBy: OrderBy!, dir: Ascending ? "f" : "b", searchTerm: SearchTerm, localFilter: Filter).GetAsyncEnumerator(); - while (await searchRooms.MoveNextAsync()) { - var room = searchRooms.Current; - Console.WriteLine("Hit: " + room.ToJson(false)); - Results.Add(room); - if (Results.Count % 10 == 0) - StateHasChanged(); - } - } - - StateHasChanged(); - } - - private readonly Dictionary validOrderBy = new() { - { "name", "Room name" }, - { "canonical_alias", "Main alias address" }, - { "joined_members", "Number of members (reversed)" }, - { "joined_local_members", "Number of local members (reversed)" }, - { "version", "Room version" }, - { "creator", "Creator of the room" }, - { "encryption", "End-to-end encryption algorithm" }, - { "federatable", "Is room federated" }, - { "public", "Visibility in room list" }, - { "join_rules", "Join rules" }, - { "guest_access", "Guest access" }, - { "history_visibility", "Visibility of history" }, - { "state_events", "Number of state events" } - }; - -} diff --git a/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor.css b/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor.css deleted file mode 100644 index e69de29..0000000 diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor new file mode 100644 index 0000000..07af1dc --- /dev/null +++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor @@ -0,0 +1,201 @@ +@page "/HSAdmin/Synapse/RoomQuery" +@using LibMatrix.Responses.Admin +@using LibMatrix.Filters +@using ArcaneLibs.Extensions + +

Homeserver Administration - Room Query

+ + +
+ +
+ +
+
+ + Local filtering (slow) + + +
+ String contains + Room ID: + Room name: + Canonical alias: + Creator: + Room version: + Encryption algorithm: + Join rules: + Guest access: + History visibility: + + Optional checks + + Is federated: + @if (Filter.CheckFederation) { + + } + + + Is public: + @if (Filter.CheckPublic) { + + } + + + Ranges + + state events + + + members + + + local members + +
+
+ +
+ +@if (Results.Count > 0) { +

Found @Results.Count rooms

+
+ TSV data (copy/paste) +
+            
+                @foreach (var res in Results) {
+                    
+                        
+                        
+                        
+                        
+                    
+                }
+            
@res.RoomId@("\t")@res.CanonicalAlias@("\t")@res.Creator@("\t")@res.Name
+
+
+} + +@foreach (var res in Results) { +
+ @* *@ +

+ @if (!string.IsNullOrWhiteSpace(res.CanonicalAlias)) { + @res.CanonicalAlias - @res.RoomId (@res.Name) +
+ } + else { + @res.RoomId (@res.Name) +
+ } + @if (!string.IsNullOrWhiteSpace(res.Creator)) { + @* Created by *@ + Created by @res.Creator +
+ } +

+ @res.StateEvents state events
+ @res.JoinedMembers members, of which @res.JoinedLocalMembers are on this server +
+ Full result data +
@res.ToJson(ignoreNull: true)
+
+
+} + + + +@code { + + [Parameter] + [SupplyParameterFromQuery(Name = "order_by")] + public string? OrderBy { get; set; } + + [Parameter] + [SupplyParameterFromQuery(Name = "name_search")] + public string SearchTerm { get; set; } + + [Parameter] + [SupplyParameterFromQuery(Name = "ascending")] + public bool Ascending { get; set; } + + public List Results { get; set; } = new(); + + private string Status { get; set; } + + public LocalRoomQueryFilter Filter { get; set; } = new(); + + protected override Task OnParametersSetAsync() { + if (Ascending == null) + Ascending = true; + OrderBy ??= "name"; + return Task.CompletedTask; + } + + private async Task Search() { + Results.Clear(); + var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + if (hs is AuthenticatedHomeserverSynapse synapse) { + var searchRooms = synapse.Admin.SearchRoomsAsync(orderBy: OrderBy!, dir: Ascending ? "f" : "b", searchTerm: SearchTerm, localFilter: Filter).GetAsyncEnumerator(); + while (await searchRooms.MoveNextAsync()) { + var room = searchRooms.Current; + Console.WriteLine("Hit: " + room.ToJson(false)); + Results.Add(room); + if (Results.Count % 10 == 0) + StateHasChanged(); + } + } + + StateHasChanged(); + } + + private readonly Dictionary validOrderBy = new() { + { "name", "Room name" }, + { "canonical_alias", "Main alias address" }, + { "joined_members", "Number of members (reversed)" }, + { "joined_local_members", "Number of local members (reversed)" }, + { "version", "Room version" }, + { "creator", "Creator of the room" }, + { "encryption", "End-to-end encryption algorithm" }, + { "federatable", "Is room federated" }, + { "public", "Visibility in room list" }, + { "join_rules", "Join rules" }, + { "guest_access", "Guest access" }, + { "history_visibility", "Visibility of history" }, + { "state_events", "Number of state events" } + }; + +} diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor.css b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor.css new file mode 100644 index 0000000..e69de29 -- cgit 1.5.1