mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-26 19:47:05 +03:00
Allow guest access to room initialSync
This commit is contained in:
parent
5d098a32c9
commit
f15ba926cc
2 changed files with 34 additions and 24 deletions
|
@ -456,7 +456,7 @@ class MessageHandler(BaseHandler):
|
||||||
defer.returnValue(ret)
|
defer.returnValue(ret)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def room_initial_sync(self, user_id, room_id, pagin_config=None):
|
def room_initial_sync(self, user_id, room_id, pagin_config=None, is_guest=False):
|
||||||
"""Capture the a snapshot of a room. If user is currently a member of
|
"""Capture the a snapshot of a room. If user is currently a member of
|
||||||
the room this will be what is currently in the room. If the user left
|
the room this will be what is currently in the room. If the user left
|
||||||
the room this will be what was in the room when they left.
|
the room this will be what was in the room when they left.
|
||||||
|
@ -473,15 +473,19 @@ class MessageHandler(BaseHandler):
|
||||||
A JSON serialisable dict with the snapshot of the room.
|
A JSON serialisable dict with the snapshot of the room.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
member_event = yield self.auth.check_user_was_in_room(room_id, user_id)
|
membership, member_event_id = yield self._check_in_room_or_world_readable(
|
||||||
|
room_id,
|
||||||
|
user_id,
|
||||||
|
is_guest
|
||||||
|
)
|
||||||
|
|
||||||
if member_event.membership == Membership.JOIN:
|
if membership == Membership.JOIN:
|
||||||
result = yield self._room_initial_sync_joined(
|
result = yield self._room_initial_sync_joined(
|
||||||
user_id, room_id, pagin_config, member_event
|
user_id, room_id, pagin_config, membership, is_guest
|
||||||
)
|
)
|
||||||
elif member_event.membership == Membership.LEAVE:
|
elif membership == Membership.LEAVE:
|
||||||
result = yield self._room_initial_sync_parted(
|
result = yield self._room_initial_sync_parted(
|
||||||
user_id, room_id, pagin_config, member_event
|
user_id, room_id, pagin_config, membership, member_event_id, is_guest
|
||||||
)
|
)
|
||||||
|
|
||||||
private_user_data = []
|
private_user_data = []
|
||||||
|
@ -497,19 +501,19 @@ class MessageHandler(BaseHandler):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _room_initial_sync_parted(self, user_id, room_id, pagin_config,
|
def _room_initial_sync_parted(self, user_id, room_id, pagin_config,
|
||||||
member_event):
|
membership, member_event_id, is_guest):
|
||||||
room_state = yield self.store.get_state_for_events(
|
room_state = yield self.store.get_state_for_events(
|
||||||
[member_event.event_id], None
|
[member_event_id], None
|
||||||
)
|
)
|
||||||
|
|
||||||
room_state = room_state[member_event.event_id]
|
room_state = room_state[member_event_id]
|
||||||
|
|
||||||
limit = pagin_config.limit if pagin_config else None
|
limit = pagin_config.limit if pagin_config else None
|
||||||
if limit is None:
|
if limit is None:
|
||||||
limit = 10
|
limit = 10
|
||||||
|
|
||||||
stream_token = yield self.store.get_stream_token_for_event(
|
stream_token = yield self.store.get_stream_token_for_event(
|
||||||
member_event.event_id
|
member_event_id
|
||||||
)
|
)
|
||||||
|
|
||||||
messages, token = yield self.store.get_recent_events_for_room(
|
messages, token = yield self.store.get_recent_events_for_room(
|
||||||
|
@ -519,7 +523,7 @@ class MessageHandler(BaseHandler):
|
||||||
)
|
)
|
||||||
|
|
||||||
messages = yield self._filter_events_for_client(
|
messages = yield self._filter_events_for_client(
|
||||||
user_id, messages
|
user_id, messages, is_guest=is_guest
|
||||||
)
|
)
|
||||||
|
|
||||||
start_token = StreamToken(token[0], 0, 0, 0, 0)
|
start_token = StreamToken(token[0], 0, 0, 0, 0)
|
||||||
|
@ -528,7 +532,7 @@ class MessageHandler(BaseHandler):
|
||||||
time_now = self.clock.time_msec()
|
time_now = self.clock.time_msec()
|
||||||
|
|
||||||
defer.returnValue({
|
defer.returnValue({
|
||||||
"membership": member_event.membership,
|
"membership": membership,
|
||||||
"room_id": room_id,
|
"room_id": room_id,
|
||||||
"messages": {
|
"messages": {
|
||||||
"chunk": [serialize_event(m, time_now) for m in messages],
|
"chunk": [serialize_event(m, time_now) for m in messages],
|
||||||
|
@ -542,7 +546,7 @@ class MessageHandler(BaseHandler):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _room_initial_sync_joined(self, user_id, room_id, pagin_config,
|
def _room_initial_sync_joined(self, user_id, room_id, pagin_config,
|
||||||
member_event):
|
membership, is_guest):
|
||||||
current_state = yield self.state.get_current_state(
|
current_state = yield self.state.get_current_state(
|
||||||
room_id=room_id,
|
room_id=room_id,
|
||||||
)
|
)
|
||||||
|
@ -574,12 +578,14 @@ class MessageHandler(BaseHandler):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_presence():
|
def get_presence():
|
||||||
states = yield presence_handler.get_states(
|
states = {}
|
||||||
target_users=[UserID.from_string(m.user_id) for m in room_members],
|
if not is_guest:
|
||||||
auth_user=auth_user,
|
states = yield presence_handler.get_states(
|
||||||
as_event=True,
|
target_users=[UserID.from_string(m.user_id) for m in room_members],
|
||||||
check_auth=False,
|
auth_user=auth_user,
|
||||||
)
|
as_event=True,
|
||||||
|
check_auth=False,
|
||||||
|
)
|
||||||
|
|
||||||
defer.returnValue(states.values())
|
defer.returnValue(states.values())
|
||||||
|
|
||||||
|
@ -599,7 +605,7 @@ class MessageHandler(BaseHandler):
|
||||||
).addErrback(unwrapFirstError)
|
).addErrback(unwrapFirstError)
|
||||||
|
|
||||||
messages = yield self._filter_events_for_client(
|
messages = yield self._filter_events_for_client(
|
||||||
user_id, messages
|
user_id, messages, is_guest=is_guest, require_all_visible_for_guests=False
|
||||||
)
|
)
|
||||||
|
|
||||||
start_token = now_token.copy_and_replace("room_key", token[0])
|
start_token = now_token.copy_and_replace("room_key", token[0])
|
||||||
|
@ -607,8 +613,7 @@ class MessageHandler(BaseHandler):
|
||||||
|
|
||||||
time_now = self.clock.time_msec()
|
time_now = self.clock.time_msec()
|
||||||
|
|
||||||
defer.returnValue({
|
ret = {
|
||||||
"membership": member_event.membership,
|
|
||||||
"room_id": room_id,
|
"room_id": room_id,
|
||||||
"messages": {
|
"messages": {
|
||||||
"chunk": [serialize_event(m, time_now) for m in messages],
|
"chunk": [serialize_event(m, time_now) for m in messages],
|
||||||
|
@ -618,4 +623,8 @@ class MessageHandler(BaseHandler):
|
||||||
"state": state,
|
"state": state,
|
||||||
"presence": presence,
|
"presence": presence,
|
||||||
"receipts": receipts,
|
"receipts": receipts,
|
||||||
})
|
}
|
||||||
|
if not is_guest:
|
||||||
|
ret["membership"] = membership
|
||||||
|
|
||||||
|
defer.returnValue(ret)
|
||||||
|
|
|
@ -372,12 +372,13 @@ class RoomInitialSyncRestServlet(ClientV1RestServlet):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def on_GET(self, request, room_id):
|
def on_GET(self, request, room_id):
|
||||||
user, _, _ = yield self.auth.get_user_by_req(request)
|
user, _, is_guest = yield self.auth.get_user_by_req(request, allow_guest=True)
|
||||||
pagination_config = PaginationConfig.from_request(request)
|
pagination_config = PaginationConfig.from_request(request)
|
||||||
content = yield self.handlers.message_handler.room_initial_sync(
|
content = yield self.handlers.message_handler.room_initial_sync(
|
||||||
room_id=room_id,
|
room_id=room_id,
|
||||||
user_id=user.to_string(),
|
user_id=user.to_string(),
|
||||||
pagin_config=pagination_config,
|
pagin_config=pagination_config,
|
||||||
|
is_guest=is_guest,
|
||||||
)
|
)
|
||||||
defer.returnValue((200, content))
|
defer.returnValue((200, content))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue