# Twisted, the Framework of Your Internet # Copyright (C) 2001 Matthew W. Lefkowitz # # This library is free software; you can redistribute it and/or # modify it under the terms of version 2.1 of the GNU Lesser General Public # License as published by the Free Software Foundation. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ I am the support module for making a manhole server with mktap. """ from twisted.manhole import service from twisted.cred import authorizer from twisted.spread import pb from twisted.python import usage import getpass, os, sys class Options(usage.Options): synopsis = "mktap manhole [options]" optParameters = [["user", "u", "admin", "Name of user to allow to log in"]] def opt_port(self, opt): try: self.opts['portno'] = int(opt) except ValueError: raise usage.error("Invalid argument to 'port'!") 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.opts['password'] = usage.newPasswordPrompt() else: self.opts['password'] = password def postOptions(self): if not self.opts.has_key('password'): self.opt_password('-') opt_p = opt_port opt_w = opt_password def updateApplication(app, config): auth = authorizer.DefaultAuthorizer(app) svc = service.Service("twisted.manhole", serviceParent=app, authorizer=auth) p = svc.createPerspective(config.opts['user']) p.makeIdentity(config.opts['password']) try: portno = config.opts['portno'] except KeyError: portno = pb.portno app.listenTCP(portno, pb.BrokerFactory(pb.AuthRoot(auth)))