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; }
|