diff --git a/cmdclient/console.py b/cmdclient/console.py
index f997b7539c..4cb604e796 100755
--- a/cmdclient/console.py
+++ b/cmdclient/console.py
@@ -409,10 +409,9 @@ class SynapseCmd(cmd.Cmd):
def do_send(self, line):
"""Sends a message. "send <roomid> <body>" """
args = self._parse(line, ["roomid", "body"])
- msg_id = "m%s" % int(time.time())
- path = "/rooms/%s/messages/%s/%s" % (urllib.quote(args["roomid"]),
- self._usr(),
- msg_id)
+ txn_id = "txn%s" % int(time.time())
+ path = "/rooms/%s/send/m.room.message/%s" % (urllib.quote(args["roomid"]),
+ txn_id)
body_json = {
"msgtype": "m.text",
"body": args["body"]
diff --git a/synapse/rest/room.py b/synapse/rest/room.py
index 27a622b57d..e00f74cf19 100644
--- a/synapse/rest/room.py
+++ b/synapse/rest/room.py
@@ -228,54 +228,6 @@ class JoinRoomAliasServlet(RestServlet):
defer.returnValue((200, ret_dict))
-class MessageRestServlet(RestServlet):
- PATTERN = client_path_pattern("/rooms/(?P<room_id>[^/]*)/messages/"
- + "(?P<sender_id>[^/]*)/(?P<msg_id>[^/]*)$")
-
- def get_event_type(self):
- return MessageEvent.TYPE
-
- @defer.inlineCallbacks
- def on_GET(self, request, room_id, sender_id, msg_id):
- user = yield self.auth.get_user_by_req(request)
-
- msg_handler = self.handlers.message_handler
- msg = yield msg_handler.get_message(room_id=urllib.unquote(room_id),
- sender_id=urllib.unquote(sender_id),
- msg_id=msg_id,
- user_id=user.to_string(),
- )
-
- if not msg:
- raise SynapseError(404, "Message not found.",
- errcode=Codes.NOT_FOUND)
-
- defer.returnValue((200, json.loads(msg.content)))
-
- @defer.inlineCallbacks
- def on_PUT(self, request, room_id, sender_id, msg_id):
- user = yield self.auth.get_user_by_req(request)
-
- if user.to_string() != urllib.unquote(sender_id):
- raise SynapseError(403, "Must send messages as yourself.",
- errcode=Codes.FORBIDDEN)
-
- content = _parse_json(request)
-
- event = self.event_factory.create_event(
- etype=self.get_event_type(),
- room_id=urllib.unquote(room_id),
- user_id=user.to_string(),
- msg_id=msg_id,
- content=content
- )
-
- msg_handler = self.handlers.message_handler
- yield msg_handler.send_message(event)
-
- defer.returnValue((200, ""))
-
-
class FeedbackRestServlet(RestServlet):
PATTERN = client_path_pattern(
"/rooms/(?P<room_id>[^/]*)/messages/" +
@@ -495,7 +447,6 @@ def register_txn_path(servlet, regex_string, http_server, with_get=False):
def register_servlets(hs, http_server):
RoomStateEventRestServlet(hs).register(http_server)
- MessageRestServlet(hs).register(http_server)
FeedbackRestServlet(hs).register(http_server)
RoomCreateRestServlet(hs).register(http_server)
RoomMemberListRestServlet(hs).register(http_server)
diff --git a/tests/rest/test_events.py b/tests/rest/test_events.py
index 4025e14581..7bc05dc2b6 100644
--- a/tests/rest/test_events.py
+++ b/tests/rest/test_events.py
@@ -181,7 +181,7 @@ class EventStreamPermissionsTestCase(RestTestCase):
room_id = "!rid1:test"
yield self.create_room_as(room_id, self.other_user,
tok=self.other_token)
- yield self.send(room_id, self.other_user, tok=self.other_token)
+ yield self.send(room_id, tok=self.other_token)
# invited to room (expect no content for room)
yield self.invite(room_id, src=self.other_user, targ=self.user_id,
diff --git a/tests/rest/test_rooms.py b/tests/rest/test_rooms.py
index 8514d6ba21..f18c506a7d 100644
--- a/tests/rest/test_rooms.py
+++ b/tests/rest/test_rooms.py
@@ -83,8 +83,8 @@ class RoomPermissionsTestCase(RestTestCase):
is_public=True)
# send a message in one of the rooms
- self.created_rmid_msg_path = ("/rooms/%s/messages/%s/midaaa1" %
- (self.created_rmid, self.rmcreator_id))
+ self.created_rmid_msg_path = ("/rooms/%s/send/m.room.message/a1" %
+ (self.created_rmid))
(code, response) = yield self.mock_resource.trigger(
"PUT",
self.created_rmid_msg_path,
@@ -138,14 +138,14 @@ class RoomPermissionsTestCase(RestTestCase):
@defer.inlineCallbacks
def test_send_message(self):
msg_content = '{"msgtype":"m.text","body":"hello"}'
- send_msg_path = ("/rooms/%s/messages/%s/mid1" %
- (self.created_rmid, self.user_id))
+ send_msg_path = ("/rooms/%s/send/m.room.message/mid1" %
+ (self.created_rmid))
# send message in uncreated room, expect 403
(code, response) = yield self.mock_resource.trigger(
"PUT",
- "/rooms/%s/messages/%s/mid1" %
- (self.uncreated_rmid, self.user_id), msg_content)
+ "/rooms/%s/send/m.room.message/mid2" %
+ (self.uncreated_rmid), msg_content)
self.assertEquals(403, code, msg=str(response))
# send message in created room not joined (no state), expect 403
@@ -875,9 +875,8 @@ class RoomMessagesTestCase(RestTestCase):
@defer.inlineCallbacks
def test_invalid_puts(self):
- path = "/rooms/%s/messages/%s/mid1" % (
- urllib.quote(self.room_id), self.user_id
- )
+ path = "/rooms/%s/send/m.room.message/mid1" % (
+ urllib.quote(self.room_id))
# missing keys or invalid json
(code, response) = yield self.mock_resource.trigger("PUT",
path, '{}')
@@ -905,9 +904,8 @@ class RoomMessagesTestCase(RestTestCase):
@defer.inlineCallbacks
def test_rooms_messages_sent(self):
- path = "/rooms/%s/messages/%s/mid1" % (
- urllib.quote(self.room_id), self.user_id
- )
+ path = "/rooms/%s/send/m.room.message/mid1" % (
+ urllib.quote(self.room_id))
content = '{"body":"test","msgtype":{"type":"a"}}'
(code, response) = yield self.mock_resource.trigger("PUT", path, content)
@@ -923,9 +921,8 @@ class RoomMessagesTestCase(RestTestCase):
# self.assert_dict(json.loads(content), response)
# m.text message type
- path = "/rooms/%s/messages/%s/mid2" % (
- urllib.quote(self.room_id), self.user_id
- )
+ path = "/rooms/%s/send/m.room.message/mid2" % (
+ urllib.quote(self.room_id))
content = '{"body":"test2","msgtype":"m.text"}'
(code, response) = yield self.mock_resource.trigger("PUT", path, content)
self.assertEquals(200, code, msg=str(response))
@@ -933,11 +930,3 @@ class RoomMessagesTestCase(RestTestCase):
# (code, response) = yield self.mock_resource.trigger("GET", path, None)
# self.assertEquals(200, code, msg=str(response))
# self.assert_dict(json.loads(content), response)
-
- # trying to send message in different user path
- path = "/rooms/%s/messages/%s/mid2" % (
- urllib.quote(self.room_id), "invalid" + self.user_id
- )
- content = '{"body":"test2","msgtype":"m.text"}'
- (code, response) = yield self.mock_resource.trigger("PUT", path, content)
- self.assertEquals(403, code, msg=str(response))
diff --git a/tests/rest/utils.py b/tests/rest/utils.py
index bc8bff0f1a..590d12f155 100644
--- a/tests/rest/utils.py
+++ b/tests/rest/utils.py
@@ -99,14 +99,14 @@ class RestTestCase(unittest.TestCase):
defer.returnValue(response)
@defer.inlineCallbacks
- def send(self, room_id, sender_id, body=None, msg_id=None, tok=None,
+ def send(self, room_id, body=None, txn_id=None, tok=None,
expect_code=200):
- if msg_id is None:
- msg_id = "m%s" % (str(time.time()))
+ if txn_id is None:
+ txn_id = "m%s" % (str(time.time()))
if body is None:
body = "body_text_here"
- path = "/rooms/%s/messages/%s/%s" % (room_id, sender_id, msg_id)
+ path = "/rooms/%s/send/m.room.message/%s" % (room_id, txn_id)
content = '{"msgtype":"m.text","body":"%s"}' % body
if tok:
path = path + "?access_token=%s" % tok
diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js
index fe5f120aaf..2286485605 100644
--- a/webclient/components/matrix/matrix-service.js
+++ b/webclient/components/matrix/matrix-service.js
@@ -162,12 +162,12 @@ angular.module('matrixService', [])
return doRequest("GET", path, undefined, {});
},
- sendMessage: function(room_id, msg_id, content) {
+ sendMessage: function(room_id, txn_id, content) {
// The REST path spec
- var path = "/rooms/$room_id/messages/$from/$msg_id";
+ var path = "/rooms/$room_id/send/m.room.message/$txn_id";
- if (!msg_id) {
- msg_id = "m" + new Date().getTime();
+ if (!txn_id) {
+ txn_id = "m" + new Date().getTime();
}
// Like the cmd client, escape room ids
@@ -175,8 +175,7 @@ angular.module('matrixService', [])
// Customize it
path = path.replace("$room_id", room_id);
- path = path.replace("$from", config.user_id);
- path = path.replace("$msg_id", msg_id);
+ path = path.replace("$txn_id", txn_id);
return doRequest("PUT", path, undefined, content);
},
|