matrix-doc/proposals/3966-exact-event-property-c...

2.1 KiB

MSC3966: event_property_contains push rule condition

MSC3952: Intentional mentions requires a way for a push rule condition to search for a value in a JSON array of values. This proposes implementing it in a generic fashion for re-use with other push rules.

Proposal

A new push rule condition event_property_contains is added which acts like event_match, but searches an array for an exact value. The values must match exactly and be a non-compound JSON type allowed by canonical JSON: i.e. strings, null, true, false and integers.

An example condition would look like:

{
  "kind": "event_property_contains",
  "key": "content.my_array",
  "value": "foo"
}

This would match an event with content:

{
  "content": {
    "my_array": ["foo", true]
  }
}

And it would not match if my_array was empty or did not exist.

Potential issues

None foreseen.

Alternatives

MSC3887 is an unfinished alternative which suggests allowing event_match to search in arrays without other changes.

Security considerations

It is possible for the event content to contain very large arrays (the maximum event size is 65,536 bytes, if most of that contains an array of empty strings you get somewhere around 20,000 entries). Iterating through arrays of this size should not be a problem for modern computers, especially since the push rule searches for exact matches.

Unstable prefix

During development org.matrix.msc3966.exact_event_property_contains shall be used in place of event_property_contains.

Dependencies

This MSC has similar semantics to MSC3758 (and the implementation builds on that), but it does not strictly depend on it.