🎉 Inits project

Signed-off-by: Ash Svitan <selfsigned-ash@proton.me>
This commit is contained in:
2026-04-30 10:53:53 +02:00
commit fd6bf0adbd
7 changed files with 191 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
use crate::sh;
use fancy_regex::Regex;
use std::io::{Error, ErrorKind};
const EXECUTABLE: &str = "pass-cli";
const VAULT_NAME_REGEX: &str = r"(?m)(?<=- \[.{88}\]: ).*$";
pub fn check_pass() -> Result<(), Error> {
let which = sh::sh(format!("which {}", EXECUTABLE));
if which.is_empty() {
return Err(Error::new(
ErrorKind::Other,
format!("{} is not installed", EXECUTABLE),
));
}
let test = sh::sh(format!("{} test", EXECUTABLE));
if test != "Connection successful\n" {
return Err(Error::new(
ErrorKind::Other,
format!("{} test failed", EXECUTABLE),
));
}
return Ok(());
}
pub fn get_vaults() -> Result<Vec<String>, Error> {
let re = Regex::new(VAULT_NAME_REGEX).unwrap();
let vaults_raw = sh::sh(format!("{} vault list", EXECUTABLE));
let captures = re
.captures(vaults_raw.as_str())
.expect("Error running regex");
if let None = captures {
return Err(Error::new(ErrorKind::Other, "No vault found"));
}
let mut vaults = Vec::<String>::new();
let captures = captures.unwrap();
for each in captures.iter() {
if let None = each {
continue;
}
let each = each.unwrap();
let vault = each.as_str();
if !vault.is_empty() {
vaults.push(vault.to_string());
}
}
return Ok(vaults);
}