From 553c228924f1c9d2524765d46ec326e6f5eae082 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Thu, 15 Sep 2016 14:30:41 +0200 Subject: add manhole option to user agent --- passwd | 1 + service/pixelated/application.py | 16 ++++++++++++++++ service/pixelated/config/arguments.py | 1 + 3 files changed, 18 insertions(+) create mode 100644 passwd diff --git a/passwd b/passwd new file mode 100644 index 00000000..65a28bbc --- /dev/null +++ b/passwd @@ -0,0 +1 @@ +roald:verystrong diff --git a/service/pixelated/application.py b/service/pixelated/application.py index 178726ef..7e97ee74 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -191,6 +191,22 @@ def _start_in_single_user_mode(args, resource, services_factory): def start_site(config, resource): log.info('Starting the API on port %s' % config.port) + if config.manhole: + MANHOLE_PORT = 8008 + log.info('Starting the manhole on port %s' % MANHOLE_PORT) + from twisted.conch import manhole, manhole_tap, telnet + from twisted.conch.insults import insults + from twisted.cred import portal, checkers + from twisted.internet.protocol import ServerFactory + passwdFile, namespace = 'passwd', globals() + telnetRealm = manhole_tap._StupidRealm(telnet.TelnetBootstrapProtocol, + insults.ServerProtocol, + manhole.ColoredManhole, + namespace) + telnetPortal = portal.Portal(telnetRealm, [checkers.FilePasswordDB(passwdFile)]) + telnetFactory = ServerFactory() + telnetFactory.protocol = manhole_tap.makeTelnetProtocol(telnetPortal) + reactor.listenTCP(MANHOLE_PORT, telnetFactory) if config.sslkey and config.sslcert: reactor.listenSSL(config.port, PixelatedSite(resource), _ssl_options(config.sslkey, config.sslcert), interface=config.host) diff --git a/service/pixelated/config/arguments.py b/service/pixelated/config/arguments.py index b6b3ce43..b5f2101a 100644 --- a/service/pixelated/config/arguments.py +++ b/service/pixelated/config/arguments.py @@ -30,6 +30,7 @@ def parse_user_agent_args(): parser.add_argument('--multi-user', help='Run user agent in multi user mode', action='store_false', default=True, dest='single_user') parser.add_argument('-p', '--provider', help='specify a provider for mutli-user mode', metavar='', default=None, dest='provider') parser.add_argument('--banner', help='banner file to show on login screen') + parser.add_argument('--manhole', help='Run an interactive Python shell on port 8008', action='store_true', default=False, dest='manhole') args = parser.parse_args() -- cgit v1.2.3