@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) { Redact all messages } @if (Event?.Sender?.Split(':', 2)[1] == Homeserver?.ServerName) {

User is a local user!

Deactivate User Quarantine all media } } @code { private AuthenticatedHomeserverSynapse? Homeserver { get; set; } protected override async Task OnInitializedAsync() { var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true) as AuthenticatedHomeserverSynapse; if (hs is null) return; Homeserver = hs; if (!string.IsNullOrWhiteSpace(EventUrl)) { _ = ExpandEventUrl(); } } [SupplyParameterFromQuery] public string? EventUrl { get; set { field = value?.Split('?')[0]; _ = ExpandEventUrl(); } } private StateEventResponse? Event { get; set; } private string? EventJson { get; set { field = value; _ = ExpandEventJson(); } } private string? MxcUrl { get; set { field = value; _ = ExpandMxcUri(); } } private MxcUri? MxcUri { get; set; } private string? RoomId { get => Event?.RoomId ?? field; set; } private async Task ExpandEventUrl() { Console.WriteLine("Expanding event URL..."); if (!string.IsNullOrWhiteSpace(EventUrl)) { Console.WriteLine("Parsing event URL..."); var data = ParseEventUrl(EventUrl); Console.WriteLine($"Room: {data.room}, Event: {data.eventId}"); RoomId = data.room; var room = Homeserver.GetRoom(data.room); var eventResponse = await room.GetEventAsync(data.eventId); eventResponse.RoomId ??= data.room; EventJson = eventResponse?.ToJson() ?? "null"; } StateHasChanged(); } private async Task ExpandEventJson() { Console.WriteLine("Expanding event JSON..."); if (!string.IsNullOrWhiteSpace(EventJson)) { Event = JsonSerializer.Deserialize(EventJson); MxcUrl = Event?.ContentAs()?.Url; Console.WriteLine($"MXC URL: {MxcUrl}"); var possiblyRelated = await Homeserver.Admin.GetRoomMediaAsync(Event!.RoomId!); } StateHasChanged(); } private async Task ExpandMxcUri() { Console.WriteLine("Expanding MXC URI..."); if (!string.IsNullOrWhiteSpace(MxcUrl)) { MxcUri = MxcUrl; } StateHasChanged(); } private (string room, string eventId) ParseEventUrl(string url) { var parts = url.Split('/'); Console.WriteLine($"Parts: {string.Join(", ", parts)}"); return (parts[4].UrlDecode(), parts[5].Split('?')[0].UrlDecode()); } #region Local user private async Task DeactivateUser() { await Homeserver.Admin.DeactivateUserAsync(Event.Sender, true); } private async Task QuarantineMediaByUser() { if (Event is null) return; var media = Homeserver.Admin.GetUserMediaEnumerableAsync(Event?.Sender!); await foreach (var m in media) { if (m is not null) { // await Homeserver.Admin.QuarantineMedia(m); // await Homeserver.Admin.DeleteMedia(m); } } } #endregion private async Task RedactAllEvents() { if (Event is null) return; await Homeserver!.Admin.DeleteAllMessages(Event.Sender!); } }