Clean up validation of squeak requests (#37)

* Move hashing function for squeak requests to util module

* Remove sayHello method from protocol
This commit is contained in:
Jonathan Zernik 2020-06-06 19:10:12 -07:00 committed by GitHub
parent 964920bbbb
commit 057d9495d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 37 additions and 61 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
def get_hash(squeak):
return squeak.GetHash()[::-1]