From c1a37a7a91287d2d58a2e63761c6327ac90ba5e5 Mon Sep 17 00:00:00 2001 From: Jason Robinson Date: Wed, 14 Sep 2016 22:04:02 +0300 Subject: [PATCH] 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. --- CHANGELOG.md | 5 ++ .../protocols/diaspora/magic_envelope.py | 13 +----- .../protocols/diaspora/test_magic_envelope.py | 46 +++++++------------ 3 files changed, 23 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a3d7a3..f08276e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/federation/protocols/diaspora/magic_envelope.py b/federation/protocols/diaspora/magic_envelope.py index 05fcc8c..e3f6fff 100644 --- a/federation/protocols/diaspora/magic_envelope.py +++ b/federation/protocols/diaspora/magic_envelope.py @@ -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() diff --git a/federation/tests/protocols/diaspora/test_magic_envelope.py b/federation/tests/protocols/diaspora/test_magic_envelope.py index 5aedbea..f9bd925 100644 --- a/federation/tests/protocols/diaspora/test_magic_envelope.py +++ b/federation/tests/protocols/diaspora/test_magic_envelope.py @@ -30,7 +30,8 @@ class TestMagicEnvelope(object): wrap_payload=True, ) payload = env.create_payload() - assert payload == b"bar" + 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"bar" - - def test_encode_payload(self): - env = MagicEnvelope( - message="bar", - 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 == '' \ - 'base64urlRSA-SHA256' \ - 'PHN0YXR1c19tZXNzYWdlPjxmb28-Ym' \ - 'FyPC9mb28-PC9zdGF0dXNfbWVzc2Fn\nZT4=\n' \ - 'RAfiBBrk0OzPbmh6xE7wMRe' \ - '7ir-qprZ7zk5VDGfopc6rfATFNbNB2FWHFdvJfoky9ORNvfUoiFmtbMG7kmmFHgp' \ - 'QdUl_OU81lKb7NG6-aq2ZRVDQT46UYat1ssdqkkynqywo' \ - 'wdyEGVUxxalFkOHWuYajmpc7ajt_G8xXjMDUCtt0VUFXepxshd24ZWRX' \ - 'O1RQK4bFr7X9-d26Ho3kLuB1VB_pYYbxJQCZlm0EDlFj7vktl0zibs' \ - 'wMFyRqiacwu8zec_HR4x8yMkF_zSNJsnnLq6ch4ad6r83LOVk3Yvdxin' \ - 'b61spHEjr2zvPWExEgUt4Jcpc07aZRUKCJVfFXFYAGnA==' + assert output == 'base64url' \ + 'RSA-SHA256' \ + 'PHN0YXR1c19tZXNzYWdlPjxmb28-YmFyPC9mb28-PC9zdGF0dXNfbWVzc2FnZT4=' \ + 'Cmk08MR4Tp8r9eVybD1hORcR_8NLRVxAu0biOfJbk' \ + 'I1xLx1c480zJ720cpVyKaF9CxVjW3lvlvRz5YbswMv0izPzfHpXoWTXH-4UPrXaGYyJnrNvqEB2UWn4iHK' \ + 'J2Rerto8sJY2b95qbXD6Nq75EoBNub5P7DYc16ENhp38YwBRnrBEvNOewddpOpEBVobyNB7no_QR8c_xkX' \ + 'ie-hUDFNwI0z7vax9HkaBFbvEmzFPMZAAdWyjxeGiWiqY0t2ZdZRCPTezy66X6Q0qc4I8kfT-Mt1ctjGmNM' \ + 'oJ4Lgu-PrO5hSRT4QBAVyxaog5w-B0PIPuC-mUW5SZLsnX3_ZuwJww==' env2 = MagicEnvelope( message="bar", private_key=get_dummy_private_key(),