diff --git a/CHANGES.rst b/CHANGES.rst index dab9285f3..08efbbf24 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,13 +1,22 @@ +Changes in synapse 0.4.1 (2014-10-17) +===================================== +Webclient: + * Fix bug with display of timestamps. + Changes in synpase 0.4.0 (2014-10-17) ===================================== -This server includes changes to the federation protocol that is not backwards -compatible. +This release includes changes to the federation protocol and client-server API +that is not backwards compatible. -The Matrix specification has been moved to a seperate git repository. +The Matrix specification has been moved to a separate git repository: +http://github.com/matrix-org/matrix-doc + +You will also need an updated syutil and config. See UPGRADES.rst. Homeserver: - * Sign federation transactions. - * Rename timestamp keys in PDUs. + * Sign federation transactions to assert strong identity over federation. + * Rename timestamp keys in PDUs and events from 'ts' and 'hsob_ts' to 'origin_server_ts'. + Changes in synapse 0.3.4 (2014-09-25) ===================================== diff --git a/UPGRADE.rst b/UPGRADE.rst index 713fb9ae8..99ce1a2d3 100644 --- a/UPGRADE.rst +++ b/UPGRADE.rst @@ -1,3 +1,16 @@ +Upgrading to v0.4.0 +=================== + +This release needs an updated syutil version. Run:: + + python setup.py develop + +You will also need to upgrade your configuration as the signing key format has +changed. Run:: + + python -m synapse.app.homeserver --config-path --generate-config + + Upgrading to v0.3.0 =================== diff --git a/VERSION b/VERSION index 1d0ba9ea1..267577d47 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.0 +0.4.1 diff --git a/setup.py b/setup.py index 7a7e53af3..649ac8659 100755 --- a/setup.py +++ b/setup.py @@ -41,11 +41,12 @@ setup( "py-bcrypt", ], dependency_links=[ - "git+ssh://git@github.com/matrix-org/syutil.git#egg=syutil-0.0.2", + "https://github.com/matrix-org/syutil/tarball/v0.0.2#egg=syutil-0.0.2", ], setup_requires=[ "setuptools_trial", - "setuptools>=1.0.0", # Needs setuptools that supports git+ssh. It's not obvious when support for this was introduced. + "setuptools>=1.0.0", # Needs setuptools that supports git+ssh. + # TODO: Do we need this now? we don't use git+ssh. "mock" ], include_package_data=True, diff --git a/synapse/__init__.py b/synapse/__init__.py index 979eac08a..7067188c5 100644 --- a/synapse/__init__.py +++ b/synapse/__init__.py @@ -16,4 +16,4 @@ """ This is a reference implementation of a synapse home server. """ -__version__ = "0.4.0" +__version__ = "0.4.1" diff --git a/synapse/config/server.py b/synapse/config/server.py index d9d8d0e14..9332e4acd 100644 --- a/synapse/config/server.py +++ b/synapse/config/server.py @@ -94,7 +94,7 @@ class ServerConfig(Config): with open(args.signing_key_path, "w") as signing_key_file: syutil.crypto.signing_key.write_signing_keys( signing_key_file, - (syutil.crypto.SigningKey.generate("auto"),), + (syutil.crypto.signing_key.generate_singing_key("auto"),), ) else: signing_keys = cls.read_file(args.signing_key_path, "signing_key") diff --git a/synapse/handlers/register.py b/synapse/handlers/register.py index df562aa76..94b7890b5 100644 --- a/synapse/handlers/register.py +++ b/synapse/handlers/register.py @@ -15,6 +15,7 @@ """Contains functions for registering clients.""" from twisted.internet import defer +from twisted.python import log from synapse.types import UserID from synapse.api.errors import ( @@ -126,7 +127,7 @@ class RegistrationHandler(BaseHandler): try: threepid = yield self._threepid_from_creds(c) except: - logger.err() + log.err() raise RegistrationError(400, "Couldn't validate 3pid") if not threepid: diff --git a/synapse/http/client.py b/synapse/http/client.py index 316ca1ccb..46c90dbb7 100644 --- a/synapse/http/client.py +++ b/synapse/http/client.py @@ -101,7 +101,9 @@ class BaseHttpClient(object): while True: - producer = body_callback(method, url_bytes, headers_dict) + producer = None + if body_callback: + producer = body_callback(method, url_bytes, headers_dict) try: response = yield self.agent.request( @@ -312,6 +314,42 @@ class IdentityServerHttpClient(BaseHttpClient): defer.returnValue(json.loads(body)) + @defer.inlineCallbacks + def get_json(self, destination, path, args={}, retry_on_dns_fail=True): + """ Get's some json from the given host homeserver and path + + Args: + destination (str): The remote server to send the HTTP request + to. + path (str): The HTTP path. + args (dict): A dictionary used to create query strings, defaults to + None. + **Note**: The value of each key is assumed to be an iterable + and *not* a string. + + Returns: + Deferred: Succeeds when we get *any* HTTP response. + + The result of the deferred is a tuple of `(code, response)`, + where `response` is a dict representing the decoded JSON body. + """ + logger.debug("get_json args: %s", args) + + query_bytes = urllib.urlencode(args, True) + logger.debug("Query bytes: %s Retry DNS: %s", args, retry_on_dns_fail) + + response = yield self._create_request( + destination.encode("ascii"), + "GET", + path.encode("ascii"), + query_bytes=query_bytes, + retry_on_dns_fail=retry_on_dns_fail, + body_callback=None + ) + + body = yield readBody(response) + + defer.returnValue(json.loads(body)) class CaptchaServerHttpClient(MatrixHttpClient): """Separate HTTP client for talking to google's captcha servers"""