about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Requests/SynapseAdminRoomDeleteRequest.cs6
-rw-r--r--LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Responses/SynapseAdminRoomStateResult.cs8
-rw-r--r--LibMatrix/Homeservers/ImplementationDetails/Synapse/SynapseAdminApiClient.cs21
-rw-r--r--LibMatrix/Homeservers/RemoteHomeServer.cs2
4 files changed, 33 insertions, 4 deletions
diff --git a/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Requests/SynapseAdminRoomDeleteRequest.cs b/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Requests/SynapseAdminRoomDeleteRequest.cs

index aee2a7e..c2b2fac 100644 --- a/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Requests/SynapseAdminRoomDeleteRequest.cs +++ b/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Requests/SynapseAdminRoomDeleteRequest.cs
@@ -31,7 +31,13 @@ public class SynapseAdminRoomDeleteStatusList { [JsonPropertyName("results")] public List<SynapseAdminRoomDeleteStatus> Results { get; set; } } + public class SynapseAdminRoomDeleteStatus { + public const string Scheduled = "scheduled"; + public const string Active = "active"; + public const string Complete = "complete"; + public const string Failed = "failed"; + [JsonPropertyName("status")] public string Status { get; set; } = null!; diff --git a/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Responses/SynapseAdminRoomStateResult.cs b/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Responses/SynapseAdminRoomStateResult.cs new file mode 100644
index 0000000..ae36d4e --- /dev/null +++ b/LibMatrix/Homeservers/ImplementationDetails/Synapse/Models/Responses/SynapseAdminRoomStateResult.cs
@@ -0,0 +1,8 @@ +using System.Text.Json.Serialization; + +namespace LibMatrix.Homeservers.ImplementationDetails.Synapse.Models.Responses; + +public class SynapseAdminRoomStateResult { + [JsonPropertyName("state")] + public required List<StateEventResponse> Events { get; set; } +} \ No newline at end of file diff --git a/LibMatrix/Homeservers/ImplementationDetails/Synapse/SynapseAdminApiClient.cs b/LibMatrix/Homeservers/ImplementationDetails/Synapse/SynapseAdminApiClient.cs
index a48402a..daa4468 100644 --- a/LibMatrix/Homeservers/ImplementationDetails/Synapse/SynapseAdminApiClient.cs +++ b/LibMatrix/Homeservers/ImplementationDetails/Synapse/SynapseAdminApiClient.cs
@@ -144,7 +144,7 @@ public class SynapseAdminApiClient(AuthenticatedHomeserverSynapse authenticatedH #endif continue; } - + if (room.JoinedMembers < localFilter.JoinedMembersGreaterThan || room.JoinedMembers > localFilter.JoinedMembersLessThan) { totalRooms--; #if LOG_SKIP @@ -212,6 +212,15 @@ public class SynapseAdminApiClient(AuthenticatedHomeserverSynapse authenticatedH return loginResp; } + public async Task<AuthenticatedHomeserverSynapse> GetHomeserverForUserAsync(string userId, TimeSpan expireAfter) { + var loginResp = await LoginUserAsync(userId, expireAfter); + var homeserver = new AuthenticatedHomeserverSynapse( + authenticatedHomeserver.ServerName, authenticatedHomeserver.WellKnownUris, authenticatedHomeserver.Proxy, loginResp.AccessToken + ); + await homeserver.Initialise(); + return homeserver; + } + #endregion #region Reports @@ -517,6 +526,10 @@ public class SynapseAdminApiClient(AuthenticatedHomeserverSynapse authenticatedH return await authenticatedHomeserver.ClientHttpClient.GetFromJsonAsync<SynapseAdminRoomMemberListResult>($"/_synapse/admin/v1/rooms/{roomId}/members"); } + public async Task<SynapseAdminRoomStateResult> GetRoomStateAsync(string roomId, string? type = null) { + return await authenticatedHomeserver.ClientHttpClient.GetFromJsonAsync<SynapseAdminRoomStateResult>($"/_synapse/admin/v1/rooms/{roomId}/state"); + } + public async Task QuarantineMediaByRoomId(string roomId) { await authenticatedHomeserver.ClientHttpClient.PutAsJsonAsync($"/_synapse/admin/v1/room/{roomId}/media/quarantine", new { }); } @@ -524,11 +537,11 @@ public class SynapseAdminApiClient(AuthenticatedHomeserverSynapse authenticatedH public async Task QuarantineMediaByUserId(string mxid) { await authenticatedHomeserver.ClientHttpClient.PutAsJsonAsync($"/_synapse/admin/v1/user/{mxid}/media/quarantine", new { }); } - + public async Task QuarantineMediaById(string serverName, string mediaId) { await authenticatedHomeserver.ClientHttpClient.PutAsJsonAsync($"/_synapse/admin/v1/media/quarantine/{serverName}/{mediaId}", new { }); } - + public async Task QuarantineMediaById(MxcUri mxcUri) { await authenticatedHomeserver.ClientHttpClient.PutAsJsonAsync($"/_synapse/admin/v1/media/quarantine/{mxcUri.ServerName}/{mxcUri.MediaId}", new { }); } @@ -536,7 +549,7 @@ public class SynapseAdminApiClient(AuthenticatedHomeserverSynapse authenticatedH public async Task DeleteMediaById(string serverName, string mediaId) { await authenticatedHomeserver.ClientHttpClient.DeleteAsync($"/_synapse/admin/v1/media/{serverName}/{mediaId}"); } - + public async Task DeleteMediaById(MxcUri mxcUri) { await authenticatedHomeserver.ClientHttpClient.DeleteAsync($"/_synapse/admin/v1/media/{mxcUri.ServerName}/{mxcUri.MediaId}"); } diff --git a/LibMatrix/Homeservers/RemoteHomeServer.cs b/LibMatrix/Homeservers/RemoteHomeServer.cs
index 45ecb18..f0b35f9 100644 --- a/LibMatrix/Homeservers/RemoteHomeServer.cs +++ b/LibMatrix/Homeservers/RemoteHomeServer.cs
@@ -16,6 +16,7 @@ public class RemoteHomeserver { proxy = null; ServerNameOrUrl = serverName; WellKnownUris = wellKnownUris; + Proxy = proxy; ClientHttpClient = new MatrixHttpClient { BaseAddress = new Uri(proxy?.TrimEnd('/') ?? wellKnownUris.Client?.TrimEnd('/') ?? throw new InvalidOperationException($"No client URI for {serverName}!")), // Timeout = TimeSpan.FromSeconds(300) // TODO: Re-implement this @@ -29,6 +30,7 @@ public class RemoteHomeserver { private Dictionary<string, object> _profileCache { get; set; } = new(); public string ServerNameOrUrl { get; } + public string? Proxy { get; } [JsonIgnore] public MatrixHttpClient ClientHttpClient { get; set; }