+55
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user