This is a new project I am working on as part of a larger project, but I saw lots of use for this in the open-source community and hope for it to be a goto solution for people trying to achieve a similar solution.
Custom FTP Server is a ruby based implementation of an FTP server that adheres to RFC 959. The great thing about it being written in ruby, is that you can customise how each command works and responds, giving you complete control over the FTP access.
At the moment it’s in it’s very early stages. I’ve got it working locally, running most commands that are used regularly.
There is still some things left to do though.
- Need to work out the difference between passive and active and then implement both
- Some FTP clients have issues with the file listing (E.g. Coda – you can only open a folder by double clicking it OR Dreamweaver – Filenames with spaces only show the part of the filename after the last space)
- Create all PFC 959 commands
- Add all commands from RFC 959 extensions RFC 2228, RFC 3659, and RFC 4217
- Test on a server
- Test with other FTP clients
Two examples I plan to make during testing are:
Example 1 – Rackspace CloudFiles interface
Now I know that you can use CloudFiles with some FTP programs, but I will make it so:
- It works with all FTP clients (or at least most…)
- It stores headers and some other data in a database (hopefully by integrating with a Ruby on Rails application)
Example 2 – Flickr FTP Server
This was an idea I had to see how well it could really go with integrating with APIs and just how custom it could get.
The Flickr FTP Server will let you start up a server where you can login to you FTP client using your Flickr login, and upload images to Flickr through your FTP client. Why you would want to I have no idea, but it might be a nice example.
So keep coming back, I’d really like some feedback too, or some tips if you hear of anything that might help.
But they are not update regularly, and look pretty overly complicated, code is messy, etc. etc.
This is why I am making my own, so I can make it available to the world for use, if anyone finds a use… (I have a good one in mind, that’s why I want to make it)