diff options
author | David Baker <dbkr@matrix.org> | 2014-09-03 18:25:17 +0100 |
---|---|---|
committer | David Baker <dbkr@matrix.org> | 2014-09-03 18:25:17 +0100 |
commit | d72ce4da64416eb10224e6a6b55aecdd27967b6b (patch) | |
tree | ec86c93b1ebaf0ebb11f9e9d2a5377f608ab98b2 /synapse/rest/directory.py | |
parent | Make registering and logging in with a threepid work in the webclient. (diff) | |
parent | Fix ban path (diff) | |
download | synapse-d72ce4da64416eb10224e6a6b55aecdd27967b6b.tar.xz |
Merge branch 'develop' of github.com:matrix-org/synapse into develop
Conflicts: synapse/http/client.py
Diffstat (limited to 'synapse/rest/directory.py')
-rw-r--r-- | synapse/rest/directory.py | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/synapse/rest/directory.py b/synapse/rest/directory.py index dc347652a0..18df7c8d8b 100644 --- a/synapse/rest/directory.py +++ b/synapse/rest/directory.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2014 matrix.org +# Copyright 2014 OpenMarket Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -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) @@ -54,7 +57,7 @@ class ClientDirectoryServer(RestServlet): logger.debug("Got room name: %s", room_alias.to_string()) room_id = content["room_id"] - servers = content["servers"] + servers = content["servers"] if "servers" in content else None logger.debug("Got room_id: %s", room_id) logger.debug("Got servers: %s", servers) @@ -68,7 +71,20 @@ class ClientDirectoryServer(RestServlet): yield dir_handler.create_association( room_alias, room_id, servers ) + except SynapseError as e: + raise e except: 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) |