diff options
author | Alvaro Neira Ayuso <aneira@soleta.eu> | 2020-01-13 18:38:34 +0100 |
---|---|---|
committer | Alvaro Neira Ayuso <alvaroneay@gmail.com> | 2020-01-19 19:50:44 +0100 |
commit | 0f32b9ca88d0870e717549ffe14d9717a1b034e4 (patch) | |
tree | cdeed3c6df7c7c7c25f9befba1b089cc55aa37c7 | |
parent | 2e342b50c88722fb5d9511a180486bc0fe231519 (diff) |
Catch execution errors during init session command
This patch allows us to catch an exception when something wrong is happening
executing the init session command. In error cases, ogClient sends an internal
error http message to the server. Otherwise, an OK http message.
-rw-r--r-- | src/linux/ogOperations.py | 6 | ||||
-rw-r--r-- | src/ogRest.py | 88 |
2 files changed, 53 insertions, 41 deletions
diff --git a/src/linux/ogOperations.py b/src/linux/ogOperations.py index 5c136fa..e3dea5a 100644 --- a/src/linux/ogOperations.py +++ b/src/linux/ogOperations.py @@ -29,7 +29,11 @@ def procsession(httpparser): disk = httpparser.getDisk() partition = httpparser.getPartition() - result = subprocess.check_output([OG_PATH + 'interfaceAdm/IniciarSesion', disk, partition], shell=True) + try: + result = subprocess.check_output([OG_PATH + 'interfaceAdm/IniciarSesion', disk, partition], shell=True) + except: + raise ValueError('Error: Incorrect command value') + return result.decode('utf-8') def procsoftware(httpparser, path): diff --git a/src/ogRest.py b/src/ogRest.py index 6e13129..08cdf35 100644 --- a/src/ogRest.py +++ b/src/ogRest.py @@ -20,6 +20,28 @@ class jsonResponse(): def dumpMsg(self): return json.dumps(self.jsontree) +class restResponse(): + def getResponse(response, jsonResp=None): + msg = '' + if response == ogResponses.BAD_REQUEST: + msg = 'HTTP/1.0 400 Bad request' + elif response == ogResponses.IN_PROGRESS: + msg = 'HTTP/1.0 202 Accepted' + elif response == ogResponses.OK: + msg = 'HTTP/1.0 200 OK' + elif response == ogResponses.INTERNAL_ERR: + msg = 'HTTP/1.0 500 Internal Server Error' + else: + return msg + + if not jsonResp == None: + msg = msg + '\nContent-Type:application/json' + msg = msg + '\nContent-Length:' + str(len(jsonResp.dumpMsg())) + msg = msg + '\n' + jsonResp.dumpMsg() + + msg = msg + '\r\n\r\n' + return msg + class ogThread(): # Executing cmd thread def execcmd(msgqueue, httpparser): @@ -36,9 +58,14 @@ class ogThread(): ogOperations.reboot() # Process session - def procsession(msgqueue, httpparser): - msgqueue.queue.clear() - msgqueue.put(ogOperations.procsession(httpparser)) + def procsession(client, httpparser): + try: + ogOperations.procsession(httpparser) + except ValueError as err: + client.send(restResponse.getResponse(ogResponses.INTERNAL_ERR)) + return + + client.send(restResponse.getResponse(ogResponses.OK)) # Process software def procsoftware(msgqueue, httpparser, path): @@ -63,30 +90,12 @@ class ogResponses(Enum): BAD_REQUEST=0 IN_PROGRESS=1 OK=2 + INTERNAL_ERR=3 class ogRest(): def __init__(self): self.msgqueue = queue.Queue(1000) - def getResponse(self, response, jsonResp=None): - msg = '' - if response == ogResponses.BAD_REQUEST: - msg = 'HTTP/1.0 400 Bad request' - elif response == ogResponses.IN_PROGRESS: - msg = 'HTTP/1.0 202 Accepted' - elif response == ogResponses.OK: - msg = 'HTTP/1.0 200 OK' - else: - return msg - - if not jsonResp == None: - msg = msg + '\nContent-Type:application/json' - msg = msg + '\nContent-Length:' + str(len(jsonResp.dumpMsg())) - msg = msg + '\n' + jsonResp.dumpMsg() - - msg = msg + '\r\n\r\n' - return msg - def processOperation(self, httpparser, client): op = httpparser.getRequestOP() URI = httpparser.getURI() @@ -100,7 +109,7 @@ class ogRest(): elif ("run/schedule" in URI): self.process_schedule(client) else: - client.send(self.getResponse(ogResponses.BAD_REQUEST)) + client.send(restResponse.getResponse(ogResponses.BAD_REQUEST)) elif ("POST" in op): if ("poweroff" in URI): self.process_poweroff(client) @@ -117,69 +126,68 @@ class ogRest(): elif ("image/restore" in URI): self.process_irestore(client, httpparser) else: - client.send(self.getResponse(ogResponses.BAD_REQUEST)) + client.send(restResponse.getResponse(ogResponses.BAD_REQUEST)) else: - client.send(self.getResponse(ogResponses.BAD_REQUEST)) + client.send(restResponse.getResponse(ogResponses.BAD_REQUEST)) return 0 def process_reboot(self, client): - client.send(self.getResponse(ogResponses.IN_PROGRESS)) + client.send(restResponse.getResponse(ogResponses.IN_PROGRESS)) client.disconnect() threading.Thread(target=ogThread.reboot).start() def process_poweroff(self, client): - client.send(self.getResponse(ogResponses.IN_PROGRESS)) + client.send(restResponse.getResponse(ogResponses.IN_PROGRESS)) client.disconnect() threading.Thread(target=ogThread.poweroff).start() def process_probe(self, client): - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) def process_shellrun(self, client, httpparser): if httpparser.getCMD() == None: - client.send(self.getResponse(ogResponses.BAD_REQUEST)) + client.send(restResponse.getResponse(ogResponses.BAD_REQUEST)) return try: ogThread.execcmd(self.msgqueue, httpparser) except ValueError as err: print(err.args[0]) - client.send(self.getResponse(ogResponses.BAD_REQUEST)) + client.send(restResponse.getResponse(ogResponses.BAD_REQUEST)) return - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) def process_shellout(self, client): jsonResp = jsonResponse() if self.msgqueue.empty(): jsonResp.addElement('out', '') - client.send(self.getResponse(ogResponses.OK, jsonResp)) + client.send(restResponse.getResponse(ogResponses.OK, jsonResp)) else: jsonResp.addElement('out', self.msgqueue.get()) - client.send(self.getResponse(ogResponses.OK, jsonResp)) + client.send(restResponse.getResponse(ogResponses.OK, jsonResp)) def process_session(self, client, httpparser): - threading.Thread(target=ogThread.procsession, args=(self.msgqueue, httpparser,)).start() - client.send(self.getResponse(ogResponses.OK)) + threading.Thread(target=ogThread.procsession, args=(client, httpparser,)).start() def process_software(self, client, httpparser): path = '/tmp/CSft-' + client.ip + '-' + partition threading.Thread(target=ogThread.procsoftware, args=(self.msgqueue, httpparser, path,)).start() - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) def process_hardware(self, client): path = '/tmp/Chrd-' + client.ip threading.Thread(target=ogThread.prochardware, args=(self.msgqueue, path,)).start() - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) def process_schedule(self, client): - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) def process_setup(self, client, httpparser): threading.Thread(target=ogThread.procsetup, args=(self.msgqueue, httpparser,)).start() - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) def process_irestore(self, client, httpparser): threading.Thread(target=ogThread.procirestore, args=(self.msgqueue, httpparser,)).start() - client.send(self.getResponse(ogResponses.OK)) + client.send(restResponse.getResponse(ogResponses.OK)) |