lightweight RFC959 FTP server written in crystal lang
Hello guys! ;)
This little baby is still under development. My goal is to make a shard of it once totally finished.
Actually, it's my first project written in Crystal : feel free to contribute, or to send tips ! I'm doing it only to train myself.
And don't hesitate to give a star if you like it, of course!
- Add the dependency to your
shard.yml
:
dependencies:
ftp:
github: LeChatErrant/ftp
- Run
shards install
require "ftp"
server = Ftp::FTPServer.new(8000, "/home")
server.start
sleep
You can find an example of utilisation at the root of the repository
To try it, simply run crystal build example.cr --release
Then you can execute it with ./example port root_directory
This will run a FTP server, listening on the specified port and mounted on 'root_directory'
https://lechaterrant.github.io/ftp/
- Simple server
- Handling multiple clients (one fiber per client)
- Basic commands (QUIT, NOOP, USER, PASS, UNKNOWN)
- Basic working directory commands (PWD, CWD, CDUP)
- DELE command
- TYPE command
- HELP command
- Object oriented version
- Configuration file in JSON or YAML
- Documentation
- Specs
- ACTIV mode
- PASSIV mode
- Basic data transferts (LIST, RETR, STOR)
- Other RFC959 compliant commands
- Making a shard of it
- Testing concurrency of the server
- Multiple simultaneous data transfert on the same user
- Fork it (https://github.com/LeChatErrant/ftp/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- LeChatErrant - creator and maintainer