From 5ab01107e4e3c2797bfaec7ecb3ab7f0a3d4b2db Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Sat, 25 Jul 2020 17:19:54 -0700 Subject: [PATCH] Fix squeak page hash (#140) * Use bytes for all squeak hashes in admin proto * Use string for squeak_hash grpc fields in admin rpc * Fix redirect to squeak page from make squeak * Verfiy block synchronously before returning response in make_squeak --- .../src/pages/makesqueak/MakeSqueak.js | 4 ++-- .../src/pages/squeak/Squeak.js | 2 +- itests/test.py | 22 ++++++++++++++----- proto/squeak_admin.proto | 6 ++--- .../admin/squeak_admin_server_servicer.py | 9 +++++--- squeakserver/node/squeak_node.py | 7 +++++- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/frontend/react-material-admin/src/pages/makesqueak/MakeSqueak.js b/frontend/react-material-admin/src/pages/makesqueak/MakeSqueak.js index 92745525..bd6d36fc 100644 --- a/frontend/react-material-admin/src/pages/makesqueak/MakeSqueak.js +++ b/frontend/react-material-admin/src/pages/makesqueak/MakeSqueak.js @@ -60,8 +60,8 @@ export default function MakeSqueakPage() { } console.log(response); - console.log(response.getHash()); - goToSqueakPage(response.getHash()); + console.log(response.getSqueakHash()); + goToSqueakPage(response.getSqueakHash()); }); }; const getSigningProfiles = () => { diff --git a/frontend/react-material-admin/src/pages/squeak/Squeak.js b/frontend/react-material-admin/src/pages/squeak/Squeak.js index f6446d1b..7e00bf2e 100644 --- a/frontend/react-material-admin/src/pages/squeak/Squeak.js +++ b/frontend/react-material-admin/src/pages/squeak/Squeak.js @@ -24,7 +24,7 @@ export default function SqueakPage() { const getSqueak = (hash) => { var getSqueakDisplayRequest = new GetSqueakDisplayRequest() - getSqueakDisplayRequest.setHash(hash); + getSqueakDisplayRequest.setSqueakHash(hash); console.log(getSqueakDisplayRequest); client.getSqueakDisplay(getSqueakDisplayRequest, {}, (err, response) => { diff --git a/itests/test.py b/itests/test.py index e406dec8..754c29fe 100644 --- a/itests/test.py +++ b/itests/test.py @@ -292,17 +292,17 @@ def run(): ) ) print("Get make squeak response: " + str(make_squeak_response)) - make_squeak_hash = make_squeak_response.hash - assert len(make_squeak_hash) == 32 + make_squeak_hash = make_squeak_response.squeak_hash + assert len(make_squeak_hash) == 32*2 # Get the new squeak from the server get_squeak_response = server_stub.GetSqueak( - squeak_server_pb2.GetSqueakRequest(hash=make_squeak_hash) + squeak_server_pb2.GetSqueakRequest(hash=bytes.fromhex(make_squeak_hash)) ) print("Get squeak response: " + str(get_squeak_response)) get_squeak_response_squeak = squeak_from_msg(get_squeak_response.squeak) CheckSqueak(get_response_squeak, skipDecryptionCheck=True) - assert get_hash(get_squeak_response_squeak) == make_squeak_hash + assert get_hash(get_squeak_response_squeak) == bytes.fromhex(make_squeak_hash) print("Squeak from make squeak request: " + str(get_squeak_response_squeak)) # Close the channel @@ -321,7 +321,7 @@ def run(): # Get a squeak display item get_squeak_display_response = admin_stub.GetSqueakDisplay( - squeak_admin_pb2.GetSqueakDisplayRequest(hash=make_squeak_hash,) + squeak_admin_pb2.GetSqueakDisplayRequest(squeak_hash=make_squeak_hash,) ) print("Get squeak display response: " + str(get_squeak_display_response)) assert ( @@ -348,6 +348,18 @@ def run(): len(get_followed_squeak_display_response.squeak_display_entries) == 2 ) + # Get each individual squeak from the list of followed squeak display items + for entry in get_followed_squeak_display_response.squeak_display_entries: + get_squeak_display_response = admin_stub.GetSqueakDisplay( + squeak_admin_pb2.GetSqueakDisplayRequest( + squeak_hash=entry.squeak_hash + ) + ) + print("Get squeak display entry response: " + str(get_squeak_display_response)) + assert ( + get_squeak_display_response.squeak_display_entry.squeak_hash == entry.squeak_hash + ) + # Get all signing profiles get_signing_profiles_response = admin_stub.GetSigningProfiles( squeak_admin_pb2.GetSigningProfilesRequest() diff --git a/proto/squeak_admin.proto b/proto/squeak_admin.proto index 165334a8..48663535 100644 --- a/proto/squeak_admin.proto +++ b/proto/squeak_admin.proto @@ -159,17 +159,17 @@ message MakeSqueakRequest { string content = 2; /// The replyto hash - bytes replyto = 3; + string replyto = 3; } message MakeSqueakReply { /// Hash of the created squeak. - bytes hash = 1; + string squeak_hash = 1; } message GetSqueakDisplayRequest { /// Hash of the squeak. - bytes hash = 1; + string squeak_hash = 1; } message GetSqueakDisplayReply { diff --git a/squeakserver/admin/squeak_admin_server_servicer.py b/squeakserver/admin/squeak_admin_server_servicer.py index 7efffbd5..e491136a 100644 --- a/squeakserver/admin/squeak_admin_server_servicer.py +++ b/squeakserver/admin/squeak_admin_server_servicer.py @@ -86,14 +86,17 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer): def MakeSqueak(self, request, context): profile_id = request.profile_id content_str = request.content - replyto_hash = request.replyto + replyto_hash_str = request.replyto + replyto_hash = bytes.fromhex(replyto_hash) if replyto_hash_str else None squeak_hash = self.handler.handle_make_squeak( profile_id, content_str, replyto_hash ) - return squeak_admin_pb2.MakeSqueakReply(hash=squeak_hash,) + squeak_hash_str = squeak_hash.hex() + return squeak_admin_pb2.MakeSqueakReply(squeak_hash=squeak_hash_str,) def GetSqueakDisplay(self, request, context): - squeak_hash = request.hash + squeak_hash_str = request.squeak_hash + squeak_hash = bytes.fromhex(squeak_hash_str) squeak_entry_with_profile = self.handler.handle_get_squeak_display_entry( squeak_hash ) diff --git a/squeakserver/node/squeak_node.py b/squeakserver/node/squeak_node.py index 353492ba..8b5d7390 100644 --- a/squeakserver/node/squeak_node.py +++ b/squeakserver/node/squeak_node.py @@ -45,6 +45,11 @@ class SqueakNode: self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash) return inserted_squeak_hash + def save_squeak_and_verify(self, squeak): + inserted_squeak_hash = self.postgres_db.insert_squeak(squeak) + self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash) + return inserted_squeak_hash + def get_locked_squeak(self, squeak_hash): squeak_entry = self.postgres_db.get_squeak_entry(squeak_hash) squeak = squeak_entry.squeak @@ -142,7 +147,7 @@ class SqueakNode: squeak_profile = self.postgres_db.get_profile(profile_id) squeak_maker = SqueakMaker(self.lightning_client) squeak = squeak_maker.make_squeak(squeak_profile, content_str, replyto_hash) - return self.save_squeak(squeak) + return self.save_squeak_and_verify(squeak) def get_squeak_entry_with_profile(self, squeak_hash): return self.postgres_db.get_squeak_entry_with_profile(squeak_hash)