mirror of
https://github.com/element-hq/synapse
synced 2024-08-20 03:50:20 +00:00
Send history visibility on boundary changes
This commit is contained in:
parent
389d558a3b
commit
2ab0bf4b97
1 changed files with 26 additions and 0 deletions
|
@ -29,6 +29,14 @@ import logging
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
VISIBILITY_PRIORITY = (
|
||||||
|
"world_readable",
|
||||||
|
"shared",
|
||||||
|
"invited",
|
||||||
|
"joined",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class BaseHandler(object):
|
class BaseHandler(object):
|
||||||
"""
|
"""
|
||||||
Common base class for the event handlers.
|
Common base class for the event handlers.
|
||||||
|
@ -85,10 +93,28 @@ class BaseHandler(object):
|
||||||
else:
|
else:
|
||||||
visibility = "shared"
|
visibility = "shared"
|
||||||
|
|
||||||
|
if visibility not in VISIBILITY_PRIORITY:
|
||||||
|
visibility = "shared"
|
||||||
|
|
||||||
# if it was world_readable, it's easy: everyone can read it
|
# if it was world_readable, it's easy: everyone can read it
|
||||||
if visibility == "world_readable":
|
if visibility == "world_readable":
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
# Always allow history visibility events on boundaries. This is done
|
||||||
|
# by setting the effective visibility to the least restrictive
|
||||||
|
# of the old vs new.
|
||||||
|
if event.type == EventTypes.RoomHistoryVisibility:
|
||||||
|
prev_content = event.unsigned.get("prev_content", {})
|
||||||
|
prev_visibility = prev_content.get("history_visibility", None)
|
||||||
|
|
||||||
|
if prev_visibility not in VISIBILITY_PRIORITY:
|
||||||
|
prev_visibility = "shared"
|
||||||
|
|
||||||
|
new_priority = VISIBILITY_PRIORITY.index(visibility)
|
||||||
|
old_priority = VISIBILITY_PRIORITY.index(prev_visibility)
|
||||||
|
if old_priority < new_priority:
|
||||||
|
visibility = prev_visibility
|
||||||
|
|
||||||
# get the user's membership at the time of the event. (or rather,
|
# get the user's membership at the time of the event. (or rather,
|
||||||
# just *after* the event. Which means that people can see their
|
# just *after* the event. Which means that people can see their
|
||||||
# own join events, but not (currently) their own leave events.)
|
# own join events, but not (currently) their own leave events.)
|
||||||
|
|
Loading…
Reference in a new issue