diff options
-rw-r--r-- | config.py | 1 | ||||
-rw-r--r-- | rmq.py | 1 | ||||
-rw-r--r-- | snekbox.py | 6 | ||||
-rw-r--r-- | snekweb.py | 2 |
4 files changed, 8 insertions, 2 deletions
@@ -6,6 +6,7 @@ from docker.errors import NotFound def autodiscover(): """Search for the snekbox container and return its IPv4 address.""" + container_names = ["rmq", "pdrmq", "snekbox_pdrmq_1"] client = docker.from_env() @@ -25,6 +25,7 @@ class Rmq: def consume(self, queue=QUEUE, callback=None, thread_ws=None, run_once=False): """Subscribe to read from a RMQ channel.""" + while True: try: connection = pika.BlockingConnection(self.con_params) @@ -12,8 +12,7 @@ class Snekbox: def __init__(self, nsjail_binary='nsjail', - python_binary=os.path.dirname(sys.executable)+os.sep+'python3.6'): - + python_binary=os.path.dirname(sys.executable) + os.sep + 'python3.6'): self.nsjail_binary = nsjail_binary self.python_binary = python_binary self._nsjail_workaround() @@ -46,6 +45,7 @@ class Snekbox: Returns the output of executing the command (stdout) if successful, or a error message if the execution failed. """ + args = [self.nsjail_binary, '-Mo', '--rlimit_as', '700', '--chroot', '/', @@ -108,6 +108,7 @@ class Snekbox: to RMQ. Once published, the system exits, since the snekboxes are created and disposed of per-execution. """ + msg = body.decode('utf-8') result = '' snek_msg = json.loads(msg) @@ -124,6 +125,7 @@ class Snekbox: def message_handler(self, ch, method, properties, body, thread_ws=None): """Spawns a daemon process that handles RMQ messages.""" + p = multiprocessing.Process(target=self.execute, args=(body,)) p.daemon = True p.start() @@ -22,12 +22,14 @@ log = app.logger @app.route('/') def index(): """Root path returns standard index.html.""" + return render_template('index.html') @sockets.route('/ws/<snekboxid>') def websocket_route(ws, snekboxid): """Opens a websocket that spawns and connects to a snekbox daemon.""" + localdata = threading.local() localdata.thread_ws = ws |