diff --git a/itests/run_itest.sh b/itests/run_itest.sh index b25fc930..2cf67c0d 100755 --- a/itests/run_itest.sh +++ b/itests/run_itest.sh @@ -19,4 +19,4 @@ docker-compose run test ./test.sh echo "Shutting down itest..." # docker-compose down --rmi all --volumes -# docker-compose down +docker-compose down diff --git a/squeakserver/common/rpc/squeak_server.proto b/squeakserver/common/rpc/squeak_server.proto index 81ef0fca..b80ca74a 100644 --- a/squeakserver/common/rpc/squeak_server.proto +++ b/squeakserver/common/rpc/squeak_server.proto @@ -24,9 +24,6 @@ package squeakserver; // Interface exported by the server. service SqueakServer { - // Sends a greeting - rpc SayHello (HelloRequest) returns (HelloReply) {} - /** sqk: `postsqueak` */ rpc PostSqueak (PostSqueakRequest) returns (PostSqueakReply) {} @@ -41,16 +38,6 @@ service SqueakServer { } -// The request message containing the user's name. -message HelloRequest { - string name = 1; -} - -// The response message containing the greetings -message HelloReply { - string message = 1; -} - message PostSqueakRequest { /// Content of the squeak to be made. Squeak squeak = 1; diff --git a/squeakserver/server/postgres_db.py b/squeakserver/server/postgres_db.py index 3ebfb031..2f066161 100644 --- a/squeakserver/server/postgres_db.py +++ b/squeakserver/server/postgres_db.py @@ -7,6 +7,8 @@ from squeak.core import CSqueak from squeak.core import CSqueakEncContent from squeak.core.script import CScript +from squeakserver.server.util import get_hash + logger = logging.getLogger(__name__) @@ -113,7 +115,3 @@ class PostgresDb(): for row in rows ] return hashes - - -def get_hash(squeak): - return squeak.GetHash()[::-1] diff --git a/squeakserver/server/squeak_server_handler.py b/squeakserver/server/squeak_server_handler.py index afeaf5ee..71e83269 100644 --- a/squeakserver/server/squeak_server_handler.py +++ b/squeakserver/server/squeak_server_handler.py @@ -23,9 +23,6 @@ class SqueakServerHandler(object): self.lightning_client = lightning_client self.postgres_db = postgres_db - def say_hello(self): - return 'hello from the handler' - def handle_posted_squeak(self, squeak): logger.info("Handler got posted squeak: " + str(squeak)) # Insert the squeak in the database @@ -45,16 +42,3 @@ class SqueakServerHandler(object): hashes = self.postgres_db.lookup_squeaks(addresses, min_block, max_block) logger.info("Got hashes from db: " + str(hashes)) return hashes - - -# class ClientNodeError(Exception): -# pass - - -# class MissingSigningKeyError(ClientNodeError): -# def __str__(self): -# return 'Missing signing key.' - - -def get_hash(squeak): - return squeak.GetHash()[::-1] diff --git a/squeakserver/server/squeak_server_servicer.py b/squeakserver/server/squeak_server_servicer.py index 1201890b..427e1d76 100644 --- a/squeakserver/server/squeak_server_servicer.py +++ b/squeakserver/server/squeak_server_servicer.py @@ -22,6 +22,7 @@ from squeak.core import CSqueak from squeakserver.common.rpc import squeak_server_pb2 from squeakserver.common.rpc import squeak_server_pb2_grpc +from squeakserver.server.util import get_hash class SqueakServerServicer(squeak_server_pb2_grpc.SqueakServerServicer): @@ -32,12 +33,26 @@ class SqueakServerServicer(squeak_server_pb2_grpc.SqueakServerServicer): self.port = port self.handler = handler - def SayHello(self, request, context): - return squeak_server_pb2.HelloReply(message='Hello, %s!' % request.name) - def PostSqueak(self, request, context): squeak_msg = request.squeak - squeak = squeak_from_msg(squeak_msg) + + squeak_hash = squeak_msg.hash + squeak = CSqueak.deserialize(squeak_msg.serialized_squeak) + # Check is squeak deserialized correctly + if squeak == None: + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return squeak_server_pb2.PostSqueakReply( + hash=None, + ) + + # Check is squeak hash is correct + if get_hash(squeak) != squeak_hash: + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return squeak_server_pb2.PostSqueakReply( + hash=None, + ) + + # Insert the squeak in database. squeak_hash = self.handler.handle_posted_squeak(squeak) return squeak_server_pb2.PostSqueakReply( hash=squeak_hash, @@ -45,13 +60,20 @@ class SqueakServerServicer(squeak_server_pb2_grpc.SqueakServerServicer): def GetSqueak(self, request, context): squeak_hash = request.hash + # TODO: check if hash is valid + squeak = self.handler.handle_get_squeak(squeak_hash) if squeak == None: - squeak_msg = None - else: - squeak_msg = build_squeak_msg(squeak) + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return squeak_server_pb2.GetSqueakReply( + squeak=None, + ) + return squeak_server_pb2.GetSqueakReply( - squeak=squeak_msg, + squeak=squeak_server_pb2.Squeak( + hash=get_hash(squeak), + serialized_squeak=squeak.serialize(), + ) ) def LookupSqueaks(self, request, context): @@ -74,22 +96,3 @@ class SqueakServerServicer(squeak_server_pb2_grpc.SqueakServerServicer): server.start() print("Started SqueakServerServicer rpc server...", flush=True) server.wait_for_termination() - - -def build_squeak_msg(squeak): - return squeak_server_pb2.Squeak( - hash=get_hash(squeak), - serialized_squeak=squeak.serialize(), - ) - - -def squeak_from_msg(squeak_msg): - squeak_hash = squeak_msg.hash - squeak = CSqueak.deserialize(squeak_msg.serialized_squeak) - if get_hash(squeak) != squeak_hash: - return None - return squeak - - -def get_hash(squeak): - return squeak.GetHash()[::-1] diff --git a/squeakserver/server/util.py b/squeakserver/server/util.py new file mode 100644 index 00000000..52f473d0 --- /dev/null +++ b/squeakserver/server/util.py @@ -0,0 +1,4 @@ + + +def get_hash(squeak): + return squeak.GetHash()[::-1]