mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-20 13:28:20 +02:00
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:
parent
964920bbbb
commit
057d9495d4
6 changed files with 37 additions and 61 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
4
squeakserver/server/util.py
Normal file
4
squeakserver/server/util.py
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
|
||||
|
||||
def get_hash(squeak):
|
||||
return squeak.GetHash()[::-1]
|
||||
Loading…
Add table
Add a link
Reference in a new issue