summaryrefslogtreecommitdiffstats
path: root/src/ogRest.py
diff options
context:
space:
mode:
authorAlvaro Neira Ayuso <aneira@soleta.eu>2020-01-13 18:38:34 +0100
committerAlvaro Neira Ayuso <alvaroneay@gmail.com>2020-01-19 19:50:44 +0100
commit0f32b9ca88d0870e717549ffe14d9717a1b034e4 (patch)
treecdeed3c6df7c7c7c25f9befba1b089cc55aa37c7 /src/ogRest.py
parent2e342b50c88722fb5d9511a180486bc0fe231519 (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.
Diffstat (limited to 'src/ogRest.py')
-rw-r--r--src/ogRest.py88
1 files changed, 48 insertions, 40 deletions
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))