kopia lustrzana https://gitlab.com/jaywink/federation
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
rodzic
054f2b60e0
commit
c1a37a7a91
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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(),
|
||||
|
|
Ładowanie…
Reference in New Issue