From 7fc0359e3d08c0119b5a36fdbe675321ef7dd11d Mon Sep 17 00:00:00 2001 From: jesopo Date: Thu, 4 Oct 2018 17:18:24 +0100 Subject: Make sure bot.lock is released in do_GET --- modules/rest_api.py | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/modules/rest_api.py b/modules/rest_api.py index 63e16ee5..0b8ea74c 100644 --- a/modules/rest_api.py +++ b/modules/rest_api.py @@ -8,34 +8,36 @@ class Handler(http.server.BaseHTTPRequestHandler): timeout = 10 def do_GET(self): _bot.lock.acquire() - parsed = urllib.parse.urlparse(self.path) - query = parsed.query - get_params = urllib.parse.parse_qs(query) + try: + parsed = urllib.parse.urlparse(self.path) + query = parsed.query + get_params = urllib.parse.parse_qs(query) - response = "" - code = 404 + response = "" + code = 404 - if not "key" in get_params or not _bot.get_setting( - "api-key-%s" % get_params["key"][0], False): - code = 401 - else: - if parsed.path.startswith("/api/"): - _, _, endpoint = parsed.path[1:].partition("/") - response = _events.on("api").on(endpoint).call_for_result( - params=get_params, path=endpoint.split("/")) + if not "key" in get_params or not _bot.get_setting( + "api-key-%s" % get_params["key"][0], False): + code = 401 + else: + if parsed.path.startswith("/api/"): + _, _, endpoint = parsed.path[1:].partition("/") + response = _events.on("api").on(endpoint).call_for_result( + params=get_params, path=endpoint.split("/")) - if response: - response = json.dumps(response, sort_keys=True, indent=4) - code = 200 + if response: + response = json.dumps(response, sort_keys=True, + indent=4) + code = 200 - self.send_response(code) - self.send_header("Content-type", "application/json") - self.end_headers() - try: + self.send_response(code) + self.send_header("Content-type", "application/json") + self.end_headers() self.wfile.write(response.encode("utf8")) except: pass - _bot.lock.release() + finally: + _bot.lock.release() @utils.export("botset", {"setting": "rest-api", "help": "Enable/disable REST API", -- cgit v1.3.1-10-gc9f91