2 files changed, 20 insertions, 0 deletions
diff --git a/LibMatrix.EventTypes/Interop/Draupnir/DraupnirProtectedRoomsData.cs b/LibMatrix.EventTypes/Interop/Draupnir/DraupnirProtectedRoomsData.cs
new file mode 100644
index 0000000..1917239
--- /dev/null
+++ b/LibMatrix.EventTypes/Interop/Draupnir/DraupnirProtectedRoomsData.cs
@@ -0,0 +1,11 @@
+using System.Text.Json.Serialization;
+
+namespace LibMatrix.EventTypes.Interop.Draupnir;
+
+[MatrixEvent(EventName = EventId)]
+public class DraupnirProtectedRoomsData : EventContent {
+ public const string EventId = "org.matrix.mjolnir.protected_rooms";
+
+ [JsonPropertyName("rooms")]
+ public List<string> Rooms { get; set; } = new();
+}
\ No newline at end of file
diff --git a/LibMatrix.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs b/LibMatrix.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs
index 5bfd77b..0569477 100644
--- a/LibMatrix.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs
+++ b/LibMatrix.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs
@@ -1,5 +1,6 @@
using System.Security.Cryptography;
using System.Text.Json.Serialization;
+using System.Text.RegularExpressions;
using ArcaneLibs.Attributes;
using ArcaneLibs.Extensions;
@@ -91,6 +92,14 @@ public abstract class PolicyRuleEventContent : EventContent {
}
public string GetDraupnir2StateKey() => Convert.ToBase64String(SHA256.HashData($"{Entity}{Recommendation}".AsBytes().ToArray()));
+
+ public Regex GetEntityRegex() => new(Entity.Replace(".", "\\.").Replace("*", ".*").Replace("?", "."));
+
+ public bool EntityMatches(string entity) =>
+ Entity == entity
+ || (Entity.Contains("*") || Entity.Contains("?")
+ ? GetEntityRegex().IsMatch(entity)
+ : entity == Entity);
}
public static class PolicyRecommendationTypes {
|