mirror of
https://github.com/element-hq/dendrite.git
synced 2025-09-14 05:12:26 +03:00
[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>`
This commit is contained in:
parent
a721294e2b
commit
9b5be6b9c5
11 changed files with 865 additions and 36 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue