aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-10-24 11:51:08 +0200
committerGitHub <noreply@github.com>2023-10-24 11:51:08 +0200
commit1b124fe9cba8b4699a1f65382e4ea1a5674d12fa (patch)
tree3664bfc6b505cc5f8394b760e8d0d06ccfcf0250
parentc1d6b9aa8ef29a76b61b1aaf60572d3493adf306 (diff)
Implement MSC3987, fix setting Element Android notifications (#3242)
Should fix https://github.com/matrix-org/dendrite/issues/3183, since Element Android already implements [MSC3987](https://github.com/vector-im/element-android/pull/8530) This is also part of https://github.com/matrix-org/dendrite/issues/3225
-rw-r--r--clientapi/clientapi_test.go2
-rw-r--r--internal/pushrules/action_test.go2
-rw-r--r--internal/pushrules/default_override.go11
-rw-r--r--internal/pushrules/default_pushrules_test.go6
-rw-r--r--internal/pushrules/util.go5
-rw-r--r--internal/pushrules/util_test.go5
-rw-r--r--internal/pushrules/validate.go2
-rw-r--r--userapi/consumers/roomserver.go4
-rw-r--r--userapi/consumers/roomserver_test.go10
9 files changed, 18 insertions, 29 deletions
diff --git a/clientapi/clientapi_test.go b/clientapi/clientapi_test.go
index 82ec9fea..f2d617cb 100644
--- a/clientapi/clientapi_test.go
+++ b/clientapi/clientapi_test.go
@@ -1418,7 +1418,7 @@ func TestPushRules(t *testing.T) {
validateFunc: func(t *testing.T, respBody *bytes.Buffer) {
actions := gjson.GetBytes(respBody.Bytes(), "actions").Array()
// only a basic check
- assert.Equal(t, 1, len(actions))
+ assert.Equal(t, 0, len(actions))
},
},
{
diff --git a/internal/pushrules/action_test.go b/internal/pushrules/action_test.go
index 72db9c99..d1eb16ef 100644
--- a/internal/pushrules/action_test.go
+++ b/internal/pushrules/action_test.go
@@ -13,8 +13,6 @@ func TestActionJSON(t *testing.T) {
Want Action
}{
{Action{Kind: NotifyAction}},
- {Action{Kind: DontNotifyAction}},
- {Action{Kind: CoalesceAction}},
{Action{Kind: SetTweakAction}},
{Action{Kind: SetTweakAction, Tweak: SoundTweak, Value: "default"}},
diff --git a/internal/pushrules/default_override.go b/internal/pushrules/default_override.go
index f97427b7..cb825af5 100644
--- a/internal/pushrules/default_override.go
+++ b/internal/pushrules/default_override.go
@@ -10,6 +10,7 @@ func defaultOverrideRules(userID string) []*Rule {
&mRuleRoomNotifDefinition,
&mRuleTombstoneDefinition,
&mRuleReactionDefinition,
+ &mRuleACLsDefinition,
}
}
@@ -30,7 +31,7 @@ var (
RuleID: MRuleMaster,
Default: true,
Enabled: false,
- Actions: []*Action{{Kind: DontNotifyAction}},
+ Actions: []*Action{},
}
mRuleSuppressNoticesDefinition = Rule{
RuleID: MRuleSuppressNotices,
@@ -43,7 +44,7 @@ var (
Pattern: pointer("m.notice"),
},
},
- Actions: []*Action{{Kind: DontNotifyAction}},
+ Actions: []*Action{},
}
mRuleMemberEventDefinition = Rule{
RuleID: MRuleMemberEvent,
@@ -56,7 +57,7 @@ var (
Pattern: pointer("m.room.member"),
},
},
- Actions: []*Action{{Kind: DontNotifyAction}},
+ Actions: []*Action{},
}
mRuleContainsDisplayNameDefinition = Rule{
RuleID: MRuleContainsDisplayName,
@@ -152,9 +153,7 @@ var (
Pattern: pointer("m.reaction"),
},
},
- Actions: []*Action{
- {Kind: DontNotifyAction},
- },
+ Actions: []*Action{},
}
)
diff --git a/internal/pushrules/default_pushrules_test.go b/internal/pushrules/default_pushrules_test.go
index dea82984..506fe3cc 100644
--- a/internal/pushrules/default_pushrules_test.go
+++ b/internal/pushrules/default_pushrules_test.go
@@ -21,12 +21,12 @@ func TestDefaultRules(t *testing.T) {
// Default override rules
{
name: ".m.rule.master",
- inputBytes: []byte(`{"rule_id":".m.rule.master","default":true,"enabled":false,"actions":["dont_notify"]}`),
+ inputBytes: []byte(`{"rule_id":".m.rule.master","default":true,"enabled":false,"actions":[]}`),
want: mRuleMasterDefinition,
},
{
name: ".m.rule.suppress_notices",
- inputBytes: []byte(`{"rule_id":".m.rule.suppress_notices","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"content.msgtype","pattern":"m.notice"}],"actions":["dont_notify"]}`),
+ inputBytes: []byte(`{"rule_id":".m.rule.suppress_notices","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"content.msgtype","pattern":"m.notice"}],"actions":[]}`),
want: mRuleSuppressNoticesDefinition,
},
{
@@ -36,7 +36,7 @@ func TestDefaultRules(t *testing.T) {
},
{
name: ".m.rule.member_event",
- inputBytes: []byte(`{"rule_id":".m.rule.member_event","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.member"}],"actions":["dont_notify"]}`),
+ inputBytes: []byte(`{"rule_id":".m.rule.member_event","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.member"}],"actions":[]}`),
want: mRuleMemberEventDefinition,
},
{
diff --git a/internal/pushrules/util.go b/internal/pushrules/util.go
index de8fe5cd..e2821b57 100644
--- a/internal/pushrules/util.go
+++ b/internal/pushrules/util.go
@@ -16,10 +16,7 @@ func ActionsToTweaks(as []*Action) (ActionKind, map[string]interface{}, error) {
for _, a := range as {
switch a.Kind {
- case DontNotifyAction:
- // Don't bother processing any further
- return DontNotifyAction, nil, nil
-
+ case DontNotifyAction: // Ignored
case SetTweakAction:
if tweaks == nil {
tweaks = map[string]interface{}{}
diff --git a/internal/pushrules/util_test.go b/internal/pushrules/util_test.go
index 89f8243d..83eee7ed 100644
--- a/internal/pushrules/util_test.go
+++ b/internal/pushrules/util_test.go
@@ -17,17 +17,16 @@ func TestActionsToTweaks(t *testing.T) {
{"empty", nil, UnknownAction, nil},
{"zero", []*Action{{}}, UnknownAction, nil},
{"onlyPrimary", []*Action{{Kind: NotifyAction}}, NotifyAction, nil},
- {"onlyPrimaryDontNotify", []*Action{{Kind: DontNotifyAction}}, DontNotifyAction, nil},
+ {"onlyPrimaryDontNotify", []*Action{}, UnknownAction, nil},
{"onlyTweak", []*Action{{Kind: SetTweakAction, Tweak: HighlightTweak}}, UnknownAction, map[string]interface{}{"highlight": nil}},
{"onlyTweakWithValue", []*Action{{Kind: SetTweakAction, Tweak: SoundTweak, Value: "default"}}, UnknownAction, map[string]interface{}{"sound": "default"}},
{
"all",
[]*Action{
- {Kind: CoalesceAction},
{Kind: SetTweakAction, Tweak: HighlightTweak},
{Kind: SetTweakAction, Tweak: SoundTweak, Value: "default"},
},
- CoalesceAction,
+ UnknownAction,
map[string]interface{}{"highlight": nil, "sound": "default"},
},
}
diff --git a/internal/pushrules/validate.go b/internal/pushrules/validate.go
index b54ec3fb..4cc47934 100644
--- a/internal/pushrules/validate.go
+++ b/internal/pushrules/validate.go
@@ -18,7 +18,7 @@ func ValidateRule(kind Kind, rule *Rule) []error {
errs = append(errs, fmt.Errorf("invalid rule ID: %s", rule.RuleID))
}
- if len(rule.Actions) == 0 {
+ if rule.Actions == nil {
errs = append(errs, fmt.Errorf("missing actions"))
}
for _, action := range rule.Actions {
diff --git a/userapi/consumers/roomserver.go b/userapi/consumers/roomserver.go
index 6da41f8a..fca74129 100644
--- a/userapi/consumers/roomserver.go
+++ b/userapi/consumers/roomserver.go
@@ -538,8 +538,8 @@ func (s *OutputRoomEventConsumer) notifyLocal(ctx context.Context, event *rstype
if err != nil {
return fmt.Errorf("pushrules.ActionsToTweaks: %w", err)
}
- // TODO: support coalescing.
- if a != pushrules.NotifyAction && a != pushrules.CoalesceAction {
+
+ if a != pushrules.NotifyAction {
log.WithFields(log.Fields{
"event_id": event.EventID(),
"room_id": event.RoomID().String(),
diff --git a/userapi/consumers/roomserver_test.go b/userapi/consumers/roomserver_test.go
index 49dd5b23..7b7c0861 100644
--- a/userapi/consumers/roomserver_test.go
+++ b/userapi/consumers/roomserver_test.go
@@ -81,12 +81,8 @@ func Test_evaluatePushRules(t *testing.T) {
{
name: "m.reaction doesn't notify",
eventContent: `{"type":"m.reaction","room_id":"!room:example.com"}`,
- wantAction: pushrules.DontNotifyAction,
- wantActions: []*pushrules.Action{
- {
- Kind: pushrules.DontNotifyAction,
- },
- },
+ wantAction: pushrules.UnknownAction,
+ wantActions: []*pushrules.Action{},
},
{
name: "m.room.message notifies",
@@ -136,7 +132,7 @@ func Test_evaluatePushRules(t *testing.T) {
t.Fatalf("expected action to be '%s', got '%s'", tc.wantAction, gotAction)
}
// this is taken from `notifyLocal`
- if tc.wantNotify && gotAction != pushrules.NotifyAction && gotAction != pushrules.CoalesceAction {
+ if tc.wantNotify && gotAction != pushrules.NotifyAction {
t.Fatalf("expected to notify but didn't")
}
})