Skip to content

Commit

Permalink
MSC3966: event_property_contains push rule condition (#3966)
Browse files Browse the repository at this point in the history
* Add proposal for exact_event_property_contains push condition.

* Fix incorrect word.

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>

* Fix broken link.

* Fix typo.

Co-authored-by: Hubert Chathi <hubertc@matrix.org>

* Update condition name.

---------

Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
Co-authored-by: Hubert Chathi <hubertc@matrix.org>
  • Loading branch information
3 people authored Mar 7, 2023
1 parent 618d34b commit d0b48b9
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions proposals/3966-exact-event-property-contains-push-condition.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# MSC3966: `event_property_contains` push rule condition

[MSC3952](https://github.com/matrix-org/matrix-spec-proposals/pull/3952):
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`](https://spec.matrix.org/v1.5/client-server-api/#conditions-1),
but searches an array for an exact value. The values must match exactly and be a
non-compound JSON type allowed by [canonical JSON](https://spec.matrix.org/v1.5/appendices/#canonical-json):
i.e. strings, `null`, `true`, `false` and integers.

An example condition would look like:

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

This would match an event with content:

```json
{
"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](https://github.com/matrix-org/matrix-spec-proposals/pull/3887) is an
unfinished alternative which suggests allowing [`event_match`](https://spec.matrix.org/v1.5/client-server-api/#conditions-1)
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](https://spec.matrix.org/v1.5/client-server-api/#size-limits)
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](https://github.com/matrix-org/matrix-spec-proposals/pull/3758)
(and the implementation builds on that), but it does not strictly depend on it.

0 comments on commit d0b48b9

Please sign in to comment.