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
This commit is contained in:
Jonathan Zernik 2020-07-25 17:19:54 -07:00 committed by GitHub
parent 96c72f640e
commit 5ab01107e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 35 additions and 15 deletions

View file

@ -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 = () => {

View file

@ -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) => {

View file

@ -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()

View file

@ -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 {

View file

@ -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
)

View file

@ -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)