Crate libunftp

source ·
Expand description

libunftp is an extensible, async, cloud orientated FTP(S) server library.

Because of its plug-able authentication (e.g. PAM, JSON File, Generic REST) and storage backends (e.g. local filesystem, Google Cloud Storage) it’s more flexible than traditional FTP servers and a perfect match for the cloud.

It runs on top of the Tokio asynchronous run-time and tries to make use of Async IO as much as possible.

Quick Start

Add the libunftp and tokio crates to your project’s dependencies in Cargo.toml. Then also choose a storage back-end implementation to add. Here we choose the file system back-end:

[dependencies]
libunftp = "0.19.1"
unftp-sbe-fs = "0.2.0"
tokio = { version = "1", features = ["full"] }

Now you’re ready to develop your server! Add the following to src/main.rs:

use unftp_sbe_fs::ServerExt;

#[tokio::main]
pub async fn main() {
    let ftp_home = std::env::temp_dir();
    let server = libunftp::Server::with_fs(ftp_home)
        .greeting("Welcome to my FTP server")
        .passive_ports(50000..65535);

    server.listen("127.0.0.1:2121").await;
}

You can now run your server with cargo run and connect to localhost:2121 with your favourite FTP client e.g.:

lftp -p 2121 localhost

Modules

  • Contains the Authenticator and UserDetail traits that are used to extend libunftp’s authentication and user detail storage capabilities.
  • Allows users to listen to events emitted by libunftp.
  • Contains code pertaining to the setup options that can be given to the Server
  • Contains the StorageBackend trait that can be implemented to create virtual file systems for libunftp.

Structs