1414# limitations under the License.
1515
1616from twisted .internet import defer
17+ from synapse .api .constants import EventTypes
18+ from synapse .api .errors import AuthError
1719
1820from synapse .util .logutils import log_function
1921from synapse .util .async import run_on_reactor , ObservableDeferred
@@ -346,9 +348,9 @@ def get_events_for(self, user, pagination_config, timeout,
346348
347349 room_ids = []
348350 if is_guest :
349- # TODO(daniel): Deal with non-room events too
350- only_room_events = True
351351 if guest_room_id :
352+ if not self ._is_world_readable (guest_room_id ):
353+ raise AuthError (403 , "Guest access not allowed" )
352354 room_ids = [guest_room_id ]
353355 else :
354356 rooms = yield self .store .get_rooms_for_user (user .to_string ())
@@ -361,6 +363,7 @@ def check_for_updates(before_token, after_token):
361363
362364 events = []
363365 end_token = from_token
366+
364367 for name , source in self .event_sources .sources .items ():
365368 keyname = "%s_key" % name
366369 before_id = getattr (before_token , keyname )
@@ -377,7 +380,7 @@ def check_for_updates(before_token, after_token):
377380 room_ids = room_ids ,
378381 )
379382
380- if is_guest :
383+ if name == "room" :
381384 room_member_handler = self .hs .get_handlers ().room_member_handler
382385 new_events = yield room_member_handler ._filter_events_for_client (
383386 user .to_string (),
@@ -403,6 +406,17 @@ def check_for_updates(before_token, after_token):
403406
404407 defer .returnValue (result )
405408
409+ @defer .inlineCallbacks
410+ def _is_world_readable (self , room_id ):
411+ state = yield self .hs .get_state_handler ().get_current_state (
412+ room_id ,
413+ EventTypes .RoomHistoryVisibility
414+ )
415+ if state and "history_visibility" in state .content :
416+ defer .returnValue (state .content ["history_visibility" ] == "world_readable" )
417+ else :
418+ defer .returnValue (False )
419+
406420 @log_function
407421 def remove_expired_streams (self ):
408422 time_now_ms = self .clock .time_msec ()
0 commit comments