Merge pull request #51 from jaywink/fix-me

Fix new style Diaspora Magic Envelope payload data
merge-requests/130/head
Jason Robinson 2016-09-14 22:07:49 +03:00 zatwierdzone przez GitHub
commit 07ec0382ef
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(),