• Stars
    star
    37
  • Rank 720,807 (Top 15 %)
  • Language
    Crystal
  • License
    MIT License
  • Created over 5 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

lightweight RFC959 FTP server written in crystal lang

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