From 3ba5db533d747e7d6d53c709dc8e10302866dafc Mon Sep 17 00:00:00 2001 From: Sergi Delgado Segura Date: Thu, 13 Feb 2020 18:37:02 +0100 Subject: [PATCH] Fixes json parsing of None when no json was postesd to the API h/t @yahgwai for finding this. --- apps/cli/README.md | 2 +- pisa/api.py | 48 ++++++++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/apps/cli/README.md b/apps/cli/README.md index 1b96892..6884d3b 100644 --- a/apps/cli/README.md +++ b/apps/cli/README.md @@ -36,7 +36,7 @@ This command is used to register appointments to the PISA server. Appointments * "tx_id": tx_id, "start_time": s, "end_time": e, - "dispute_delta": d } + "to_self_delay": d } `tx` **must** be the raw penalty transaction that will be encrypted before sent to the PISA server. `type(tx) = hex encoded str` diff --git a/pisa/api.py b/pisa/api.py index a387b40..efb519a 100644 --- a/pisa/api.py +++ b/pisa/api.py @@ -40,35 +40,41 @@ class API: logger.info("Received add_appointment request", from_addr_port="{}:{}".format(remote_addr, remote_port)) - # Check content type once if properly defined - request_data = json.loads(request.get_json()) - inspector = Inspector(self.config) - appointment = inspector.inspect( - request_data.get("appointment"), request_data.get("signature"), request_data.get("public_key") - ) + if request.is_json: + # Check content type once if properly defined + request_data = json.loads(request.get_json()) + inspector = Inspector(self.config) + appointment = inspector.inspect( + request_data.get("appointment"), request_data.get("signature"), request_data.get("public_key") + ) - error = None - response = None + error = None + response = None - if type(appointment) == Appointment: - appointment_added, signature = self.watcher.add_appointment(appointment) + if type(appointment) == Appointment: + appointment_added, signature = self.watcher.add_appointment(appointment) - if appointment_added: - rcode = HTTP_OK - response = {"locator": appointment.locator, "signature": signature} + if appointment_added: + rcode = HTTP_OK + response = {"locator": appointment.locator, "signature": signature} + + else: + rcode = HTTP_SERVICE_UNAVAILABLE + error = "appointment rejected" + + elif type(appointment) == tuple: + rcode = HTTP_BAD_REQUEST + error = "appointment rejected. Error {}: {}".format(appointment[0], appointment[1]) else: - rcode = HTTP_SERVICE_UNAVAILABLE - error = "appointment rejected" - - elif type(appointment) == tuple: - rcode = HTTP_BAD_REQUEST - error = "appointment rejected. Error {}: {}".format(appointment[0], appointment[1]) + # We should never end up here, since inspect only returns appointments or tuples. Just in case. + rcode = HTTP_BAD_REQUEST + error = "appointment rejected. Request does not match the standard" else: - # We should never end up here, since inspect only returns appointments or tuples. Just in case. rcode = HTTP_BAD_REQUEST - error = "appointment rejected. Request does not match the standard" + error = "appointment rejected. Request is not json encoded" + response = None logger.info( "Sending response and disconnecting",