summary refs log tree commit diff
path: root/synapse/rest
diff options
context:
space:
mode:
authorErik Johnston <erikj@jki.re>2016-09-08 16:04:22 +0100
committerGitHub <noreply@github.com>2016-09-08 16:04:22 +0100
commit257025ac89f1a71173d6262248e7344b7aba9984 (patch)
tree033ae6c9b7f837a383c575bb8cd7f89d5f71df17 /synapse/rest
parentMerge branch 'master' of github.com:matrix-org/synapse into develop (diff)
parentUse parse_string (diff)
downloadsynapse-257025ac89f1a71173d6262248e7344b7aba9984.tar.xz
Merge pull request #1082 from matrix-org/erikj/remote_public_rooms
Add server param to /publicRooms
Diffstat (limited to 'synapse/rest')
-rw-r--r--synapse/rest/client/v1/room.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/synapse/rest/client/v1/room.py b/synapse/rest/client/v1/room.py

index 0d81757010..3c933f1620 100644 --- a/synapse/rest/client/v1/room.py +++ b/synapse/rest/client/v1/room.py
@@ -23,7 +23,7 @@ from synapse.api.constants import EventTypes, Membership from synapse.api.filtering import Filter from synapse.types import UserID, RoomID, RoomAlias from synapse.events.utils import serialize_event -from synapse.http.servlet import parse_json_object_from_request +from synapse.http.servlet import parse_json_object_from_request, parse_string import logging import urllib @@ -295,15 +295,26 @@ class PublicRoomListRestServlet(ClientV1RestServlet): @defer.inlineCallbacks def on_GET(self, request): + server = parse_string(request, "server", default=None) + try: yield self.auth.get_user_by_req(request) - except AuthError: - # This endpoint isn't authed, but its useful to know who's hitting - # it if they *do* supply an access token - pass + except AuthError as e: + # We allow people to not be authed if they're just looking at our + # room list, but require auth when we proxy the request. + # In both cases we call the auth function, as that has the side + # effect of logging who issued this request if an access token was + # provided. + if server: + raise e + else: + pass handler = self.hs.get_room_list_handler() - data = yield handler.get_aggregated_public_room_list() + if server: + data = yield handler.get_remote_public_room_list(server) + else: + data = yield handler.get_aggregated_public_room_list() defer.returnValue((200, data))