mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-22 05:23:09 -06:00
Pushrules tweaks
This commit is contained in:
parent
42a82091a8
commit
9405093863
|
|
@ -16,6 +16,12 @@ 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},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,9 @@ func defaultOverrideRules(userID string) []*Rule {
|
||||||
mRuleInviteForMeDefinition(userID),
|
mRuleInviteForMeDefinition(userID),
|
||||||
&mRuleMemberEventDefinition,
|
&mRuleMemberEventDefinition,
|
||||||
&mRuleContainsDisplayNameDefinition,
|
&mRuleContainsDisplayNameDefinition,
|
||||||
&mRuleTombstoneDefinition,
|
|
||||||
&mRuleRoomNotifDefinition,
|
&mRuleRoomNotifDefinition,
|
||||||
|
&mRuleTombstoneDefinition,
|
||||||
|
&mRuleReactionDefinition,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -20,6 +21,7 @@ const (
|
||||||
MRuleContainsDisplayName = ".m.rule.contains_display_name"
|
MRuleContainsDisplayName = ".m.rule.contains_display_name"
|
||||||
MRuleTombstone = ".m.rule.tombstone"
|
MRuleTombstone = ".m.rule.tombstone"
|
||||||
MRuleRoomNotif = ".m.rule.roomnotif"
|
MRuleRoomNotif = ".m.rule.roomnotif"
|
||||||
|
MRuleReaction = ".m.rule.reaction"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -96,7 +98,7 @@ var (
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: false,
|
Value: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -120,10 +122,25 @@ var (
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: false,
|
Value: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
mRuleReactionDefinition = Rule{
|
||||||
|
RuleID: MRuleReaction,
|
||||||
|
Default: true,
|
||||||
|
Enabled: true,
|
||||||
|
Conditions: []*Condition{
|
||||||
|
{
|
||||||
|
Kind: EventMatchCondition,
|
||||||
|
Key: "type",
|
||||||
|
Pattern: "m.reaction",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Actions: []*Action{
|
||||||
|
{Kind: DontNotifyAction},
|
||||||
|
},
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func mRuleInviteForMeDefinition(userID string) *Rule {
|
func mRuleInviteForMeDefinition(userID string) *Rule {
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ const (
|
||||||
|
|
||||||
var defaultUnderrideRules = []*Rule{
|
var defaultUnderrideRules = []*Rule{
|
||||||
&mRuleCallDefinition,
|
&mRuleCallDefinition,
|
||||||
&mRuleEncryptedRoomOneToOneDefinition,
|
|
||||||
&mRuleRoomOneToOneDefinition,
|
&mRuleRoomOneToOneDefinition,
|
||||||
|
&mRuleEncryptedRoomOneToOneDefinition,
|
||||||
&mRuleMessageDefinition,
|
&mRuleMessageDefinition,
|
||||||
&mRuleEncryptedDefinition,
|
&mRuleEncryptedDefinition,
|
||||||
}
|
}
|
||||||
|
|
@ -59,6 +59,11 @@ var (
|
||||||
},
|
},
|
||||||
Actions: []*Action{
|
Actions: []*Action{
|
||||||
{Kind: NotifyAction},
|
{Kind: NotifyAction},
|
||||||
|
{
|
||||||
|
Kind: SetTweakAction,
|
||||||
|
Tweak: SoundTweak,
|
||||||
|
Value: "default",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Kind: SetTweakAction,
|
Kind: SetTweakAction,
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
|
|
@ -88,6 +93,11 @@ var (
|
||||||
Tweak: HighlightTweak,
|
Tweak: HighlightTweak,
|
||||||
Value: false,
|
Value: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Kind: SetTweakAction,
|
||||||
|
Tweak: HighlightTweak,
|
||||||
|
Value: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
mRuleMessageDefinition = Rule{
|
mRuleMessageDefinition = Rule{
|
||||||
|
|
@ -101,7 +111,14 @@ var (
|
||||||
Pattern: "m.room.message",
|
Pattern: "m.room.message",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Actions: []*Action{{Kind: NotifyAction}},
|
Actions: []*Action{
|
||||||
|
{Kind: NotifyAction},
|
||||||
|
{
|
||||||
|
Kind: SetTweakAction,
|
||||||
|
Tweak: HighlightTweak,
|
||||||
|
Value: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
mRuleEncryptedDefinition = Rule{
|
mRuleEncryptedDefinition = Rule{
|
||||||
RuleID: MRuleEncrypted,
|
RuleID: MRuleEncrypted,
|
||||||
|
|
@ -114,6 +131,13 @@ var (
|
||||||
Pattern: "m.room.encrypted",
|
Pattern: "m.room.encrypted",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Actions: []*Action{{Kind: NotifyAction}},
|
Actions: []*Action{
|
||||||
|
{Kind: NotifyAction},
|
||||||
|
{
|
||||||
|
Kind: SetTweakAction,
|
||||||
|
Tweak: HighlightTweak,
|
||||||
|
Value: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -24,24 +24,28 @@ func TestRuleSetEvaluatorMatchEvent(t *testing.T) {
|
||||||
Default: false,
|
Default: false,
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
}
|
}
|
||||||
|
defaultRuleset := DefaultGlobalRuleSet("test", "test")
|
||||||
tsts := []struct {
|
tsts := []struct {
|
||||||
Name string
|
Name string
|
||||||
RuleSet RuleSet
|
RuleSet RuleSet
|
||||||
Want *Rule
|
Want *Rule
|
||||||
|
Event *gomatrixserverlib.Event
|
||||||
}{
|
}{
|
||||||
{"empty", RuleSet{}, nil},
|
{"empty", RuleSet{}, nil, ev},
|
||||||
{"defaultCanWin", RuleSet{Override: []*Rule{defaultEnabled}}, defaultEnabled},
|
{"defaultCanWin", RuleSet{Override: []*Rule{defaultEnabled}}, defaultEnabled, ev},
|
||||||
{"userWins", RuleSet{Override: []*Rule{defaultEnabled, userEnabled}}, userEnabled},
|
{"userWins", RuleSet{Override: []*Rule{defaultEnabled, userEnabled}}, userEnabled, ev},
|
||||||
{"defaultOverrideWins", RuleSet{Override: []*Rule{defaultEnabled}, Underride: []*Rule{userEnabled}}, defaultEnabled},
|
{"defaultOverrideWins", RuleSet{Override: []*Rule{defaultEnabled}, Underride: []*Rule{userEnabled}}, defaultEnabled, ev},
|
||||||
{"overrideContent", RuleSet{Override: []*Rule{userEnabled}, Content: []*Rule{userEnabled2}}, userEnabled},
|
{"overrideContent", RuleSet{Override: []*Rule{userEnabled}, Content: []*Rule{userEnabled2}}, userEnabled, ev},
|
||||||
{"overrideRoom", RuleSet{Override: []*Rule{userEnabled}, Room: []*Rule{userEnabled2}}, userEnabled},
|
{"overrideRoom", RuleSet{Override: []*Rule{userEnabled}, Room: []*Rule{userEnabled2}}, userEnabled, ev},
|
||||||
{"overrideSender", RuleSet{Override: []*Rule{userEnabled}, Sender: []*Rule{userEnabled2}}, userEnabled},
|
{"overrideSender", RuleSet{Override: []*Rule{userEnabled}, Sender: []*Rule{userEnabled2}}, userEnabled, ev},
|
||||||
{"overrideUnderride", RuleSet{Override: []*Rule{userEnabled}, Underride: []*Rule{userEnabled2}}, userEnabled},
|
{"overrideUnderride", RuleSet{Override: []*Rule{userEnabled}, Underride: []*Rule{userEnabled2}}, userEnabled, ev},
|
||||||
|
{"reactions don't notify", *defaultRuleset, &mRuleReactionDefinition, mustEventFromJSON(t, `{"type":"m.reaction"}`)},
|
||||||
|
{"receipts don't notify", *defaultRuleset, nil, mustEventFromJSON(t, `{"type":"m.receipt"}`)},
|
||||||
}
|
}
|
||||||
for _, tst := range tsts {
|
for _, tst := range tsts {
|
||||||
t.Run(tst.Name, func(t *testing.T) {
|
t.Run(tst.Name, func(t *testing.T) {
|
||||||
rse := NewRuleSetEvaluator(nil, &tst.RuleSet)
|
rse := NewRuleSetEvaluator(fakeEvaluationContext{3}, &tst.RuleSet)
|
||||||
got, err := rse.MatchEvent(ev)
|
got, err := rse.MatchEvent(tst.Event)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("MatchEvent failed: %v", err)
|
t.Fatalf("MatchEvent failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -128,7 +132,7 @@ func TestConditionMatches(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, tst := range tsts {
|
for _, tst := range tsts {
|
||||||
t.Run(tst.Name, func(t *testing.T) {
|
t.Run(tst.Name, func(t *testing.T) {
|
||||||
got, err := conditionMatches(&tst.Cond, mustEventFromJSON(t, tst.EventJSON), &fakeEvaluationContext{})
|
got, err := conditionMatches(&tst.Cond, mustEventFromJSON(t, tst.EventJSON), &fakeEvaluationContext{2})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("conditionMatches failed: %v", err)
|
t.Fatalf("conditionMatches failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
@ -139,10 +143,10 @@ func TestConditionMatches(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type fakeEvaluationContext struct{}
|
type fakeEvaluationContext struct{ memberCount int }
|
||||||
|
|
||||||
func (fakeEvaluationContext) UserDisplayName() string { return "Dear User" }
|
func (fakeEvaluationContext) UserDisplayName() string { return "Dear User" }
|
||||||
func (fakeEvaluationContext) RoomMemberCount() (int, error) { return 2, nil }
|
func (f fakeEvaluationContext) RoomMemberCount() (int, error) { return f.memberCount, nil }
|
||||||
func (fakeEvaluationContext) HasPowerLevel(userID, levelKey string) (bool, error) {
|
func (fakeEvaluationContext) HasPowerLevel(userID, levelKey string) (bool, error) {
|
||||||
return userID == "@poweruser:example.com" && levelKey == "powerlevel", nil
|
return userID == "@poweruser:example.com" && levelKey == "powerlevel", nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import (
|
||||||
// kind and a tweaks map. Returns a nil map if it would have been
|
// kind and a tweaks map. Returns a nil map if it would have been
|
||||||
// empty.
|
// empty.
|
||||||
func ActionsToTweaks(as []*Action) (ActionKind, map[string]interface{}, error) {
|
func ActionsToTweaks(as []*Action) (ActionKind, map[string]interface{}, error) {
|
||||||
var kind ActionKind
|
kind := UnknownAction
|
||||||
tweaks := map[string]interface{}{}
|
tweaks := map[string]interface{}{}
|
||||||
|
|
||||||
for _, a := range as {
|
for _, a := range as {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue