Removed member list servlet: now using generic state paths.

This commit is contained in:
Kegan Dougal 2014-08-26 09:26:07 +01:00
parent f690b7b827
commit cab3095803
9 changed files with 53 additions and 106 deletions

View file

@ -18,9 +18,10 @@ from twisted.internet import defer
from base import RestServlet, client_path_pattern
from synapse.api.errors import SynapseError, Codes
from synapse.api.events.room import (RoomTopicEvent, MessageEvent,
RoomMemberEvent, FeedbackEvent)
from synapse.api.constants import Feedback, Membership
from synapse.api.events.room import (
MessageEvent, RoomMemberEvent, FeedbackEvent
)
from synapse.api.constants import Feedback
from synapse.api.streams import PaginationConfig
import json
@ -131,8 +132,8 @@ class RoomStateEventRestServlet(RestServlet):
data = yield msg_handler.get_room_data(
user_id=user.to_string(),
room_id=urllib.unquote(room_id),
event_type=event_type,
state_key=state_key,
event_type=urllib.unquote(event_type),
state_key=urllib.unquote(state_key),
)
if not data:
@ -142,6 +143,7 @@ class RoomStateEventRestServlet(RestServlet):
@defer.inlineCallbacks
def on_PUT(self, request, room_id, event_type, state_key):
user = yield self.auth.get_user_by_req(request)
event_type = urllib.unquote(event_type)
content = _parse_json(request)
@ -150,14 +152,20 @@ class RoomStateEventRestServlet(RestServlet):
content=content,
room_id=urllib.unquote(room_id),
user_id=user.to_string(),
state_key=state_key
state_key=urllib.unquote(state_key)
)
msg_handler = self.handlers.message_handler
yield msg_handler.store_room_data(
event=event
)
defer.returnValue((200, ""))
if event_type == RoomMemberEvent.TYPE:
# membership events are special
handler = self.handlers.room_member_handler
yield handler.change_membership(event)
defer.returnValue((200, ""))
else:
# store random bits of state
msg_handler = self.handlers.message_handler
yield msg_handler.store_room_data(
event=event
)
defer.returnValue((200, ""))
class JoinRoomAliasServlet(RestServlet):
@ -180,73 +188,6 @@ class JoinRoomAliasServlet(RestServlet):
defer.returnValue((200, ret_dict))
class RoomMemberRestServlet(RestServlet):
PATTERN = client_path_pattern("/rooms/(?P<room_id>[^/]*)/members/"
+ "(?P<target_user_id>[^/]*)/state$")
def get_event_type(self):
return RoomMemberEvent.TYPE
@defer.inlineCallbacks
def on_GET(self, request, room_id, target_user_id):
room_id = urllib.unquote(room_id)
user = yield self.auth.get_user_by_req(request)
handler = self.handlers.room_member_handler
member = yield handler.get_room_member(
room_id,
urllib.unquote(target_user_id),
user.to_string())
if not member:
raise SynapseError(404, "Member not found.",
errcode=Codes.NOT_FOUND)
defer.returnValue((200, member.content))
@defer.inlineCallbacks
def on_DELETE(self, request, roomid, target_user_id):
user = yield self.auth.get_user_by_req(request)
event = self.event_factory.create_event(
etype=self.get_event_type(),
target_user_id=urllib.unquote(target_user_id),
room_id=urllib.unquote(roomid),
user_id=user.to_string(),
membership=Membership.LEAVE,
content={"membership": Membership.LEAVE}
)
handler = self.handlers.room_member_handler
yield handler.change_membership(event)
defer.returnValue((200, ""))
@defer.inlineCallbacks
def on_PUT(self, request, roomid, target_user_id):
user = yield self.auth.get_user_by_req(request)
content = _parse_json(request)
if "membership" not in content:
raise SynapseError(400, "No membership key.",
errcode=Codes.BAD_JSON)
valid_membership_values = [Membership.JOIN, Membership.INVITE]
if (content["membership"] not in valid_membership_values):
raise SynapseError(400, "Membership value must be %s." % (
valid_membership_values,), errcode=Codes.BAD_JSON)
event = self.event_factory.create_event(
etype=self.get_event_type(),
target_user_id=urllib.unquote(target_user_id),
room_id=urllib.unquote(roomid),
user_id=user.to_string(),
membership=content["membership"],
content=content
)
handler = self.handlers.room_member_handler
yield handler.change_membership(event)
defer.returnValue((200, ""))
class MessageRestServlet(RestServlet):
PATTERN = client_path_pattern("/rooms/(?P<room_id>[^/]*)/messages/"
+ "(?P<sender_id>[^/]*)/(?P<msg_id>[^/]*)$")
@ -377,7 +318,7 @@ class RoomMemberListRestServlet(RestServlet):
user_id=user.to_string())
for event in members["chunk"]:
target_user = self.hs.parse_userid(event["target_user_id"])
target_user = self.hs.parse_userid(event["state_key"])
# Presence is an optional cache; don't fail if we can't fetch it
try:
presence_state = yield self.handlers.presence_handler.get_state(
@ -423,6 +364,7 @@ class RoomTriggerBackfill(RestServlet):
res = [event.get_dict() for event in events]
defer.returnValue((200, res))
def _parse_json(request):
try:
content = json.loads(request.content.read())
@ -436,7 +378,6 @@ def _parse_json(request):
def register_servlets(hs, http_server):
RoomStateEventRestServlet(hs).register(http_server)
RoomMemberRestServlet(hs).register(http_server)
MessageRestServlet(hs).register(http_server)
FeedbackRestServlet(hs).register(http_server)
RoomCreateRestServlet(hs).register(http_server)