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
|
## [0.6.0] - 2016-09-13
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -28,20 +28,11 @@ class MagicEnvelope(object):
|
||||||
self.doc = None
|
self.doc = None
|
||||||
self.payload = 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):
|
def create_payload(self):
|
||||||
"""Create the payload doc.
|
"""Create the payload doc.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
bytes
|
str
|
||||||
"""
|
"""
|
||||||
doc = etree.fromstring(self.message)
|
doc = etree.fromstring(self.message)
|
||||||
if self.wrap_payload:
|
if self.wrap_payload:
|
||||||
|
@ -50,6 +41,7 @@ class MagicEnvelope(object):
|
||||||
post.append(doc)
|
post.append(doc)
|
||||||
doc = wrap
|
doc = wrap
|
||||||
self.payload = etree.tostring(doc, encoding="utf-8")
|
self.payload = etree.tostring(doc, encoding="utf-8")
|
||||||
|
self.payload = urlsafe_b64encode(self.payload).decode("ascii")
|
||||||
return self.payload
|
return self.payload
|
||||||
|
|
||||||
def _build_signature(self):
|
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}encoding" % self.nsmap["me"]).text = 'base64url'
|
||||||
etree.SubElement(self.doc, "{%s}alg" % self.nsmap["me"]).text = 'RSA-SHA256'
|
etree.SubElement(self.doc, "{%s}alg" % self.nsmap["me"]).text = 'RSA-SHA256'
|
||||||
self.create_payload()
|
self.create_payload()
|
||||||
self._encode_payload()
|
|
||||||
etree.SubElement(self.doc, "{%s}data" % self.nsmap["me"],
|
etree.SubElement(self.doc, "{%s}data" % self.nsmap["me"],
|
||||||
{"type": "application/xml"}).text = self.payload
|
{"type": "application/xml"}).text = self.payload
|
||||||
signature, key_id = self._build_signature()
|
signature, key_id = self._build_signature()
|
||||||
|
|
|
@ -30,7 +30,8 @@ class TestMagicEnvelope(object):
|
||||||
wrap_payload=True,
|
wrap_payload=True,
|
||||||
)
|
)
|
||||||
payload = env.create_payload()
|
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):
|
def test_create_payload(self):
|
||||||
env = MagicEnvelope(
|
env = MagicEnvelope(
|
||||||
|
@ -39,17 +40,7 @@ class TestMagicEnvelope(object):
|
||||||
author_handle="foobar@example.com"
|
author_handle="foobar@example.com"
|
||||||
)
|
)
|
||||||
payload = env.create_payload()
|
payload = env.create_payload()
|
||||||
assert payload == b"<status_message><foo>bar</foo></status_message>"
|
assert payload == "PHN0YXR1c19tZXNzYWdlPjxmb28-YmFyPC9mb28-PC9zdGF0dXNfbWVzc2FnZT4="
|
||||||
|
|
||||||
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"
|
|
||||||
|
|
||||||
def test_build_signature(self):
|
def test_build_signature(self):
|
||||||
env = MagicEnvelope(
|
env = MagicEnvelope(
|
||||||
|
@ -58,14 +49,12 @@ class TestMagicEnvelope(object):
|
||||||
author_handle="foobar@example.com"
|
author_handle="foobar@example.com"
|
||||||
)
|
)
|
||||||
env.create_payload()
|
env.create_payload()
|
||||||
env._encode_payload()
|
|
||||||
signature, key_id = env._build_signature()
|
signature, key_id = env._build_signature()
|
||||||
assert signature == b"RAfiBBrk0OzPbmh6xE7wMRe7ir-qprZ7zk5VDGfopc6rfATFNbNB2FWH" \
|
assert signature == b'Cmk08MR4Tp8r9eVybD1hORcR_8NLRVxAu0biOfJbkI1xLx1c480zJ720cpVyKaF9CxVjW3lvlvRz' \
|
||||||
b"FdvJfoky9ORNvfUoiFmtbMG7kmmFHgpQdUl_OU81lKb7NG6-aq2ZRVDQ" \
|
b'5YbswMv0izPzfHpXoWTXH-4UPrXaGYyJnrNvqEB2UWn4iHKJ2Rerto8sJY2b95qbXD6Nq75EoBNu' \
|
||||||
b"T46UYat1ssdqkkynqywowdyEGVUxxalFkOHWuYajmpc7ajt_G8xXjMDU" \
|
b'b5P7DYc16ENhp38YwBRnrBEvNOewddpOpEBVobyNB7no_QR8c_xkXie-hUDFNwI0z7vax9HkaBFb' \
|
||||||
b"Ctt0VUFXepxshd24ZWRXO1RQK4bFr7X9-d26Ho3kLuB1VB_pYYbxJQCZl" \
|
b'vEmzFPMZAAdWyjxeGiWiqY0t2ZdZRCPTezy66X6Q0qc4I8kfT-Mt1ctjGmNMoJ4Lgu-PrO5hSRT4' \
|
||||||
b"m0EDlFj7vktl0zibswMFyRqiacwu8zec_HR4x8yMkF_zSNJsnnLq6ch4ad6" \
|
b'QBAVyxaog5w-B0PIPuC-mUW5SZLsnX3_ZuwJww=='
|
||||||
b"r83LOVk3Yvdxinb61spHEjr2zvPWExEgUt4Jcpc07aZRUKCJVfFXFYAGnA=="
|
|
||||||
assert key_id == b"Zm9vYmFyQGV4YW1wbGUuY29t"
|
assert key_id == b"Zm9vYmFyQGV4YW1wbGUuY29t"
|
||||||
|
|
||||||
def test_render(self):
|
def test_render(self):
|
||||||
|
@ -76,17 +65,14 @@ class TestMagicEnvelope(object):
|
||||||
)
|
)
|
||||||
env.build()
|
env.build()
|
||||||
output = env.render()
|
output = env.render()
|
||||||
assert output == '<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env">' \
|
assert output == '<me:env xmlns:me="http://salmon-protocol.org/ns/magic-env"><me:encoding>base64url' \
|
||||||
'<me:encoding>base64url</me:encoding><me:alg>RSA-SHA256</me:alg>' \
|
'</me:encoding><me:alg>RSA-SHA256</me:alg><me:data type="application/xml">' \
|
||||||
'<me:data type="application/xml">PHN0YXR1c19tZXNzYWdlPjxmb28-Ym' \
|
'PHN0YXR1c19tZXNzYWdlPjxmb28-YmFyPC9mb28-PC9zdGF0dXNfbWVzc2FnZT4=</me:data>' \
|
||||||
'FyPC9mb28-PC9zdGF0dXNfbWVzc2Fn\nZT4=\n</me:data>' \
|
'<me:sig key_id="Zm9vYmFyQGV4YW1wbGUuY29t">Cmk08MR4Tp8r9eVybD1hORcR_8NLRVxAu0biOfJbk' \
|
||||||
'<me:sig key_id="Zm9vYmFyQGV4YW1wbGUuY29t">RAfiBBrk0OzPbmh6xE7wMRe' \
|
'I1xLx1c480zJ720cpVyKaF9CxVjW3lvlvRz5YbswMv0izPzfHpXoWTXH-4UPrXaGYyJnrNvqEB2UWn4iHK' \
|
||||||
'7ir-qprZ7zk5VDGfopc6rfATFNbNB2FWHFdvJfoky9ORNvfUoiFmtbMG7kmmFHgp' \
|
'J2Rerto8sJY2b95qbXD6Nq75EoBNub5P7DYc16ENhp38YwBRnrBEvNOewddpOpEBVobyNB7no_QR8c_xkX' \
|
||||||
'QdUl_OU81lKb7NG6-aq2ZRVDQT46UYat1ssdqkkynqywo' \
|
'ie-hUDFNwI0z7vax9HkaBFbvEmzFPMZAAdWyjxeGiWiqY0t2ZdZRCPTezy66X6Q0qc4I8kfT-Mt1ctjGmNM' \
|
||||||
'wdyEGVUxxalFkOHWuYajmpc7ajt_G8xXjMDUCtt0VUFXepxshd24ZWRX' \
|
'oJ4Lgu-PrO5hSRT4QBAVyxaog5w-B0PIPuC-mUW5SZLsnX3_ZuwJww==</me:sig></me:env>'
|
||||||
'O1RQK4bFr7X9-d26Ho3kLuB1VB_pYYbxJQCZlm0EDlFj7vktl0zibs' \
|
|
||||||
'wMFyRqiacwu8zec_HR4x8yMkF_zSNJsnnLq6ch4ad6r83LOVk3Yvdxin' \
|
|
||||||
'b61spHEjr2zvPWExEgUt4Jcpc07aZRUKCJVfFXFYAGnA==</me:sig></me:env>'
|
|
||||||
env2 = MagicEnvelope(
|
env2 = MagicEnvelope(
|
||||||
message="<status_message><foo>bar</foo></status_message>",
|
message="<status_message><foo>bar</foo></status_message>",
|
||||||
private_key=get_dummy_private_key(),
|
private_key=get_dummy_private_key(),
|
||||||
|
|
Ładowanie…
Reference in New Issue