mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-20 12:33:09 -06:00
Update push rules
This commit is contained in:
parent
76db8e90de
commit
aa4b0a76c4
|
|
@ -16,12 +16,6 @@ func mRuleContainsUserNameDefinition(localpart string) *Rule {
|
||||||
Default: true,
|
Default: true,
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
Pattern: localpart,
|
Pattern: localpart,
|
||||||
Conditions: []*Condition{
|
|
||||||
{
|
|
||||||
Kind: EventMatchCondition,
|
|
||||||
Key: "content.body",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Actions: []*Action{
|
Actions: []*Action{
|
||||||
{Kind: NotifyAction},
|
{Kind: NotifyAction},
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +26,6 @@ func mRuleContainsUserNameDefinition(localpart string) *Rule {
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: true,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ const (
|
||||||
MRuleTombstone = ".m.rule.tombstone"
|
MRuleTombstone = ".m.rule.tombstone"
|
||||||
MRuleRoomNotif = ".m.rule.roomnotif"
|
MRuleRoomNotif = ".m.rule.roomnotif"
|
||||||
MRuleReaction = ".m.rule.reaction"
|
MRuleReaction = ".m.rule.reaction"
|
||||||
|
MRuleRoomACLs = ".m.rule.room.server_acl"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -73,7 +74,6 @@ var (
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: true,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -98,10 +98,27 @@ var (
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: true,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
mRuleACLsDefinition = Rule{
|
||||||
|
RuleID: MRuleRoomACLs,
|
||||||
|
Default: true,
|
||||||
|
Enabled: true,
|
||||||
|
Conditions: []*Condition{
|
||||||
|
{
|
||||||
|
Kind: EventMatchCondition,
|
||||||
|
Key: "type",
|
||||||
|
Pattern: "m.room.server_acl",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Kind: EventMatchCondition,
|
||||||
|
Key: "state_key",
|
||||||
|
Pattern: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Actions: []*Action{},
|
||||||
|
}
|
||||||
mRuleRoomNotifDefinition = Rule{
|
mRuleRoomNotifDefinition = Rule{
|
||||||
RuleID: MRuleRoomNotif,
|
RuleID: MRuleRoomNotif,
|
||||||
Default: true,
|
Default: true,
|
||||||
|
|
@ -122,7 +139,6 @@ var (
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: true,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -172,11 +188,6 @@ func mRuleInviteForMeDefinition(userID string) *Rule {
|
||||||
Tweak: SoundTweak,
|
Tweak: SoundTweak,
|
||||||
Value: "default",
|
Value: "default",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Kind: SetTweakAction,
|
|
||||||
Tweak: HighlightTweak,
|
|
||||||
Value: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
105
internal/pushrules/default_pushrules_test.go
Normal file
105
internal/pushrules/default_pushrules_test.go
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
package pushrules
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Tests that the pre-defined rules as of
|
||||||
|
// https://spec.matrix.org/v1.4/client-server-api/#predefined-rules
|
||||||
|
// are correct
|
||||||
|
func TestDefaultRules(t *testing.T) {
|
||||||
|
type testCase struct {
|
||||||
|
name string
|
||||||
|
inputBytes []byte
|
||||||
|
want Rule
|
||||||
|
}
|
||||||
|
|
||||||
|
testCases := []testCase{
|
||||||
|
// Default override rules
|
||||||
|
{
|
||||||
|
name: ".m.rule.master",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.master","default":true,"enabled":false,"conditions":[],"actions":["dont_notify"]}`),
|
||||||
|
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"]}`),
|
||||||
|
want: mRuleSuppressNoticesDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.invite_for_me",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.invite_for_me","default":true,"enabled":true,"conditions":[{"key":"type","kind":"event_match","pattern":"m.room.member"},{"key":"content.membership","kind":"event_match","pattern":"invite"},{"key":"state_key","kind":"event_match","pattern":"@test:localhost"}],"actions":["notify",{"set_tweak":"sound","value":"default"}]}`),
|
||||||
|
want: *mRuleInviteForMeDefinition("@test:localhost"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.member_event",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.member_event","default":true,"enabled":true,"conditions":[{"key":"type","kind":"event_match","pattern":"m.room.member"}],"actions":["dont_notify"]}`),
|
||||||
|
want: mRuleMemberEventDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.contains_display_name",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.contains_display_name","default":true,"enabled":true,"conditions":[{"kind":"contains_display_name"}],"actions":["notify",{"set_tweak":"sound","value":"default"},{"set_tweak":"highlight"}]}`),
|
||||||
|
want: mRuleContainsDisplayNameDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.tombstone",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.tombstone","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.tombstone"},{"kind":"event_match","key":"state_key","pattern":""}],"actions":["notify",{"set_tweak":"highlight"}]}`),
|
||||||
|
want: mRuleTombstoneDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.room.server_acl",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.room.server_acl","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.server_acl"},{"kind":"event_match","key":"state_key","pattern":""}],"actions":[]}`),
|
||||||
|
want: mRuleACLsDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.roomnotif",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.roomnotif","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"content.body","pattern":"@room"},{"kind":"sender_notification_permission","key":"room"}],"actions":["notify",{"set_tweak":"highlight"}]}`),
|
||||||
|
want: mRuleRoomNotifDefinition,
|
||||||
|
},
|
||||||
|
// Default content rules
|
||||||
|
{
|
||||||
|
name: ".m.rule.contains_user_name",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.contains_user_name","default":true,"enabled":true,"pattern":"myLocalUser","actions":["notify",{"set_tweak":"sound","value":"default"},{"set_tweak":"highlight"}]}`),
|
||||||
|
want: *mRuleContainsUserNameDefinition("myLocalUser"),
|
||||||
|
},
|
||||||
|
// default underride rules
|
||||||
|
{
|
||||||
|
name: ".m.rule.call",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.call","default":true,"enabled":true,"conditions":[{"key":"type","kind":"event_match","pattern":"m.call.invite"}],"actions":["notify",{"set_tweak":"sound","value":"ring"}]}`),
|
||||||
|
want: mRuleCallDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.encrypted_room_one_to_one",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.encrypted_room_one_to_one","default":true,"enabled":true,"conditions":[{"kind":"room_member_count","is":"2"},{"kind":"event_match","key":"type","pattern":"m.room.encrypted"}],"actions":["notify",{"set_tweak":"sound","value":"default"}]}`),
|
||||||
|
want: mRuleEncryptedRoomOneToOneDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.room_one_to_one",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.room_one_to_one","default":true,"enabled":true,"conditions":[{"kind":"room_member_count","is":"2"},{"kind":"event_match","key":"type","pattern":"m.room.message"}],"actions":["notify",{"set_tweak":"sound","value":"default"}]}`),
|
||||||
|
want: mRuleRoomOneToOneDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.message",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.message","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.message"}],"actions":["notify"]}`),
|
||||||
|
want: mRuleMessageDefinition,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: ".m.rule.encrypted",
|
||||||
|
inputBytes: []byte(`{"rule_id":".m.rule.encrypted","default":true,"enabled":true,"conditions":[{"kind":"event_match","key":"type","pattern":"m.room.encrypted"}],"actions":["notify"]}`),
|
||||||
|
want: mRuleEncryptedDefinition,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
r := Rule{}
|
||||||
|
err := json.Unmarshal(tc.inputBytes, &r)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, tc.want, r)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -35,11 +35,6 @@ var (
|
||||||
Tweak: SoundTweak,
|
Tweak: SoundTweak,
|
||||||
Value: "ring",
|
Value: "ring",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Kind: SetTweakAction,
|
|
||||||
Tweak: HighlightTweak,
|
|
||||||
Value: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
mRuleEncryptedRoomOneToOneDefinition = Rule{
|
mRuleEncryptedRoomOneToOneDefinition = Rule{
|
||||||
|
|
@ -64,11 +59,6 @@ var (
|
||||||
Tweak: SoundTweak,
|
Tweak: SoundTweak,
|
||||||
Value: "default",
|
Value: "default",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
Kind: SetTweakAction,
|
|
||||||
Tweak: HighlightTweak,
|
|
||||||
Value: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
mRuleRoomOneToOneDefinition = Rule{
|
mRuleRoomOneToOneDefinition = Rule{
|
||||||
|
|
@ -90,13 +80,8 @@ var (
|
||||||
{Kind: NotifyAction},
|
{Kind: NotifyAction},
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: SoundTweak,
|
||||||
Value: false,
|
Value: "default",
|
||||||
},
|
|
||||||
{
|
|
||||||
Kind: SetTweakAction,
|
|
||||||
Tweak: HighlightTweak,
|
|
||||||
Value: false,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -113,11 +98,6 @@ var (
|
||||||
},
|
},
|
||||||
Actions: []*Action{
|
Actions: []*Action{
|
||||||
{Kind: NotifyAction},
|
{Kind: NotifyAction},
|
||||||
{
|
|
||||||
Kind: SetTweakAction,
|
|
||||||
Tweak: HighlightTweak,
|
|
||||||
Value: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
mRuleEncryptedDefinition = Rule{
|
mRuleEncryptedDefinition = Rule{
|
||||||
|
|
@ -133,11 +113,6 @@ var (
|
||||||
},
|
},
|
||||||
Actions: []*Action{
|
Actions: []*Action{
|
||||||
{Kind: NotifyAction},
|
{Kind: NotifyAction},
|
||||||
{
|
|
||||||
Kind: SetTweakAction,
|
|
||||||
Tweak: HighlightTweak,
|
|
||||||
Value: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ type Rule struct {
|
||||||
|
|
||||||
// Conditions provide the rule's conditions for OverrideKind and
|
// Conditions provide the rule's conditions for OverrideKind and
|
||||||
// UnderrideKind. Not allowed for other kinds.
|
// UnderrideKind. Not allowed for other kinds.
|
||||||
Conditions []*Condition `json:"conditions"`
|
Conditions []*Condition `json:"conditions,omitempty"`
|
||||||
|
|
||||||
// Pattern is the body pattern to match for ContentKind. Required
|
// Pattern is the body pattern to match for ContentKind. Required
|
||||||
// for that kind. The interpretation is the same as that of
|
// for that kind. The interpretation is the same as that of
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue