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

pub use anonymous::AnonymousAuthenticator;

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

The error type returned by Authenticator.authenticate

Traits

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