diff --git a/CHANGELOG.md b/CHANGELOG.md index 09fe776..bf1018c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [unreleased] + +### Fixed +* Fix getting sender from a combination of legacy Diaspora encrypted payload and new entity names (for example `author`). This combination probably only existed in this library. + ## [0.12.0] - 2017-05-22 ### Backwards incompatible changes diff --git a/federation/protocols/diaspora/protocol.py b/federation/protocols/diaspora/protocol.py index c6bce54..e65d3ef 100644 --- a/federation/protocols/diaspora/protocol.py +++ b/federation/protocols/diaspora/protocol.py @@ -118,7 +118,9 @@ class Protocol(BaseProtocol): except AttributeError: # Look at the message, try various elements message = etree.fromstring(self.content) - element = message.find(".//sender_handle") + element = message.find(".//author") + if element is None: + element = message.find(".//sender_handle") if element is None: element = message.find(".//diaspora_handle") if element is None: @@ -137,6 +139,7 @@ class Protocol(BaseProtocol): else: body = urlsafe_b64decode(body.encode("ascii")) + logger.debug("diaspora.protocol.get_message_content: %s", body) return body def _get_encrypted_body(self, body): diff --git a/federation/utils/diaspora.py b/federation/utils/diaspora.py index 2b4073c..f127699 100644 --- a/federation/utils/diaspora.py +++ b/federation/utils/diaspora.py @@ -36,7 +36,12 @@ def retrieve_diaspora_webfinger(handle): :arg handle: Remote handle to retrieve :returns: ``XRD`` instance """ - hostmeta = retrieve_diaspora_host_meta(handle.split("@")[1]) + try: + host = handle.split("@")[1] + except AttributeError: + logger.warning("retrieve_diaspora_webfinger: invalid handle given: %s", handle) + return None + hostmeta = retrieve_diaspora_host_meta(host) if not hostmeta: return None url = hostmeta.find_link(rels="lrdd").template.replace("{uri}", quote(handle))