diff --git a/federation/tests/fixtures/payloads/diaspora.py b/federation/tests/fixtures/payloads/diaspora.py index 3fb1fba..8bd3669 100644 --- a/federation/tests/fixtures/payloads/diaspora.py +++ b/federation/tests/fixtures/payloads/diaspora.py @@ -10,6 +10,15 @@ DIASPORA_PUBLIC_PAYLOAD = """ """ +DIASPORA_RESHARE_PAYLOAD = """ + + PHN0YXR1c19tZXNzYWdlPgogIDxhdXRob3I-YXJ0c291bmQyQGRpYXNwLmV1PC9hdXRob3I-CiAgPGd1aWQ-NjI2NGNjNzAyOGM5MDEzNzQyODk0MDYxODYyYjhlN2I8L2d1aWQ-CiAgPGNyZWF0ZWRfYXQ-MjAxOS0wMy0xNFQyMDo1NToxMlo8L2NyZWF0ZWRfYXQ-CiAgPHB1YmxpYz50cnVlPC9wdWJsaWM-CiAgPHRleHQ-KipQbGVhc2Ugc3RheSBvZmYgdGhlIGdyYXNzIC4uLiBvcioqJiN4RDsKIVtdKGh0dHBzOi8vNjYubWVkaWEudHVtYmxyLmNvbS9kNGViMTMyMTZlZWY5ODE1ZjMzNTBhZDk1OTk5MmYxYy90dW1ibHJfcG80aXRjNzJKbjF5M3F1d25vMV81MDAuanBnKSYjeEQ7CiNzdGF5b2ZmPC90ZXh0Pgo8L3N0YXR1c19tZXNzYWdlPg== + base64url + RSA-SHA256 + VWvuHE-HNgQGoCUqlNOEzl4qmrW3hl5qv4CwFu3-WXHeaB2ULGNDDbqO2sWE5R4TFjT-3WNLyma1QnL3dnozmnzdUT1DnL_Il2BwTTEUa3qHl1qaepikPWF_VKDTez-NJUzQCOFGENZcBSTfBy7yP0dErHhewaLXcXg37nCLyTN2elftE7x80BDXMZouApIMht2NvSwH91tIRw474Tuce2316JtVEdGhiGgzZ5iIF7BycUKw4Redxdc2RPvgJNWWqvgO6jYyc7rgzRtj1a_K7gA30Y280k6DkwNut8tCcUqU1FCN5AWT2S_vF8DIG3MWEBtqs7lDxDcjKBcQsXS9IY9sSwKr7kfT6wh6weHr2EbBv9ZPtbEL3_PY_orGLoz7MeJrO9bY2K59SptAs66esNJaqtQvlnbYXB8i6xLLWsTBc9t9WEx1EsBzLN5gak58evUoQVtVXQZ2kdR_rYR0U1dhVDWihL2fc_x7dkR2W8QTZKXPbdQwfday6msSOqQLWQ7NzJTh5djvkapY6Clu-ka_mMi7Avm0bzK5bEoGVUQidRM6Gq_e6hoPvq5J3-0SyAacQvP1sa9XEMHhvdumlnFPuwrcLHRb2utWlUS2L5BjXSlOt-k-HhSXFi5ClxFJL_-LqPeMOgCS07ogfeN_ZHfwNTMDdToVkBPi11sM0PY= + +""" + DIASPORA_ENCRYPTED_PAYLOAD = """{ "aes_key": "...", "encrypted_magic_envelope": "..." diff --git a/federation/tests/protocols/diaspora/test_protocol.py b/federation/tests/protocols/diaspora/test_protocol.py index c6d95e2..75069f6 100644 --- a/federation/tests/protocols/diaspora/test_protocol.py +++ b/federation/tests/protocols/diaspora/test_protocol.py @@ -8,7 +8,8 @@ from federation.entities.diaspora.mappers import get_outbound_entity from federation.exceptions import NoSenderKeyFoundError, SignatureVerificationError from federation.protocols.diaspora.protocol import Protocol, identify_request from federation.tests.fixtures.keys import PUBKEY, get_dummy_private_key -from federation.tests.fixtures.payloads import DIASPORA_PUBLIC_PAYLOAD, DIASPORA_ENCRYPTED_PAYLOAD +from federation.tests.fixtures.payloads import DIASPORA_PUBLIC_PAYLOAD, DIASPORA_ENCRYPTED_PAYLOAD, \ + DIASPORA_RESHARE_PAYLOAD from federation.types import RequestType @@ -100,6 +101,9 @@ class TestDiasporaProtocol(DiasporaTestBase): def test_identify_payload_with_other_payload(self): assert identify_request(RequestType(body="foobar not a diaspora protocol")) is False + def test_identify_payload_with_reshare(self): + assert identify_request(RequestType(body=DIASPORA_RESHARE_PAYLOAD)) is True + @patch("federation.protocols.diaspora.protocol.MagicEnvelope") def test_build_send_does_right_calls(self, mock_me): mock_render = Mock(return_value="rendered") diff --git a/federation/tests/utils/test_diaspora.py b/federation/tests/utils/test_diaspora.py index 04b5283..9a86e5e 100644 --- a/federation/tests/utils/test_diaspora.py +++ b/federation/tests/utils/test_diaspora.py @@ -7,6 +7,7 @@ from lxml import html from federation.entities.base import Profile from federation.hostmeta.generators import DiasporaHostMeta, generate_hcard from federation.tests.fixtures.payloads import DIASPORA_PUBLIC_PAYLOAD, DIASPORA_WEBFINGER_JSON, DIASPORA_WEBFINGER +from federation.types import RequestType from federation.utils.diaspora import ( retrieve_diaspora_hcard, retrieve_diaspora_host_meta, _get_element_text_or_none, _get_element_attr_or_none, parse_profile_from_hcard, retrieve_and_parse_profile, retrieve_and_parse_content, @@ -146,7 +147,7 @@ class TestRetrieveAndParseContent: entity = retrieve_and_parse_content( guid="eggs", handle="user@example.com", entity_type="spam", sender_key_fetcher=sum, ) - mock_handle.assert_called_once_with(DIASPORA_PUBLIC_PAYLOAD, sender_key_fetcher=sum) + mock_handle.assert_called_once_with(RequestType(body=DIASPORA_PUBLIC_PAYLOAD), sender_key_fetcher=sum) assert entity == "entity" @patch("federation.utils.diaspora.fetch_document", return_value=(None, None, Exception())) diff --git a/federation/utils/diaspora.py b/federation/utils/diaspora.py index e61f6ab..d86c8c8 100644 --- a/federation/utils/diaspora.py +++ b/federation/utils/diaspora.py @@ -8,6 +8,7 @@ from lxml import html from xrd import XRD from federation.inbound import handle_receive +from federation.types import RequestType from federation.utils.network import fetch_document from federation.utils.text import validate_handle @@ -179,7 +180,8 @@ def retrieve_and_parse_content( url = get_fetch_content_endpoint(domain, entity_type.lower(), guid) document, status_code, error = fetch_document(url) if status_code == 200: - _sender, _protocol, entities = handle_receive(document, sender_key_fetcher=sender_key_fetcher) + request = RequestType(body=document) + _sender, _protocol, entities = handle_receive(request, sender_key_fetcher=sender_key_fetcher) if len(entities) > 1: logger.warning("retrieve_and_parse_content - more than one entity parsed from remote even though we" "expected only one! ID %s", guid)