@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
Server |
Reason |
Expires |
Actions |
@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.server" && x.content.Entity != null))
{
Entity: @policyEvent.content.Entity State: @policyEvent.state_key |
@policyEvent.content.Reason |
@policyEvent.content.ExpiryDateTime
|
|
}
Invalid events
State key |
Serialised contents |
@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.server" && x.content.Entity == null))
{
@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
Room |
Reason |
Expires |
Actions |
@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.room" && x.content.Entity != null))
{
Entity: @policyEvent.content.Entity State: @policyEvent.state_key |
@policyEvent.content.Reason |
@policyEvent.content.ExpiryDateTime
|
|
}
Invalid events
State key |
Serialised contents |
@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.room" && x.content.Entity == null))
{
@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
User |
Reason |
Expires |
Actions |
@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.user" && x.content.Entity != null))
{
Entity: @string.Join("", policyEvent.content.Entity.Take(64)) State: @string.Join("", policyEvent.state_key.Take(64)) |
@policyEvent.content.Reason |
@policyEvent.content.ExpiryDateTime
|
|
}
Invalid events
State key |
Serialised contents |
@foreach (var policyEvent in PolicyEvents.Where(x => x.type == "m.policy.rule.user" && x.content.Entity == null))
{
@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