Module libunftp::auth[][src]

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

Pre-made implemenations exists on crates.io 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.42"
  1. Implement the Authenticator trait and optionally the UserDetail trait:
use libunftp::auth::{Authenticator, AuthenticationError, UserDetail};
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, _password: &str) -> 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

anonymous

This module provides an anonymous authenticator

Structs

DefaultUser

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

AuthenticationError

The error type returned by Authenticator.authenticate

Traits

Authenticator

Defines the requirements for Authentication implementations

UserDetail

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