All Projects → bolcom → libunftp

bolcom / libunftp

Licence: Apache-2.0 license
Extensible, async, cloud orientated FTP(S) server library and the core of unFTP: https://github.com/bolcom/unFTP. Follow up and talk to us on https://t.me/unftp

Programming Languages

rust
11053 projects
shell
77523 projects

Labels

Projects that are alternatives of or similar to libunftp

laravel-responsivefilemanager
Laravel Responsive File Manager integration
Stars: ✭ 13 (-89.17%)
Mutual labels:  ftp
ftpknocker
🔑 ftpknocker is a multi-threaded scanner for finding anonymous FTP servers
Stars: ✭ 38 (-68.33%)
Mutual labels:  ftp
proftpd-mod proxy
FTP proxy support for ProFTPD
Stars: ✭ 35 (-70.83%)
Mutual labels:  ftp
Enchilada
Enchilada is a filesystem abstraction layer written in C#
Stars: ✭ 29 (-75.83%)
Mutual labels:  ftp
core-nodejs
⚡ An FTP/FTPS/SFTP client with modern API.
Stars: ✭ 37 (-69.17%)
Mutual labels:  ftp
TinyWebDB-PHP
TinyWebDB System written in PHP
Stars: ✭ 13 (-89.17%)
Mutual labels:  ftp
fireftp
free, secure, cross-platform FTP/SFTP client for Firefox
Stars: ✭ 137 (+14.17%)
Mutual labels:  ftp
ftpConnect
A simple and robust dart FTP Client Library to interact with FTP Servers with possibility of zip and unzip files.
Stars: ✭ 43 (-64.17%)
Mutual labels:  ftp
fapro
Fake Protocol Server
Stars: ✭ 1,338 (+1015%)
Mutual labels:  ftp
Transferetto
Small PowerShell module with FTPS/SFTP functionality
Stars: ✭ 33 (-72.5%)
Mutual labels:  ftp
openMIC
Meter Information Collection System
Stars: ✭ 15 (-87.5%)
Mutual labels:  ftp
ftp-action
Automate copying your files via FTP using this GitHub action.
Stars: ✭ 90 (-25%)
Mutual labels:  ftp
bitbucket-sync
Mirror of BitBucket Sync project hosted on BitBucket
Stars: ✭ 18 (-85%)
Mutual labels:  ftp
twisted-honeypots
SSH, FTP and Telnet honeypots based on Twisted
Stars: ✭ 79 (-34.17%)
Mutual labels:  ftp
autoscreen
Automated screen capture utility
Stars: ✭ 76 (-36.67%)
Mutual labels:  ftp
publish-sftp
One-line command to quickly publish resources to a specified server
Stars: ✭ 41 (-65.83%)
Mutual labels:  ftp
upp-components
A collection of packages for U++ framework.
Stars: ✭ 36 (-70%)
Mutual labels:  ftp
f3
f3 is a bridge between FTP and an s3-compatible object storage.
Stars: ✭ 23 (-80.83%)
Mutual labels:  ftp
FTP
FTP客户端,服务端
Stars: ✭ 34 (-71.67%)
Mutual labels:  ftp
gitup
Laravel package to upload git commits to server(s) via (s)ftp.
Stars: ✭ 20 (-83.33%)
Mutual labels:  ftp

libunftp

Crate Version API Docs Build Status Crate License Follow on Telegram

When you need to FTP, but don't want to.

logo

Website | API Docs | unFTP

The libunftp library drives unFTP. It's an extensible, async, cloud orientated FTP(S) server implementation in Rust brought to you by the bol.com techlab.

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.

Feature highlights:

  • 39 Supported FTP commands (see commands directory) and growing
  • Ability to implement own storage back-ends
  • Ability to implement own authentication back-ends
  • Explicit FTPS (TLS)
  • Mutual TLS (Client certificates)
  • TLS session resumption
  • Prometheus integration
  • Structured Logging
  • Proxy Protocol support
  • Automatic session timeouts
  • Per user IP allow lists

Known storage back-ends:

Known authentication back-ends:

Prerequisites

You'll need Rust 1.41 or higher to build libunftp.

Getting started

If you've got Rust and cargo installed, create your project with

cargo new myftp

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.18.5"
unftp-sbe-fs = "0.2"
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

For more help refer to:

Getting help and staying informed

Support is given on a best effort basis. You are welcome to engage us on the discussions page or create a Github issue.

You can also follow news and talk to us on Telegram

Contributing

Thank you for your interest in contributing to libunftp!

Please feel free to create a Github issue if you encounter any problems.

Want to submit a feature request or develop your own storage or authentication back-end? Then head over to our contribution guide (CONTRIBUTING.md).

License

You're free to use, modify and distribute this software under the terms of the Apache License v2.0.

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].