Module libunftp::auth

source ·
Expand description

Contains the Authenticator and UserDetail traits that are used to extend libunftp’s authentication and user detail storage capabilities.

Pre-made implementations exists on crates.io (search for unftp-auth-) and you can define your own implementation to integrate your FTP(S) server with whatever authentication mechanism you need. For example, to define an Authenticator that will randomly decide:

  1. Declare a dependency on the async-trait crate
async-trait = "0.1.50"
  1. Implement the Authenticator trait and optionally the UserDetail trait:
use libunftp::auth::{Authenticator, AuthenticationError, UserDetail, Credentials};
use async_trait::async_trait;
use unftp_sbe_fs::Filesystem;

#[derive(Debug)]
struct RandomAuthenticator;

#[async_trait]
impl Authenticator<RandomUser> for RandomAuthenticator {
    async fn authenticate(&self, _username: &str, _creds: &Credentials) -> Result<RandomUser, AuthenticationError> {
        Ok(RandomUser{})
    }
}

#[derive(Debug)]
struct RandomUser;

impl UserDetail for RandomUser {}

impl std::fmt::Display for RandomUser {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "RandomUser")
    }
}
  1. Initialize it with the server:
let server = libunftp::Server::with_authenticator(
  Box::new(move || { unftp_sbe_fs::Filesystem::new("/srv/ftp") }),
  std::sync::Arc::new(RandomAuthenticator{})
);

Re-exports

Modules

  • This module provides an anonymous authenticator

Structs

  • Contains a single DER-encoded X.509 client certificate.
  • Credentials passed to an Authenticator
  • DefaultUser is a default implementation of the UserDetail trait that doesn’t hold any user information. Having a default implementation like this allows for quicker prototyping with libunftp because otherwise the library user would have to implement the UserDetail trait first.

Enums

Traits

  • Defines the requirements for Authentication implementations
  • UserDetail defines the requirements for implementations that hold Security Subject information for use by the server.