@page "/PolicyListEditor/{RoomId}" @using System.Text.Json @using MatrixRoomUtils.Core.Extensions @using MatrixRoomUtils.Core.StateEventTypes @inject ILocalStorageService LocalStorage @inject NavigationManager NavigationManager

Policy list editor - Editing @RoomId


This policy list contains @PolicyEvents.Count(x => x.type == "m.policy.rule.server") server bans, @PolicyEvents.Count(x => x.type == "m.policy.rule.room") room bans and @PolicyEvents.Count(x => x.type == "m.policy.rule.user") user bans.

@if (!PolicyEvents.Any(x => x.type == "m.policy.rule.server")) {

No server policies

} else {

Server policies


@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.server" && x.content.Entity != null)) { }
Server Reason Expires Actions
Entity: @policyEvent.content.Entity
State: @policyEvent.state_key
@policyEvent.content.Reason @policyEvent.content.ExpiryDateTime
Invalid events @foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.server" && x.content.Entity == null)) { }
State key Serialised contents
@policyEvent.state_key @policyEvent.content.ToJson(indent: false, ignoreNull: true)
} @if (!PolicyEvents.Any(x => x.type == "m.policy.rule.room")) {

No room policies

} else {

Room policies


@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.room" && x.content.Entity != null)) { }
Room Reason Expires Actions
Entity: @policyEvent.content.Entity
State: @policyEvent.state_key
@policyEvent.content.Reason @policyEvent.content.ExpiryDateTime
Invalid events @foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.room" && x.content.Entity == null)) { }
State key Serialised contents
@policyEvent.state_key @policyEvent.content.ToJson(indent: false, ignoreNull: true)
} @if (!PolicyEvents.Any(x => x.type == "m.policy.rule.user")) {

No user policies

} else {

User policies


@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.user" && x.content.Entity != null)) { }
User Reason Expires Actions
Entity: @string.Join("", policyEvent.content.Entity.Take(64))
State: @string.Join("", policyEvent.state_key.Take(64))
@policyEvent.content.Reason @policyEvent.content.ExpiryDateTime
Invalid events @foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.user" && x.content.Entity == null)) { }
State key Serialised contents
@policyEvent.state_key @policyEvent.content.ToJson(indent: false, ignoreNull: true)
} @code { //get room list // - sync withroom list filter // type = support.feline.msc3784 //support.feline.policy.lists.msc.v1 [Parameter] public string? RoomId { get; set; } public List> PolicyEvents { get; set; } = new(); protected override async Task OnInitializedAsync() { if (!RuntimeCache.WasLoaded) await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage); await base.OnInitializedAsync(); // if(RuntimeCache.AccessToken == null || RuntimeCache.CurrentHomeserver == null) if (RuntimeCache.CurrentHomeServer == null) { NavigationManager.NavigateTo("/Login"); return; } RoomId = RoomId.Replace('~', '.'); await LoadStatesAsync(); Console.WriteLine("Policy list editor initialized!"); } private async Task LoadStatesAsync() { // using var client = new HttpClient(); // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", LocalStorageWrapper.AccessToken); // var response = await client.GetAsync($"{LocalStorageWrapper.CurrentHomeserver}/_matrix/client/r0/rooms/{RoomId}/state"); // var content = await response.Content.ReadAsStringAsync(); // Console.WriteLine(JsonSerializer.Deserialize(content).ToJson()); // var stateEvents = JsonSerializer.Deserialize>(content); var room = await RuntimeCache.CurrentHomeServer.GetRoom(RoomId); var stateEventsQuery = await room.GetStateAsync(""); if (stateEventsQuery == null) { Console.WriteLine("state events query is null!!!"); } var stateEvents = stateEventsQuery.Value.Deserialize>(); PolicyEvents = stateEvents.Where(x => x.type.StartsWith("m.policy.rule")) .Select(x => JsonSerializer.Deserialize>(JsonSerializer.Serialize(x))).ToList(); StateHasChanged(); } }