def start(listen_address='127.0.0.1', listen_port=8001, ssl_crt=None, ssl_key=None, asterisk_binary='/usr/sbin/asterisk', asterisk_options='-vvvvvr'): salt.utils.process.appendproctitle('AsteriskCLI') log.info('Starting Asterisk CLI server at %s:%s.', listen_address, listen_port) io_loop = salt.ext.tornado.ioloop.IOLoop(make_current=False) io_loop.make_current() term_manager = UniqueTermManager( shell_command=[asterisk_binary, asterisk_options], ioloop=io_loop) handlers = [(r'/ws', MyTermSocket, { 'term_manager': term_manager }), (r"/xstatic/(.*)", tornado_xstatic.XStaticFileHandler, { 'allowed_modules': ['termjs'] })] # Init app. app = salt.ext.tornado.web.Application( handlers, static_path=STATIC_DIR, xstatic_url=tornado_xstatic.url_maker('/xstatic/')) ssl_options = None if all([ssl_crt, ssl_key]): ssl_options = {"certfile": ssl_crt, "keyfile": ssl_key} http_server = salt.ext.tornado.httpserver.HTTPServer( app, ssl_options=ssl_options) http_server.listen(listen_port, address=listen_address) try: if not io_loop._running: io_loop.start() finally: term_manager.shutdown()
def start(self): self.logger.info('Starting websocket server') term_settings = { 'height': self.height, 'width': self.width, 'winheight': self.winheight, "winwidth": self.winwidth, } # term_manager = SingleTermManager(shell_command=[self.shell]) term_manager = UniqueTermManager(shell_command = [self.shell], \ max_terminals = self.max_terminals, term_settings = term_settings) handlers = [ # (r"/websocket", MyTermSocket, {'term_manager': term_manager}), # (r"/websocket", TermSocket, {'term_manager': term_manager}), (r"/websocket/([^/]*)", TermSocket, { 'term_manager': term_manager }), ] app = tornado.web.Application(handlers) app.listen(self.port) self.logger.info('Listen on port ' + str(self.port)) self.running = True self.logger.info('Start websocket server done') # self.ioloop.current().start() IOLoop.current().start()
def main(argv): term_manager = UniqueTermManager(shell_command=['bash']) handlers = [ (r"/websocket", TermSocket, {'term_manager': term_manager}), (r"/", TerminalPageHandler), (r"/xstatic/(.*)", tornado_xstatic.XStaticFileHandler, {'allowed_modules': ['termjs']}) ] app = tornado.web.Application(handlers, static_path=STATIC_DIR, template_path=TEMPLATE_DIR, xstatic_url = tornado_xstatic.url_maker('/xstatic/')) app.listen(8765, 'localhost') run_and_show_browser("http://localhost:8765/", term_manager)
def addhandr(contiden, comdexec): try: # echo(" * " + comdexec + " attached to " + contiden) urlpatrn = sha256((contiden + comdexec).encode()).hexdigest() comdexec = comdexec.split() stndexec = ["docker", "exec", "-ti", contiden] for indx in comdexec: stndexec.append(indx) mainobjc.add_handlers( r".*", # match any host [(r"/" + urlpatrn, TermSocket, { "term_manager": UniqueTermManager(shell_command=stndexec) })]) return {"retnmesg": "allow", "urlpatrn": urlpatrn} except Exception as expt: # echo(" * Failed to attach terminal" + "\n" + str(expt)) return {"retnmesg": "deny"}
def main(argv): term_manager = UniqueTermManager(shell_command=["bash"]) handlers = [ (r"/websocket", TermSocket, { "term_manager": term_manager }), (r"/", TerminalPageHandler), ( r"/xstatic/(.*)", tornado_xstatic.XStaticFileHandler, { "allowed_modules": ["termjs"] }, ), ] app = tornado.web.Application( handlers, static_path=STATIC_DIR, template_path=TEMPLATE_DIR, xstatic_url=tornado_xstatic.url_maker("/xstatic/"), ) app.listen(8765, "localhost") run_and_show_browser("http://localhost:8765/", term_manager)
class AttachmentEndpoint(tornado.web.RequestHandler): def set_default_headers(self): self.set_header("Access-Control-Allow-Origin", "*") def get(self): try: contiden = self.get_argument("contiden") comdexec = self.get_argument("comdexec") self.write(addhandr(contiden, comdexec)) except Exception as expt: # echo(" * Console attachment failed! - " + str(expt)) self.set_header("Access-Control-Allow-Origin", "*") self.write({"retnmesg": "deny"}) termmngr = UniqueTermManager(shell_command=["sh"]) handlers = [(r"/websocket", TermSocket, { "term_manager": termmngr }), (r"/atchcons/", AttachmentEndpoint)] def mainterm(portqant): try: global mainobjc mainobjc = tornado.web.Application(handlers) echo(" * TermSocket started on port " + portqant) mainobjc.listen(portqant, "0.0.0.0") IOLoop.instance().start() except KeyboardInterrupt: echo("\n" + " * Shutting down on SIGINT")
import tornado.web from tornado.ioloop import IOLoop from terminado import TermSocket, UniqueTermManager import os,sys pid = str(os.getpid()) pidfile = "/home/try/xterm.pid" file(pidfile, 'w').write(pid) if __name__ == '__main__': term_manager = UniqueTermManager(shell_command=["firejail","--quiet","--seccomp=rmdir,exit","--nosound","--caps.drop=all","--name=code-playground","--rlimit-fsize=5000000","--rlimit-nofile=50","--private=/tmp","--net=none","--blacklist=/usr/bin/man","--blacklist=/bin/ps","--blacklist=/usr/bin/passwd","rbash"]) handlers = [ (r"/websocket", TermSocket, {'term_manager': term_manager}), (r"/()", tornado.web.StaticFileHandler, {'path':'/home/try/compiler/index.html'}), (r"/(.*)", tornado.web.StaticFileHandler, {'path':'/home/try/compiler/.'}) ] app = tornado.web.Application(handlers) app.listen(8079) try: IOLoop.current().start() finally: term_manager.shutdown() os.unlink(pidfile)