Fix new style Diaspora Magic Envelope payload data

New style Diaspora Magic Envelope didn't require or like payload data to be cut to 60 char lines, as the legacy protocol does. Fixed to not cut lines.
merge-requests/130/head
Jason Robinson 2016-09-14 22:04:02 +03:00
rodzic 054f2b60e0
commit c1a37a7a91
3 zmienionych plików z 23 dodań i 41 usunięć

Wyświetl plik

@ -1,3 +1,8 @@
## [unreleased]
### Fixed
* New style Diaspora Magic Envelope didn't require or like payload data to be cut to 60 char lines, as the legacy protocol does. Fixed to not cut lines.
## [0.6.0] - 2016-09-13
### Added

Wyświetl plik

@ -28,20 +28,11 @@ class MagicEnvelope(object):
self.doc = None
self.payload = None
def _encode_payload(self):
"""Encode the payload and wrap it to 60 char lines."""
self.payload = urlsafe_b64encode(self.payload).decode("ascii")
self.payload = '\n'.join(
[self.payload[start:start + 60] for start in range(0, len(self.payload), 60)]
)
self.payload += "\n"
return self.payload
def create_payload(self):
"""Create the payload doc.
Returns:
bytes
str
"""
doc = etree.fromstring(self.message)
if self.wrap_payload:
@ -50,6 +41,7 @@ class MagicEnvelope(object):
post.append(doc)
doc = wrap
self.payload = etree.tostring(doc, encoding="utf-8")
self.payload = urlsafe_b64encode(self.payload).decode("ascii")
return self.payload
def _build_signature(self):
@ -70,7 +62,6 @@ class MagicEnvelope(object):
etree.SubElement(self.doc, "{%s}encoding" % self.nsmap["me"]).text = 'base64url'
etree.SubElement(self.doc, "{%s}alg" % self.nsmap["me"]).text = 'RSA-SHA256'
self.create_payload()
self._encode_payload()
etree.SubElement(self.doc, "{%s}data" % self.nsmap["me"],
{"type": "application/xml"}).text = self.payload
signature, key_id = self._build_signature()

Wyświetl plik

@ -30,7 +30,8 @@ class TestMagicEnvelope(object):
wrap_payload=True,
)
payload = env.create_payload()
assert payload == b"<XML><post><status_message><foo>bar</foo></status_message></post></XML>"
assert payload == "PFhNTD48cG9zdD48c3RhdHVzX21lc3NhZ2U-PGZvbz5iYXI8L2Zvbz48L3N0YXR1c19tZXNzYWdlPjwvcG9zdD4" \
"8L1hNTD4="
def test_create_payload(self):
env = MagicEnvelope(
@ -39,17 +40,7 @@ class TestMagicEnvelope(object):
author_handle="foobar@example.com"
)
payload = env.create_payload()
assert payload == b"<status_message><foo>bar</foo></status_message>"
def test_encode_payload(self):
env = MagicEnvelope(
message="<status_message><foo>bar</foo></status_message>",
private_key="key",
author_handle="foobar@example.com"
)
env.create_payload()
payload = env._encode_payload()
assert payload == "PHN0YXR1c19tZXNzYWdlPjxmb28-YmFyPC9mb28-PC9zdGF0dXNfbWVzc2Fn\nZT4=\n"
assert payload == "PHN0YXR1c19tZXNzYWdlPjxmb28-YmFyPC9mb28-PC9zdGF0dXNfbWVzc2FnZT4="
def test_build_signature(self):
env = MagicEnvelope(
@ -58,14 +49,12 @@ class TestMagicEnvelope(object):
author_handle="foobar@example.com"
)
env.create_payload()
env._encode_payload()
signature, key_id = env._build_signature()
assert signature == b"RAfiBBrk0OzPbmh6xE7wMRe7ir-qprZ7zk5VDGfopc6rfATFNbNB2FWH" \
b"FdvJfoky9ORNvfUoiFmtbMG7kmmFHgpQdUl_OU81lKb7NG6-aq2ZRVDQ" \
b"T46UYat1ssdqkkynqywowdyEGVUxxalFkOHWuYajmpc7ajt_G8xXjMDU" \
b"Ctt0VUFXepxshd24ZWRXO1RQK4bFr7X9-d26Ho3kLuB1VB_pYYbxJQCZl" \
b"m0EDlFj7vktl0zibswMFyRqiacwu8zec_HR4x8yMkF_zSNJsnnLq6ch4ad6" \
b"r83LOVk3Yvdxinb61spHEjr2zvPWExEgUt4Jcpc07aZRUKCJVfFXFYAGnA=="
assert signature == b'Cmk08MR4Tp8r9eVybD1hORcR_8NLRVxAu0biOfJbkI1xLx1c480zJ720cpVyKaF9CxVjW3lvlvRz' \
b'5YbswMv0izPzfHpXoWTXH-4UPrXaGYyJnrNvqEB2UWn4iHKJ2Rerto8sJY2b95qbXD6Nq75EoBNu' \
b'b5P7DYc16ENhp38YwBRnrBEvNOewddpOpEBVobyNB7no_QR8c_xkXie-hUDFNwI0z7vax9HkaBFb' \
b'vEmzFPMZAAdWyjxeGiWiqY0t2ZdZRCPTezy66X6Q0qc4I8kfT-Mt1ctjGmNMoJ4Lgu-PrO5hSRT4' \
b'QBAVyxaog5w-B0PIPuC-mUW5SZLsnX3_ZuwJww=='
assert key_id == b"Zm9vYmFyQGV4YW1wbGUuY29t"
def test_render(self):
@ -76,17 +65,14 @@ class TestMagicEnvelope(object):
)
env.build()
output = env.render()
assert output == '<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">' \
'<me:encoding>base64url</me:encoding><me:alg>RSA-SHA256</me:alg>' \
'<me:data type="application/xml">PHN0YXR1c19tZXNzYWdlPjxmb28-Ym' \
'FyPC9mb28-PC9zdGF0dXNfbWVzc2Fn\nZT4=\n</me:data>' \
'<me:sig key_id="Zm9vYmFyQGV4YW1wbGUuY29t">RAfiBBrk0OzPbmh6xE7wMRe' \
'7ir-qprZ7zk5VDGfopc6rfATFNbNB2FWHFdvJfoky9ORNvfUoiFmtbMG7kmmFHgp' \
'QdUl_OU81lKb7NG6-aq2ZRVDQT46UYat1ssdqkkynqywo' \
'wdyEGVUxxalFkOHWuYajmpc7ajt_G8xXjMDUCtt0VUFXepxshd24ZWRX' \
'O1RQK4bFr7X9-d26Ho3kLuB1VB_pYYbxJQCZlm0EDlFj7vktl0zibs' \
'wMFyRqiacwu8zec_HR4x8yMkF_zSNJsnnLq6ch4ad6r83LOVk3Yvdxin' \
'b61spHEjr2zvPWExEgUt4Jcpc07aZRUKCJVfFXFYAGnA==</me:sig></me:env>'
assert output == '<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env"><me:encoding>base64url' \
'</me:encoding><me:alg>RSA-SHA256</me:alg><me:data type="application/xml">' \
'PHN0YXR1c19tZXNzYWdlPjxmb28-YmFyPC9mb28-PC9zdGF0dXNfbWVzc2FnZT4=</me:data>' \
'<me:sig key_id="Zm9vYmFyQGV4YW1wbGUuY29t">Cmk08MR4Tp8r9eVybD1hORcR_8NLRVxAu0biOfJbk' \
'I1xLx1c480zJ720cpVyKaF9CxVjW3lvlvRz5YbswMv0izPzfHpXoWTXH-4UPrXaGYyJnrNvqEB2UWn4iHK' \
'J2Rerto8sJY2b95qbXD6Nq75EoBNub5P7DYc16ENhp38YwBRnrBEvNOewddpOpEBVobyNB7no_QR8c_xkX' \
'ie-hUDFNwI0z7vax9HkaBFbvEmzFPMZAAdWyjxeGiWiqY0t2ZdZRCPTezy66X6Q0qc4I8kfT-Mt1ctjGmNM' \
'oJ4Lgu-PrO5hSRT4QBAVyxaog5w-B0PIPuC-mUW5SZLsnX3_ZuwJww==</me:sig></me:env>'
env2 = MagicEnvelope(
message="<status_message><foo>bar</foo></status_message>",
private_key=get_dummy_private_key(),