diff options
author | Kegan Dougal <kegan@matrix.org> | 2014-09-03 16:27:01 +0100 |
---|---|---|
committer | Kegan Dougal <kegan@matrix.org> | 2014-09-03 16:27:01 +0100 |
commit | 581c54bebef865039352f4ec141c98413cb45f53 (patch) | |
tree | 4f249c2cbe11122152594a96eec1b2a59fb673d8 | |
parent | Fix up directory server to not require uploading room hosts. Update the room ... (diff) | |
download | synapse-581c54bebef865039352f4ec141c98413cb45f53.tar.xz |
Add exception handling to directory servlet, so we don't 500. Mark directory API as volatile in the api docs.
-rw-r--r-- | docs/client-server/swagger_matrix/api-docs-directory | 2 | ||||
-rw-r--r-- | synapse/rest/directory.py | 18 |
2 files changed, 18 insertions, 2 deletions
diff --git a/docs/client-server/swagger_matrix/api-docs-directory b/docs/client-server/swagger_matrix/api-docs-directory index 380ec3f477..ce12be8c96 100644 --- a/docs/client-server/swagger_matrix/api-docs-directory +++ b/docs/client-server/swagger_matrix/api-docs-directory @@ -13,6 +13,7 @@ { "method": "GET", "summary": "Get the room ID corresponding to this room alias.", + "notes": "Volatile: This API is likely to change.", "type": "DirectoryResponse", "nickname": "get_room_id_for_alias", "parameters": [ @@ -28,6 +29,7 @@ { "method": "PUT", "summary": "Create a new mapping from room alias to room ID.", + "notes": "Volatile: This API is likely to change.", "type": "void", "nickname": "add_room_alias", "parameters": [ diff --git a/synapse/rest/directory.py b/synapse/rest/directory.py index 29ace4f1d3..d02b15395b 100644 --- a/synapse/rest/directory.py +++ b/synapse/rest/directory.py @@ -16,6 +16,7 @@ from twisted.internet import defer +from synapse.api.errors import SynapseError, Codes from base import RestServlet, client_path_pattern import json @@ -44,8 +45,10 @@ class ClientDirectoryServer(RestServlet): @defer.inlineCallbacks def on_PUT(self, request, room_alias): - # TODO(erikj): Exceptions - content = json.loads(request.content.read()) + content = _parse_json(request) + if not "room_id" in content: + raise SynapseError(400, "Missing room_id key", + errcode=Codes.BAD_JSON) logger.debug("Got content: %s", content) @@ -72,3 +75,14 @@ class ClientDirectoryServer(RestServlet): logger.exception("Failed to create association") defer.returnValue((200, {})) + + +def _parse_json(request): + try: + content = json.loads(request.content.read()) + if type(content) != dict: + raise SynapseError(400, "Content must be a JSON object.", + errcode=Codes.NOT_JSON) + return content + except ValueError: + raise SynapseError(400, "Content not JSON.", errcode=Codes.NOT_JSON) |