summary refs log tree commit diff
path: root/synapse/appservice
diff options
context:
space:
mode:
authorKegan Dougal <kegan@matrix.org>2015-02-04 16:44:53 +0000
committerKegan Dougal <kegan@matrix.org>2015-02-04 16:44:53 +0000
commitaa8cce58bf3d3dbd1a0d512dbbd41b6545d2b1f9 (patch)
tree9412dc4bcda954f6c6ef1169c030481bffbf6800 /synapse/appservice
parentMerge branch 'develop' into application-services (diff)
downloadsynapse-aa8cce58bf3d3dbd1a0d512dbbd41b6545d2b1f9.tar.xz
Add query_user/alias APIs.
Diffstat (limited to 'synapse/appservice')
-rw-r--r--synapse/appservice/api.py47
1 files changed, 43 insertions, 4 deletions
diff --git a/synapse/appservice/api.py b/synapse/appservice/api.py
index 158aded66e..799ada96df 100644
--- a/synapse/appservice/api.py
+++ b/synapse/appservice/api.py
@@ -12,25 +12,64 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+from twisted.internet import defer
+from twisted.web.client import PartialDownloadError
 
+from synapse.http.client import SimpleHttpClient
 
-class ApplicationServiceApi(object):
+import logging
+import urllib
+
+logger = logging.getLogger(__name__)
+
+
+class ApplicationServiceApi(SimpleHttpClient):
     """This class manages HS -> AS communications, including querying and
     pushing.
     """
 
     def __init__(self,  hs):
+        super(ApplicationServiceApi, self).__init__(hs)
         self.hs_token = "_hs_token_"  # TODO extract hs token
 
+    @defer.inlineCallbacks
     def query_user(self, service, user_id):
-        pass
+        uri = service.url + ("/users/%s" % urllib.quote(user_id))
+        response = None
+        try:
+            response = yield self.get_json(uri, {
+                "access_token": self.hs_token
+            })
+            if response:  # just an empty json object
+                defer.returnValue(True)
+        except PartialDownloadError as e:
+            if e.status == 404:
+                defer.returnValue(False)
+                return
+            logger.warning("query_user to %s received %s", (uri, e.status))
 
+    @defer.inlineCallbacks
     def query_alias(self, service, alias):
-        pass
+        uri = service.url + ("/rooms/%s" % urllib.quote(alias))
+        response = None
+        try:
+            response = yield self.get_json(uri, {
+                "access_token": self.hs_token
+            })
+            logger.info("%s", response[0])
+            if response:  # just an empty json object
+                defer.returnValue(True)
+        except PartialDownloadError as e:
+            if e.status == 404:
+                defer.returnValue(False)
+                return
+            logger.warning("query_alias to %s received %s", (uri, e.status))
 
     def push_bulk(self, service, events):
         pass
 
+    @defer.inlineCallbacks
     def push(self, service, event):
-        pass
+        response = yield self.push_bulk(service, [event])
+        defer.returnValue(response)