#ftp #libunftp #wrapper #unftp #storage #back-end #authorization

unftp-sbe-restrict

A libunftp wrapper storage back-end that restricts FTP operations

2 releases

0.1.1 Sep 17, 2023
0.1.0 Sep 13, 2023

#5 in #unftp

Download history 98/week @ 2023-12-24 8/week @ 2024-01-14 9/week @ 2024-02-18 80/week @ 2024-02-25 12/week @ 2024-03-03 21/week @ 2024-03-10 9/week @ 2024-03-17 6/week @ 2024-03-24 58/week @ 2024-03-31

97 downloads per month
Used in unftp

Apache-2.0

13KB
225 lines

unftp-sbe-restrict

A libunftp wrapper storage back-end that restricts FTP operations and in so doing provide some form of authorization.


lib.rs:

A libunftp wrapper storage back-end that restricts FTP operations and in so doing provide some form of authorization.

Quick start

Start by implementing the libunftp UserDetail trait and then follow that by implementing UserWithPermissions.

Finally call the RestrictingVfs::new() method.

use libunftp::auth::UserDetail;
use unftp_sbe_restrict::{UserWithPermissions, VfsOperations};
use std::fmt::Formatter;

#[derive(Debug, PartialEq, Eq)]
pub struct User {
    pub username: String,
    // e.g. this can be something like
    // `VfsOperations::all() - VfsOperations::PUT - VfsOperations::DEL`
    pub permissions: VfsOperations,
}

impl UserDetail for User {
    fn account_enabled(&self) -> bool {
        true
    }
}

impl std::fmt::Display for User {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(f, "User(username: {:?}", self.username,)
    }
}

impl UserWithPermissions for User {
    fn permissions(&self) -> VfsOperations {
        self.permissions
    }
}

// Return type omited for brevity.
fn create_restricted_storage_backend() {
    use unftp_sbe_fs::{Filesystem, Meta};
    let _backend = Box::new(move || {
        unftp_sbe_restrict::RestrictingVfs::<Filesystem, User, Meta>::new(Filesystem::new("/srv/ftp"))
    });
}

Dependencies

~19–31MB
~541K SLoC