Get options for filesystem

This commit is contained in:
oupson 2022-05-31 23:21:50 +02:00
parent 8418d1795d
commit 6702757eaa
Signed by: oupson
GPG Key ID: 3BD88615552EFCB7
6 changed files with 47 additions and 10 deletions

1
Cargo.lock generated
View File

@ -558,6 +558,7 @@ dependencies = [
"fuser", "fuser",
"log", "log",
"rustcryptfs-lib", "rustcryptfs-lib",
"serde_json",
"thiserror", "thiserror",
] ]

View File

@ -9,4 +9,5 @@ edition = "2021"
fuser = "0.11" fuser = "0.11"
log = "0.4" log = "0.4"
rustcryptfs-lib = { path = "../rustcryptfs-lib" } rustcryptfs-lib = { path = "../rustcryptfs-lib" }
thiserror = "1.0" thiserror = "1.0"
serde_json = "1.0"

View File

@ -1,20 +1,36 @@
use std::path::Path; use std::{fs, path::Path};
use fuser::Filesystem; use fuser::Filesystem;
use rustcryptfs_lib::config::CryptConf; use rustcryptfs_lib::{config::CryptConf, filename::FilenameDecoder};
pub struct EncryptedFs {} use crate::error::Result;
pub struct EncryptedFs {
master_key: Vec<u8>,
filename_decoder: FilenameDecoder,
}
impl EncryptedFs { impl EncryptedFs {
pub fn new<P>(path: P) -> Self pub fn new<P>(path: P, password: &str) -> Result<Self>
where where
P: AsRef<Path>, P: AsRef<Path>,
{ {
todo!() let path = path.as_ref();
}
pub fn new_from_config(config: &CryptConf) -> Self { let conf_path = path.join("gocryptfs.conf");
Self {}
let content = fs::read_to_string(conf_path)?;
let conf: CryptConf = serde_json::from_str(&content)?;
let master_key = conf.get_master_key(password.as_bytes())?;
let filename_decoder = FilenameDecoder::new(&master_key)?;
Ok(Self {
master_key,
filename_decoder,
})
} }
pub fn mount<P>(self, mountpoint: P) pub fn mount<P>(self, mountpoint: P)

View File

@ -0,0 +1,18 @@
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error(transparent)]
IoError(#[from] std::io::Error),
#[error(transparent)]
JsonError(#[from] serde_json::Error),
#[error(transparent)]
RustCryptFsError(#[from] rustcryptfs_lib::error::Error),
#[error(transparent)]
RustCryptFsFilenameError(#[from] rustcryptfs_lib::error::FilenameDecryptError),
}

View File

@ -1,3 +1,4 @@
mod encrypted_filesystem; mod encrypted_filesystem;
pub mod error;
pub use encrypted_filesystem::EncryptedFs; pub use encrypted_filesystem::EncryptedFs;

View File

@ -108,7 +108,7 @@ fn decrypt_file(c: &DecryptCommand) -> anyhow::Result<()> {
fn mount(mount: &MountCommand) -> anyhow::Result<()> { fn mount(mount: &MountCommand) -> anyhow::Result<()> {
use rustcryptfs_linux::EncryptedFs; use rustcryptfs_linux::EncryptedFs;
let fs = EncryptedFs::new(&mount.path); let fs = EncryptedFs::new(&mount.path, mount.password.as_ref().unwrap())?;
fs.mount(&mount.mountpoint); fs.mount(&mount.mountpoint);
Ok(()) Ok(())