ftp
ftp
lightweight RFC959 FTP server written in crystal lang
Note from the creator
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!
Installation
- Add the dependency to your
shard.yml
:
dependencies:
ftp:
github: LeChatErrant/ftp
- Run
shards install
Usage
require "ftp"
server = Ftp::FTPServer.new(8000, "/home")
server.start
sleep
Run example
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'
Documentation
https://lechaterrant.github.io/ftp/
Roadmap
- [x] Simple server
- [x] Handling multiple clients (one fiber per client)
- [x] Basic commands (QUIT, NOOP, USER, PASS, UNKNOWN)
- [x] Basic working directory commands (PWD, CWD, CDUP)
- [x] DELE command
- [ ] TYPE command
- [x] HELP command
- [x] Object oriented version
- [ ] Configuration file in JSON or YAML
- [x] Documentation
- [ ] Specs
- [x] ACTIV mode
- [x] PASSIV mode
- [x] Basic data transferts (LIST, RETR, STOR)
- [ ] Other RFC959 compliant commands
- [x] Making a shard of it
- [ ] Testing concurrency of the server
- [ ] Multiple simultaneous data transfert on the same user
Contributing
- 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
Contributors
- LeChatErrant - creator and maintainer