All Projects → LeChatErrant → ftp

LeChatErrant / ftp

Licence: MIT license
lightweight RFC959 FTP server written in crystal lang

Programming Languages

crystal
512 projects
Dockerfile
14818 projects

ftp

Build Status star this repo fork this repo GitHub Issues GitHub contributors Contributions welcome License

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

  1. Add the dependency to your shard.yml:
dependencies:
  ftp:
    github: LeChatErrant/ftp
  1. 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

  • 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

Contributing

  1. Fork it (https://github.com/LeChatErrant/ftp/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].