From 809ff9391dd536c715cd33a61dc5722ec6c8a843 Mon Sep 17 00:00:00 2001 From: Jonas Fentker Date: Fri, 2 Oct 2020 13:47:39 +0200 Subject: [PATCH 1/2] parse notification levels Signed-off-by: Jonas Fentker --- eventcontent.go | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/eventcontent.go b/eventcontent.go index f737d3ac..a4d521ef 100644 --- a/eventcontent.go +++ b/eventcontent.go @@ -332,6 +332,11 @@ func (c *PowerLevelContent) Defaults() { // https://github.com/matrix-org/synapse/blob/v0.18.5/synapse/api/auth.py#L991 c.EventsDefault = 0 c.StateDefault = 50 + // Default room notification level is 50 + // https://matrix.org/docs/spec/client_server/r0.6.1#m-room-power-levels + c.Notifications = map[string]int64{ + "room": 50, + } } @@ -343,15 +348,16 @@ func NewPowerLevelContentFromEvent(event Event) (c PowerLevelContent, err error) // We can't extract the JSON directly to the powerLevelContent because we // need to convert string values to int values. var content struct { - InviteLevel levelJSONValue `json:"invite"` - BanLevel levelJSONValue `json:"ban"` - KickLevel levelJSONValue `json:"kick"` - RedactLevel levelJSONValue `json:"redact"` - UserLevels map[string]levelJSONValue `json:"users"` - UsersDefaultLevel levelJSONValue `json:"users_default"` - EventLevels map[string]levelJSONValue `json:"events"` - StateDefaultLevel levelJSONValue `json:"state_default"` - EventDefaultLevel levelJSONValue `json:"event_default"` + InviteLevel levelJSONValue `json:"invite"` + BanLevel levelJSONValue `json:"ban"` + KickLevel levelJSONValue `json:"kick"` + RedactLevel levelJSONValue `json:"redact"` + UserLevels map[string]levelJSONValue `json:"users"` + UsersDefaultLevel levelJSONValue `json:"users_default"` + EventLevels map[string]levelJSONValue `json:"events"` + StateDefaultLevel levelJSONValue `json:"state_default"` + EventDefaultLevel levelJSONValue `json:"event_default"` + NotificationLevels map[string]levelJSONValue `json:"notifications"` } if err = json.Unmarshal(event.Content(), &content); err != nil { err = errorf("unparsable power_levels event content: %s", err.Error()) @@ -381,6 +387,13 @@ func NewPowerLevelContentFromEvent(event Event) (c PowerLevelContent, err error) c.Events[k] = v.value } + for k, v := range content.NotificationLevels { + if c.Notifications == nil { + c.Notifications = make(map[string]int64) + } + c.Notifications[k] = v.value + } + return } From cc6f467b108535041b71927c2c4c6c00c0867187 Mon Sep 17 00:00:00 2001 From: Jonas Fentker Date: Fri, 2 Oct 2020 14:04:38 +0200 Subject: [PATCH 2/2] add notification levels to TestEventPowerLevels Signed-off-by: Jonas Fentker --- event_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event_test.go b/event_test.go index a67d5353..f9ef9fc0 100644 --- a/event_test.go +++ b/event_test.go @@ -149,7 +149,7 @@ func TestEventHistoryVisibility(t *testing.T) { } func TestEventPowerLevels(t *testing.T) { - eventJSON := `{"auth_events":[["$BqcTUuCsN3g6Rj1z:localhost",{"sha256":"QHTrdwE/XVTmAWlxFwHPW7fp3JioRu6OBBRs+FI/at8"}],["$9fmIxbx4IX8w1JVo:localhost",{"sha256":"gee+f1VoNeYGGczs5lwnUO1qeKAh70Hw23ws+YfDYGY"}]],"content":{"ban":50,"events":null,"events_default":0,"invite":0,"kick":50,"redact":50,"state_default":50,"users":null,"users_default":0},"depth":4,"event_id":"$1570trwyGMovM5uU:localhost","hashes":{"sha256":"QvWo2OZufVTMUkPcYQinGVeeHEODWY6RUMaHRxdT31Y"},"origin":"localhost","origin_server_ts":0,"prev_events":[["$QAhQsLNIMdumtpOi:localhost",{"sha256":"RqoKwu8u8qL+wDoka23xvd7t9UoOXLRQse/bK3o9qLE"}]],"prev_state":[],"room_id":"!roomid:localhost","sender":"@userid:localhost","signatures":{"localhost":{"ed25519:auto":"0oPZsvPkbNNVwRrLAP+fEyxFRAIUh0Zn7NPH3LybNC8lMz0GyPtN1bKlTVQYMwZBTXCV795s+CEgoIX+M5gkAQ"}},"state_key":"","type":"m.room.power_levels"}` + eventJSON := `{"auth_events":[["$BqcTUuCsN3g6Rj1z:localhost",{"sha256":"QHTrdwE/XVTmAWlxFwHPW7fp3JioRu6OBBRs+FI/at8"}],["$9fmIxbx4IX8w1JVo:localhost",{"sha256":"gee+f1VoNeYGGczs5lwnUO1qeKAh70Hw23ws+YfDYGY"}]],"content":{"ban":50,"events":null,"events_default":0,"invite":0,"kick":50,"redact":50,"state_default":50,"users":null,"users_default":0,"notifications":{"room":50}},"depth":4,"event_id":"$1570trwyGMovM5uU:localhost","hashes":{"sha256":"QvWo2OZufVTMUkPcYQinGVeeHEODWY6RUMaHRxdT31Y"},"origin":"localhost","origin_server_ts":0,"prev_events":[["$QAhQsLNIMdumtpOi:localhost",{"sha256":"RqoKwu8u8qL+wDoka23xvd7t9UoOXLRQse/bK3o9qLE"}]],"prev_state":[],"room_id":"!roomid:localhost","sender":"@userid:localhost","signatures":{"localhost":{"ed25519:auto":"0oPZsvPkbNNVwRrLAP+fEyxFRAIUh0Zn7NPH3LybNC8lMz0GyPtN1bKlTVQYMwZBTXCV795s+CEgoIX+M5gkAQ"}},"state_key":"","type":"m.room.power_levels"}` event, err := NewEventFromTrustedJSON([]byte(eventJSON), false, RoomVersionV1) if err != nil { t.Fatal(err)