[Twisted-Python] dynamic FTP realm
Tom Sheffler
tom.sheffler at gmail.com
Fri Sep 28 10:32:43 EDT 2012
Hi Paul -
I'm very new to twisted (I've only just started using it, so I apologise if
> anything I ask is seemingly obvious!).
> I'm looking to try and set up a FTP server which will serve a file
> structure and files which don't exists on the server (the file structure
> information is stored on cassandra, and the files are on s3). The file
> structure and files will also be unique to the user, so different logins
> will generate the file structure for that particular user, but I guess I
> can adress that later.
Here is a quick sketch of some of the steps ... but beware, I haven't
debugged this. You'll want to subclass twisted.protocols.ftp.FTPShell with
a new command interpreter
class PaulsFTPShell(FTPShell):
....
The you'll need to write a Realm that returns an instance of your FTP Shell:
class PaulsFTPRealm(FTPRealm):
"""
@type anonymousRoot: L{twisted.python.filepath.FilePath}
@ivar anonymousRoot: Root of the filesystem to which anonymous
users will be granted access.
"""
implements(portal.IRealm)
def __init__(self, ....)
....
def requestAvatar(self, avatarId, mind, *interfaces):
for iface in interfaces:
if iface is IFTPShell:
if avatarId is checkers.ANONYMOUS:
avatar = None
else:
avatar = PaulsFTPShell( ...)
return IFTPShell, avatar, getattr(avatar, 'logout', lambda:
None)
raise NotImplementedError("Only IFTPShell interface is supported by
this realm")
Then you'll stich it all together like this:
f = FTPFactory()
r = PaulsFTPRealm()
p = Portal.Portal(r)
p.registerChecker(...)
f.portal = p
Hope this helps get you started.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20120928/99670c1b/attachment.htm
More information about the Twisted-Python
mailing list