kopia lustrzana https://gitlab.com/jaywink/federation
Merge pull request #51 from jaywink/fix-me
Fix new style Diaspora Magic Envelope payload datamerge-requests/130/head
commit
07ec0382ef
|
@ -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