Stub out GET presence requests in the frontend proxy (#7545)

We don't really make any promises about returning accurate presence data when
presence is disabled, so we may as well just return a static response, rather
than making the master handle a request.
This commit is contained in:
Richard van der Hoff 2020-05-21 14:36:46 +01:00 committed by GitHub
parent d74cdc1a42
commit 0bbbd10513
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 17 deletions

1
changelog.d/7545.misc Normal file
View File

@ -0,0 +1 @@
Make worker processes return a stubbed-out response to `GET /presence` requests.

View File

@ -26,7 +26,7 @@ from twisted.web.resource import NoResource
import synapse import synapse
import synapse.events import synapse.events
from synapse.api.errors import HttpResponseException, SynapseError from synapse.api.errors import SynapseError
from synapse.api.urls import ( from synapse.api.urls import (
CLIENT_API_PREFIX, CLIENT_API_PREFIX,
FEDERATION_PREFIX, FEDERATION_PREFIX,
@ -137,31 +137,18 @@ logger = logging.getLogger("synapse.app.generic_worker")
class PresenceStatusStubServlet(RestServlet): class PresenceStatusStubServlet(RestServlet):
"""If presence is disabled this servlet can be used to stub out setting """If presence is disabled this servlet can be used to stub out setting
presence status, while proxying the getters to the master instance. presence status.
""" """
PATTERNS = client_patterns("/presence/(?P<user_id>[^/]*)/status") PATTERNS = client_patterns("/presence/(?P<user_id>[^/]*)/status")
def __init__(self, hs): def __init__(self, hs):
super(PresenceStatusStubServlet, self).__init__() super(PresenceStatusStubServlet, self).__init__()
self.http_client = hs.get_simple_http_client()
self.auth = hs.get_auth() self.auth = hs.get_auth()
self.main_uri = hs.config.worker_main_http_uri
async def on_GET(self, request, user_id): async def on_GET(self, request, user_id):
# Pass through the auth headers, if any, in case the access token await self.auth.get_user_by_req(request)
# is there. return 200, {"presence": "offline"}
auth_headers = request.requestHeaders.getRawHeaders("Authorization", [])
headers = {"Authorization": auth_headers}
try:
result = await self.http_client.get_json(
self.main_uri + request.uri.decode("ascii"), headers=headers
)
except HttpResponseException as e:
raise e.to_synapse_error()
return 200, result
async def on_PUT(self, request, user_id): async def on_PUT(self, request, user_id):
await self.auth.get_user_by_req(request) await self.auth.get_user_by_req(request)