54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
|
|
# Copyright (c) Twisted Matrix Laboratories.
|
|
# See LICENSE for details.
|
|
|
|
|
|
"""
|
|
I am the support module for making a manhole server with twistd.
|
|
"""
|
|
|
|
from twisted.manhole import service
|
|
from twisted.spread import pb
|
|
from twisted.python import usage, util
|
|
from twisted.cred import portal, checkers
|
|
from twisted.application import strports
|
|
|
|
|
|
class Options(usage.Options):
|
|
synopsis = "[options]"
|
|
optParameters = [
|
|
["user", "u", "admin", "Name of user to allow to log in"],
|
|
["port", "p", str(pb.portno), "Port to listen on"],
|
|
]
|
|
|
|
optFlags = [
|
|
["tracebacks", "T", "Allow tracebacks to be sent over the network"],
|
|
]
|
|
|
|
compData = usage.Completions(
|
|
optActions={"user": usage.CompleteUsernames()}
|
|
)
|
|
|
|
def opt_password(self, password):
|
|
"""Required. '-' will prompt or read a password from stdin.
|
|
"""
|
|
# If standard input is a terminal, I prompt for a password and
|
|
# confirm it. Otherwise, I use the first line from standard
|
|
# input, stripping off a trailing newline if there is one.
|
|
if password in ('', '-'):
|
|
self['password'] = util.getPassword(confirm=1)
|
|
else:
|
|
self['password'] = password
|
|
opt_w = opt_password
|
|
|
|
def postOptions(self):
|
|
if not self.has_key('password'):
|
|
self.opt_password('-')
|
|
|
|
def makeService(config):
|
|
port, user, password = config['port'], config['user'], config['password']
|
|
p = portal.Portal(
|
|
service.Realm(service.Service(config["tracebacks"], config.get('namespace'))),
|
|
[checkers.InMemoryUsernamePasswordDatabaseDontUse(**{user: password})]
|
|
)
|
|
return strports.service(port, pb.PBServerFactory(p, config["tracebacks"]))
|