No need to quote/encode the payload posted out

merge-requests/130/head
Jason Robinson 2016-09-04 01:50:12 +03:00
rodzic 163e93b19c
commit ebe5a71c26
3 zmienionych plików z 25 dodań i 17 usunięć

Wyświetl plik

@ -2,7 +2,7 @@
import logging import logging
from base64 import b64decode, urlsafe_b64decode, b64encode, urlsafe_b64encode from base64 import b64decode, urlsafe_b64decode, b64encode, urlsafe_b64encode
from json import loads, dumps from json import loads, dumps
from urllib.parse import unquote_plus, quote_plus, urlencode from urllib.parse import unquote_plus
from Crypto.Cipher import AES, PKCS1_v1_5 from Crypto.Cipher import AES, PKCS1_v1_5
from Crypto.Hash import SHA256 from Crypto.Hash import SHA256
@ -186,12 +186,8 @@ class Protocol(BaseProtocol):
"""Build POST data for sending out to remotes.""" """Build POST data for sending out to remotes."""
xml = entity.to_xml() xml = entity.to_xml()
self.init_message(xml, from_user.handle, from_user.private_key) self.init_message(xml, from_user.handle, from_user.private_key)
xml = quote_plus( xml = self.create_salmon_envelope(to_user.key)
self.create_salmon_envelope(to_user.key)) return {'xml': xml}
data = urlencode({
'xml': xml
})
return data
def init_message(self, message, author_username, private_key): def init_message(self, message, author_username, private_key):
""" """

Wyświetl plik

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from base64 import urlsafe_b64decode from base64 import urlsafe_b64decode
from unittest.mock import Mock from unittest.mock import Mock, patch
from xml.etree.ElementTree import ElementTree from xml.etree.ElementTree import ElementTree
from lxml import etree from lxml import etree
@ -8,6 +8,7 @@ import pytest
from federation.exceptions import EncryptedMessageError, NoSenderKeyFoundError, NoHeaderInMessageError from federation.exceptions import EncryptedMessageError, NoSenderKeyFoundError, NoHeaderInMessageError
from federation.protocols.diaspora.protocol import Protocol, identify_payload from federation.protocols.diaspora.protocol import Protocol, identify_payload
from federation.tests.factories.entities import DiasporaPostFactory
from federation.tests.fixtures.payloads import ENCRYPTED_DIASPORA_PAYLOAD, UNENCRYPTED_DIASPORA_PAYLOAD from federation.tests.fixtures.payloads import ENCRYPTED_DIASPORA_PAYLOAD, UNENCRYPTED_DIASPORA_PAYLOAD
@ -140,3 +141,15 @@ class TestDiasporaProtocol(DiasporaTestBase):
protocol.header = ElementTree() protocol.header = ElementTree()
protocol.content = "<content><handle>bob@example.com</handle></content>" protocol.content = "<content><handle>bob@example.com</handle></content>"
assert protocol.get_sender() == None assert protocol.get_sender() == None
@patch.object(Protocol, "init_message")
@patch.object(Protocol, "create_salmon_envelope")
def test_build_send(self, mock_create_salmon, mock_init_message):
mock_create_salmon.return_value = "xmldata"
protocol = self.init_protocol()
mock_entity_xml = Mock()
entity = Mock(to_xml=Mock(return_value=mock_entity_xml))
from_user = Mock(handle="foobar", private_key="barfoo")
data = protocol.build_send(from_user, Mock(), entity)
mock_init_message.assert_called_once_with(mock_entity_xml, from_user.handle, from_user.private_key)
assert data == {"xml": "xmldata"}

Wyświetl plik

@ -8,16 +8,15 @@ from federation.outbound import handle_create_payload
class TestHandleCreatePayloadBuildsAPayload(object): class TestHandleCreatePayloadBuildsAPayload(object):
def test_handle_create_payload_builds_an_xml(self): @patch("federation.outbound.Protocol")
from_user = Mock(private_key=RSA.generate(2048), handle="foobar@domain.tld") def test_handle_create_payload_builds_an_xml(self, mock_protocol_class):
to_user = Mock(key=RSA.generate(2048).publickey()) mock_protocol = Mock()
mock_protocol_class.return_value = mock_protocol
from_user = Mock()
to_user = Mock()
entity = DiasporaPost() entity = DiasporaPost()
data = handle_create_payload(from_user, to_user, entity) handle_create_payload(from_user, to_user, entity)
assert len(data) > 0 mock_protocol.build_send.assert_called_once_with(from_user=from_user, to_user=to_user, entity=entity)
parts = data.split("=")
assert len(parts) == 2
assert parts[0] == "xml"
assert len(parts[1]) > 0
@patch("federation.outbound.get_outbound_entity") @patch("federation.outbound.get_outbound_entity")
def test_handle_create_payload_calls_get_outbound_entity(self, mock_get_outbound_entity): def test_handle_create_payload_calls_get_outbound_entity(self, mock_get_outbound_entity):