mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 10:46:06 -04:00
Add basic impl for room history ACL on GET /messages client API
This commit is contained in:
parent
6825eef955
commit
1a60545626
3 changed files with 95 additions and 3 deletions
|
@ -113,11 +113,42 @@ class MessageHandler(BaseHandler):
|
|||
"room_key", next_key
|
||||
)
|
||||
|
||||
if not events:
|
||||
defer.returnValue({
|
||||
"chunk": [],
|
||||
"start": pagin_config.from_token.to_string(),
|
||||
"end": next_token.to_string(),
|
||||
})
|
||||
|
||||
states = yield self.store.get_state_for_events(
|
||||
room_id, [e.event_id for e in events],
|
||||
)
|
||||
|
||||
events_and_states = zip(events, states)
|
||||
|
||||
def allowed(event_and_state):
|
||||
_, state = event_and_state
|
||||
|
||||
membership = state.get((EventTypes.Member, user_id), None)
|
||||
if membership and membership.membership == Membership.JOIN:
|
||||
return True
|
||||
|
||||
history = state.get((EventTypes.RoomHistoryVisibility, ''), None)
|
||||
if history and history.content["visibility"] == "after_join":
|
||||
return False
|
||||
|
||||
events_and_states = filter(allowed, events_and_states)
|
||||
events = [
|
||||
ev
|
||||
for ev, _ in events_and_states
|
||||
]
|
||||
|
||||
time_now = self.clock.time_msec()
|
||||
|
||||
chunk = {
|
||||
"chunk": [
|
||||
serialize_event(e, time_now, as_client_event) for e in events
|
||||
serialize_event(e, time_now, as_client_event)
|
||||
for e in events
|
||||
],
|
||||
"start": pagin_config.from_token.to_string(),
|
||||
"end": next_token.to_string(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue