aboutsummaryrefslogtreecommitdiff
path: root/syncapi/internal/history_visibility.go
diff options
context:
space:
mode:
authorSam Wedgwood <28223854+swedgwood@users.noreply.github.com>2023-08-24 16:43:51 +0100
committerGitHub <noreply@github.com>2023-08-24 16:43:51 +0100
commit9b5be6b9c552a221e1a6f67d1e632ffc76591d4c (patch)
tree43751bca5b9a7b1cce8d9ae9ad04f3822a686403 /syncapi/internal/history_visibility.go
parenta721294e2b339b45fe84995deb756bfe66804c45 (diff)
[pseudoIDs] More pseudo ID fixes - Part 2 (#3181)
Fixes include: - Translating state keys that contain user IDs to their respective room keys for both querying and sending state events - **NOTE**: there may be design discussion needed on what should happen when sender keys cannot be found for users - A simple fix for kicking guests from rooms properly - Logic for boundary history visibilities was slightly off (I'm surprised this only manifested in pseudo ID room versions) Signed-off-by: `Sam Wedgwood <sam@wedgwood.dev>`
Diffstat (limited to 'syncapi/internal/history_visibility.go')
-rw-r--r--syncapi/internal/history_visibility.go28
1 files changed, 17 insertions, 11 deletions
diff --git a/syncapi/internal/history_visibility.go b/syncapi/internal/history_visibility.go
index 91a2d63c..7aae9fd3 100644
--- a/syncapi/internal/history_visibility.go
+++ b/syncapi/internal/history_visibility.go
@@ -163,17 +163,23 @@ func ApplyHistoryVisibilityFilter(
// by setting the effective evVis to the least restrictive
// of the old vs new.
// https://spec.matrix.org/v1.3/client-server-api/#server-behaviour-5
- if hisVis, err := ev.HistoryVisibility(); err == nil {
- prevHisVis := gjson.GetBytes(ev.Unsigned(), "prev_content.history_visibility").String()
- oldPrio, ok := historyVisibilityPriority[gomatrixserverlib.HistoryVisibility(prevHisVis)]
- // if we can't get the previous history visibility, default to shared.
- if !ok {
- oldPrio = historyVisibilityPriority[gomatrixserverlib.HistoryVisibilityShared]
- }
- // no OK check, since this should have been validated when setting the value
- newPrio := historyVisibilityPriority[hisVis]
- if oldPrio < newPrio {
- evVis.visibility = gomatrixserverlib.HistoryVisibility(prevHisVis)
+ if ev.Type() == spec.MRoomHistoryVisibility {
+ hisVis, err := ev.HistoryVisibility()
+
+ if err == nil && hisVis != "" {
+ prevHisVis := gjson.GetBytes(ev.Unsigned(), "prev_content.history_visibility").String()
+ oldPrio, ok := historyVisibilityPriority[gomatrixserverlib.HistoryVisibility(prevHisVis)]
+ // if we can't get the previous history visibility, default to shared.
+ if !ok {
+ oldPrio = historyVisibilityPriority[gomatrixserverlib.HistoryVisibilityShared]
+ }
+ // no OK check, since this should have been validated when setting the value
+ newPrio := historyVisibilityPriority[hisVis]
+ if oldPrio < newPrio {
+ evVis.visibility = gomatrixserverlib.HistoryVisibility(prevHisVis)
+ } else {
+ evVis.visibility = hisVis
+ }
}
}
// do the actual check