summary refs log tree commit diff
path: root/synapse/http/client.py
diff options
context:
space:
mode:
authorDavid Baker <dbkr@matrix.org>2014-09-03 18:22:27 +0100
committerDavid Baker <dbkr@matrix.org>2014-09-03 18:22:27 +0100
commitd6ecbbdf0ad4fb49d189044ebf73f333fdd323dc (patch)
tree00757748fadc3da07cc74a24b8b1ad38f162ea69 /synapse/http/client.py
parentMerge branch 'master' into develop (diff)
downloadsynapse-d6ecbbdf0ad4fb49d189044ebf73f333fdd323dc.tar.xz
Add support for registering with a threepid to the HS (get credentials from the client and check them against an ID server).
Diffstat (limited to 'synapse/http/client.py')
-rw-r--r--synapse/http/client.py40
1 files changed, 35 insertions, 5 deletions
diff --git a/synapse/http/client.py b/synapse/http/client.py
index 093bdf0e3f..5a5e40a26e 100644
--- a/synapse/http/client.py
+++ b/synapse/http/client.py
@@ -15,7 +15,7 @@
 
 
 from twisted.internet import defer, reactor
-from twisted.web.client import _AgentBase, _URI, readBody
+from twisted.web.client import _AgentBase, _URI, readBody, FileBodyProducer
 from twisted.web.http_headers import Headers
 
 from synapse.http.endpoint import matrix_endpoint
@@ -25,6 +25,8 @@ from syutil.jsonutil import encode_canonical_json
 
 from synapse.api.errors import CodeMessageException
 
+from StringIO import StringIO
+
 import json
 import logging
 import urllib
@@ -156,6 +158,26 @@ class TwistedHttpClient(HttpClient):
         defer.returnValue(json.loads(body))
 
     @defer.inlineCallbacks
+    def post_urlencoded_get_json(self, destination, path, args={}):
+        if destination in _destination_mappings:
+            destination = _destination_mappings[destination]
+
+        logger.debug("post_urlencoded_get_json args: %s", args)
+        query_bytes = urllib.urlencode(args, True)
+
+        response = yield self._create_request(
+            destination.encode("ascii"),
+            "POST",
+            path.encode("ascii"),
+            producer=FileBodyProducer(StringIO(urllib.urlencode(args))),
+            headers_dict={"Content-Type": ["application/x-www-form-urlencoded"]}
+        )
+
+        body = yield readBody(response)
+
+        defer.returnValue(json.loads(body))
+
+    @defer.inlineCallbacks
     def _create_request(self, destination, method, path_bytes, param_bytes=b"",
                         query_bytes=b"", producer=None, headers_dict={}):
         """ Creates and sends a request to the given url
@@ -178,10 +200,7 @@ class TwistedHttpClient(HttpClient):
         retries_left = 5
 
         # TODO: setup and pass in an ssl_context to enable TLS
-        endpoint = matrix_endpoint(
-            reactor, destination, timeout=10,
-            ssl_context_factory=self.hs.tls_context_factory
-        )
+        endpoint = self._getEndpoint(reactor, destination);
 
         while True:
             try:
@@ -223,6 +242,17 @@ class TwistedHttpClient(HttpClient):
 
         defer.returnValue(response)
 
+    def _getEndpoint(self, reactor, destination):
+        return matrix_endpoint(
+            reactor, destination, timeout=10,
+            ssl_context_factory=self.hs.tls_context_factory
+        )
+
+
+class PlainHttpClient(TwistedHttpClient):
+    def _getEndpoint(self, reactor, destination):
+        return matrix_endpoint(reactor, destination, timeout=10)
+    
 
 def _print_ex(e):
     if hasattr(e, "reasons") and e.reasons: