Added support for GET /events/$eventid with auth checks.
This commit is contained in:
parent
dfa0cd1d90
commit
c65885e166
|
@ -17,7 +17,7 @@ from .register import RegistrationHandler
|
||||||
from .room import (
|
from .room import (
|
||||||
MessageHandler, RoomCreationHandler, RoomMemberHandler, RoomListHandler
|
MessageHandler, RoomCreationHandler, RoomMemberHandler, RoomListHandler
|
||||||
)
|
)
|
||||||
from .events import EventStreamHandler
|
from .events import EventStreamHandler, EventHandler
|
||||||
from .federation import FederationHandler
|
from .federation import FederationHandler
|
||||||
from .login import LoginHandler
|
from .login import LoginHandler
|
||||||
from .profile import ProfileHandler
|
from .profile import ProfileHandler
|
||||||
|
@ -39,6 +39,7 @@ class Handlers(object):
|
||||||
self.room_creation_handler = RoomCreationHandler(hs)
|
self.room_creation_handler = RoomCreationHandler(hs)
|
||||||
self.room_member_handler = RoomMemberHandler(hs)
|
self.room_member_handler = RoomMemberHandler(hs)
|
||||||
self.event_stream_handler = EventStreamHandler(hs)
|
self.event_stream_handler = EventStreamHandler(hs)
|
||||||
|
self.event_handler = EventHandler(hs)
|
||||||
self.federation_handler = FederationHandler(hs)
|
self.federation_handler = FederationHandler(hs)
|
||||||
self.profile_handler = ProfileHandler(hs)
|
self.profile_handler = ProfileHandler(hs)
|
||||||
self.presence_handler = PresenceHandler(hs)
|
self.presence_handler = PresenceHandler(hs)
|
||||||
|
|
|
@ -144,3 +144,29 @@ class EventStreamHandler(BaseHandler):
|
||||||
self._stop_timer_per_user[auth_user] = (
|
self._stop_timer_per_user[auth_user] = (
|
||||||
self.clock.call_later(5, _later)
|
self.clock.call_later(5, _later)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class EventHandler(BaseHandler):
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def get_event(self, user, event_id):
|
||||||
|
"""Retrieve a single specified event.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user (synapse.types.UserID): The user requesting the event
|
||||||
|
event_id (str): The event ID to obtain.
|
||||||
|
Returns:
|
||||||
|
dict: An event, or None if there is no event matching this ID.
|
||||||
|
Raises:
|
||||||
|
SynapseError if there was a problem retrieving this event, or
|
||||||
|
AuthError if the user does not have the rights to inspect this
|
||||||
|
event.
|
||||||
|
"""
|
||||||
|
event = yield self.store.get_event(event_id)
|
||||||
|
|
||||||
|
if not event:
|
||||||
|
defer.returnValue(None)
|
||||||
|
return
|
||||||
|
|
||||||
|
yield self.auth.check(event, raises=True)
|
||||||
|
defer.returnValue(event)
|
||||||
|
|
|
@ -47,5 +47,22 @@ class EventStreamRestServlet(RestServlet):
|
||||||
return (200, {})
|
return (200, {})
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: Unit test gets, with and without auth, with different kinds of events.
|
||||||
|
class EventRestServlet(RestServlet):
|
||||||
|
PATTERN = client_path_pattern("/events/(?P<event_id>[^/]*)$")
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def on_GET(self, request, event_id):
|
||||||
|
auth_user = yield self.auth.get_user_by_req(request)
|
||||||
|
handler = self.handlers.event_handler
|
||||||
|
event = yield handler.get_event(auth_user, event_id)
|
||||||
|
|
||||||
|
if event:
|
||||||
|
defer.returnValue((200, event.get_dict()))
|
||||||
|
else:
|
||||||
|
defer.returnValue((404, "Event not found."))
|
||||||
|
|
||||||
|
|
||||||
def register_servlets(hs, http_server):
|
def register_servlets(hs, http_server):
|
||||||
EventStreamRestServlet(hs).register(http_server)
|
EventStreamRestServlet(hs).register(http_server)
|
||||||
|
EventRestServlet(hs).register(http_server)
|
||||||
|
|
|
@ -80,7 +80,6 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
[
|
[
|
||||||
"event_id",
|
"event_id",
|
||||||
"type",
|
"type",
|
||||||
"sender",
|
|
||||||
"room_id",
|
"room_id",
|
||||||
"content",
|
"content",
|
||||||
"unrecognized_keys"
|
"unrecognized_keys"
|
||||||
|
|
Loading…
Reference in New Issue