about summary refs log tree commit diff
path: root/MatrixAntiDmSpam.Core
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-05-15 18:26:57 +0200
committerRory& <root@rory.gay>2025-05-15 18:26:57 +0200
commita8acdee82810351c4f438286b535c215f318df3f (patch)
treeaaa718b660450cadcffb8da71ed3bc534f15ea53 /MatrixAntiDmSpam.Core
parentUpdate ArcaneLibs (diff)
downloadMatrixAntiDmSpam-a8acdee82810351c4f438286b535c215f318df3f.tar.xz
Fix bug removing all policies that arent user added, theoretically fix missing room_id bugfix
Diffstat (limited to 'MatrixAntiDmSpam.Core')
-rw-r--r--MatrixAntiDmSpam.Core/PolicyExecutor.cs45
1 files changed, 25 insertions, 20 deletions
diff --git a/MatrixAntiDmSpam.Core/PolicyExecutor.cs b/MatrixAntiDmSpam.Core/PolicyExecutor.cs

index 8a24995..96ec344 100644 --- a/MatrixAntiDmSpam.Core/PolicyExecutor.cs +++ b/MatrixAntiDmSpam.Core/PolicyExecutor.cs
@@ -99,31 +99,35 @@ public class PolicyExecutor( await homeserver.SetAccountDataAsync(IgnoredUserListEventContent.EventId, ignoreListContent); } - + private async Task<IgnoredUserListEventContent> FilterInvalidIgnoreListEntries() { - var ignoreList = await homeserver.GetAccountDataOrNullAsync<IgnoredUserListEventContent>(IgnoredUserListEventContent.EventId); - if (ignoreList != null) { - ignoreList.IgnoredUsers.RemoveAll((id, ignoredUserData) => { - if (ignoredUserData.AdditionalData is null) return false; - if (!ignoredUserData.AdditionalData.ContainsKey(MadsIgnoreMetadataContent.EventId)) return false; - var metadata = ignoredUserData.GetAdditionalData<JsonObject>(MadsIgnoreMetadataContent.EventId)!; + var ignoreList = await homeserver.GetAccountDataOrNullAsync<IgnoredUserListEventContent>(IgnoredUserListEventContent.EventId) + ?? throw new InvalidOperationException("Ignore list is null"); - if (metadata.ContainsKey("policies")) { - var policies = metadata["policies"]!.AsArray(); + ignoreList.IgnoredUsers.RemoveAll((id, ignoredUserData) => { + if (ignoredUserData.AdditionalData is null) return false; + if (!ignoredUserData.AdditionalData.ContainsKey(MadsIgnoreMetadataContent.EventId)) return false; + var metadata = ignoredUserData.GetAdditionalData<JsonObject>(MadsIgnoreMetadataContent.EventId)!; - bool IsPolicyEntryValid(JsonNode? p) => - p!["room_id"]?.GetValue<string>() != null && p["type"]?.GetValue<string>() != null && p["state_key"]?.GetValue<string>() != null; + if (metadata.ContainsKey("policies")) { + var policies = metadata["policies"]!.AsArray(); - if (policies.Any(x => !IsPolicyEntryValid(x))) { - logger.LogWarning("Found invalid policy reference in ignore list, removing! {policy}", - policies.Where(x => !IsPolicyEntryValid(x)).Select(x => x.ToJson(ignoreNull: true))); - metadata["policies"] = new JsonArray(policies.Where(IsPolicyEntryValid).ToArray()); - } + static bool IsPolicyEntryValid(JsonNode? p) => + p?["room_id"]?.GetValue<string>() != null + && p["type"]?.GetValue<string>() != null + && p["state_key"]?.GetValue<string>() != null; + + if (policies.Any(x => !IsPolicyEntryValid(x))) { + logger.LogWarning("Found invalid policy reference in ignore list, removing! {policy}", + policies.Where(x => !IsPolicyEntryValid(x)).Select(x => x.ToJson(ignoreNull: true))); + metadata["policies"] = new JsonArray(policies.Where(IsPolicyEntryValid).ToArray()); + ignoredUserData.AdditionalData[MadsIgnoreMetadataContent.EventId] = metadata; } + } - return metadata["was_user_added"]?.GetValue<bool>() is null or false; - }); - } + return metadata["was_user_added"]?.GetValue<bool>() is null or false + && metadata["policies"]?.AsArray().Count == 0; + }); return ignoreList; } @@ -146,10 +150,11 @@ public class PolicyExecutor( logger.LogError(e, "Failed to parse ignore list entry for {}", id); } } - + foreach (var id in idsToRemove) { ignoreList.IgnoredUsers.Remove(id); } + await homeserver.SetAccountDataAsync(IgnoredUserListEventContent.EventId, ignoreList); }