Switch Diaspora protocol to send new style entities

We've already accepted these on incoming payloads for a long time and so do all the other platforms now, so now we always send out entities with the new property names. This can break federation with really old servers that don't understand these keys yet.

Closes #59
merge-requests/130/head
Jason Robinson 2018-02-24 15:04:07 +02:00
rodzic aa8e8a7960
commit c15aa14e8e
4 zmienionych plików z 20 dodań i 16 usunięć

Wyświetl plik

@ -26,6 +26,10 @@
Parameter `to_user` is now `to_user_key` and thus instead of an object containing the `key` attribute it should now be an RSA public key object instance. This simplifies things since we only need the key from the user, nothing else.
* Switch Diaspora protocol to send new style entities ([related issue](https://github.com/jaywink/federation/issues/59))
We've already accepted these on incoming payloads for a long time and so do all the other platforms now, so now we always send out entities with the new property names. This can break federation with really old servers that don't understand these keys yet.
### Fixed
* Change unquote method used when preparing Diaspora XML payloads for verification ([related issue](https://github.com/jaywink/federation/issues/115))

Wyświetl plik

@ -117,7 +117,7 @@ class DiasporaComment(DiasporaRelayableMixin, Comment):
{"author_signature": self.signature},
{"parent_author_signature": self.parent_signature},
{"text": self.raw_content},
{"diaspora_handle": self.handle},
{"author": self.handle},
{"created_at": format_dt(self.created_at)},
])
return element
@ -131,9 +131,9 @@ class DiasporaPost(DiasporaEntityMixin, Post):
"""Convert to XML message."""
element = etree.Element(self._tag_name)
struct_to_xml(element, [
{"raw_message": self.raw_content},
{"text": self.raw_content},
{"guid": self.guid},
{"diaspora_handle": self.handle},
{"author": self.handle},
{"public": "true" if self.public else "false"},
{"created_at": format_dt(self.created_at)},
{"provider_display_name": self.provider_display_name},
@ -150,13 +150,13 @@ class DiasporaLike(DiasporaRelayableMixin, Reaction):
"""Convert to XML message."""
element = etree.Element(self._tag_name)
struct_to_xml(element, [
{"target_type": "Post"},
{"parent_type": "Post"},
{"guid": self.guid},
{"parent_guid": self.target_guid},
{"author_signature": self.signature},
{"parent_author_signature": self.parent_signature},
{"positive": "true"},
{"diaspora_handle": self.handle},
{"author": self.handle},
])
return element
@ -203,7 +203,7 @@ class DiasporaProfile(DiasporaEntityMixin, Profile):
"""Convert to XML message."""
element = etree.Element(self._tag_name)
struct_to_xml(element, [
{"diaspora_handle": self.handle},
{"author": self.handle},
{"first_name": self.name},
{"last_name": ""}, # Not used in Diaspora modern profiles
{"image_url": self.image_urls["large"]},
@ -289,7 +289,7 @@ class DiasporaReshare(DiasporaEntityMixin, Share):
{"provider_display_name": self.provider_display_name},
{"public": "true" if self.public else "false"},
# Some of our own not in Diaspora protocol
{"raw_content": self.raw_content},
{"text": self.raw_content},
{"entity_type": self.entity_type},
])
return element

Wyświetl plik

@ -24,8 +24,8 @@ class TestEntitiesConvertToXML:
assert result.tag == "status_message"
assert len(result.find("created_at").text) > 0
result.find("created_at").text = "" # timestamp makes testing painful
converted = b"<status_message><raw_message>raw_content</raw_message><guid>guid</guid>" \
b"<diaspora_handle>handle</diaspora_handle><public>true</public><created_at>" \
converted = b"<status_message><text>raw_content</text><guid>guid</guid>" \
b"<author>handle</author><public>true</public><created_at>" \
b"</created_at><provider_display_name>Socialhome</provider_display_name></status_message>"
assert etree.tostring(result) == converted
@ -40,7 +40,7 @@ class TestEntitiesConvertToXML:
result.find("created_at").text = "" # timestamp makes testing painful
converted = b"<comment><guid>guid</guid><parent_guid>target_guid</parent_guid>" \
b"<author_signature>signature</author_signature><parent_author_signature>" \
b"</parent_author_signature><text>raw_content</text><diaspora_handle>handle</diaspora_handle>" \
b"</parent_author_signature><text>raw_content</text><author>handle</author>" \
b"<created_at></created_at></comment>"
assert etree.tostring(result) == converted
@ -48,9 +48,9 @@ class TestEntitiesConvertToXML:
entity = DiasporaLike(guid="guid", target_guid="target_guid", handle="handle", signature="signature")
result = entity.to_xml()
assert result.tag == "like"
converted = b"<like><target_type>Post</target_type><guid>guid</guid><parent_guid>target_guid</parent_guid>" \
converted = b"<like><parent_type>Post</parent_type><guid>guid</guid><parent_guid>target_guid</parent_guid>" \
b"<author_signature>signature</author_signature><parent_author_signature>" \
b"</parent_author_signature><positive>true</positive><diaspora_handle>handle</diaspora_handle>" \
b"</parent_author_signature><positive>true</positive><author>handle</author>" \
b"</like>"
assert etree.tostring(result) == converted
@ -71,7 +71,7 @@ class TestEntitiesConvertToXML:
)
result = entity.to_xml()
assert result.tag == "profile"
converted = b"<profile><diaspora_handle>bob@example.com</diaspora_handle>" \
converted = b"<profile><author>bob@example.com</author>" \
b"<first_name>Bob Bobertson</first_name><last_name></last_name><image_url>urllarge</image_url>" \
b"<image_url_small>urlsmall</image_url_small><image_url_medium>urlmedium</image_url_medium>" \
b"<gender></gender><bio>foobar</bio><location></location><searchable>true</searchable>" \
@ -102,7 +102,7 @@ class TestEntitiesConvertToXML:
result.find("created_at").text = "" # timestamp makes testing painful
converted = "<reshare><author>%s</author><guid>%s</guid><created_at></created_at><root_author>%s" \
"</root_author><root_guid>%s</root_guid><provider_display_name>%s</provider_display_name>" \
"<public>%s</public><raw_content>%s</raw_content><entity_type>%s</entity_type></reshare>" % (
"<public>%s</public><text>%s</text><entity_type>%s</entity_type></reshare>" % (
entity.handle, entity.guid, entity.target_handle, entity.target_guid,
entity.provider_display_name, "true" if entity.public else "false", entity.raw_content,
entity.entity_type,

Wyświetl plik

@ -29,8 +29,8 @@ class TestGetFullXMLRepresentation:
entity = Post()
document = get_full_xml_representation(entity, "")
document = re.sub(r"<created_at>.*</created_at>", "", document) # Dates are annoying to compare
assert document == "<XML><post><status_message><raw_message></raw_message><guid></guid>" \
"<diaspora_handle></diaspora_handle><public>false</public>" \
assert document == "<XML><post><status_message><text></text><guid></guid>" \
"<author></author><public>false</public>" \
"<provider_display_name></provider_display_name></status_message></post></XML>"