Remove useless io mod

This commit is contained in:
oupson 2022-10-06 17:07:37 +02:00
parent fdc8aeaa53
commit 4eb66cfad4
Signed by: oupson
GPG Key ID: 3BD88615552EFCB7
1 changed files with 0 additions and 155 deletions

View File

@ -1,155 +0,0 @@
use std::{
error::Error,
fs::File,
io::Read,
path::{Path, PathBuf},
};
use crate::filename::{EncodedFilename, FilenameDecoder};
#[derive(Debug)]
pub struct DirCache {
filename: String,
dir_iv: [u8; 16],
dir_entries: Vec<DirEntry>,
}
impl DirCache {
pub fn load_from_path<P>(path: P) -> Self
where
P: AsRef<Path>,
{
let path = path.as_ref();
let mut dir_iv = [0u8; 16];
{
let dir_iv_path = path.join("gocryptfs.diriv");
let mut file = File::open(dir_iv_path).unwrap();
file.read_exact(&mut dir_iv).unwrap();
}
let dir_entries = path
.read_dir()
.unwrap()
.filter_map(|f| {
if let Ok(entry) = f {
if entry.file_name() != "gocryptfs.conf"
&& entry.file_name() != "gocryptfs.diriv"
{
Some(entry)
} else {
None
}
} else {
None
}
})
.map(|f| DirEntry::try_from(f.path().as_path()))
.filter_map(|f| f.ok())
.collect();
Self {
filename: path.to_string_lossy().to_string(),
dir_iv,
dir_entries,
}
}
pub fn lookup<P>(
&self,
filename_decoder: &FilenameDecoder,
decrypted_path: P,
) -> Option<PathBuf>
where
P: AsRef<Path>,
{
let decrypted_path = decrypted_path.as_ref();
let mut components = decrypted_path.components();
let component = components.next().expect("lol");
let decoder = filename_decoder.get_decoder_for_dir(&self.dir_iv);
let segment = decoder
.encrypt_filename(component.as_os_str().to_str().unwrap())
.expect("lol");
let segment_path = match segment {
EncodedFilename::ShortFilename(filename) => PathBuf::from(filename),
EncodedFilename::LongFilename(long_filename) => PathBuf::from(long_filename.filename),
};
if segment_path.is_dir() {
let (size, _) = components.size_hint();
if size > 0 {
unimplemented!()
} else {
unimplemented!()
//None
}
} else {
// component.as_path()
unimplemented!()
};
}
fn lookup_internal<P>(
&self,
filename_decoder: &FilenameDecoder,
decrypted_path: P,
dir: &DirCache,
) -> Option<PathBuf>
where
P: AsRef<Path>,
{
unimplemented!()
}
}
#[derive(Debug)]
pub enum DirEntry {
Dir(DirCache),
File(String),
}
impl DirEntry {
/// Returns `true` if the dir entry is [`Dir`].
///
/// [`Dir`]: DirEntry::Dir
#[must_use]
pub fn is_dir(&self) -> bool {
matches!(self, Self::Dir(..))
}
/// Returns `true` if the dir entry is [`File`].
///
/// [`File`]: DirEntry::File
#[must_use]
pub fn is_file(&self) -> bool {
matches!(self, Self::File(..))
}
}
impl TryFrom<&Path> for DirEntry {
type Error = Box<dyn Error>; // TODO
fn try_from(path: &Path) -> Result<Self, Self::Error> {
Ok(if path.is_dir() {
DirEntry::Dir(DirCache::load_from_path(path))
} else {
DirEntry::File(
path.components()
.last()
.unwrap()
.as_os_str()
.to_string_lossy()
.to_string(),
)
})
}
}