🐛 Fixes regex in multiple lines

Signed-off-by: Ash Svitan <selfsigned-ash@proton.me>
This commit is contained in:
2026-04-30 13:23:10 +02:00
parent fd6bf0adbd
commit eea8204fe2
2 changed files with 39 additions and 15 deletions
+8 -3
View File
@@ -13,7 +13,7 @@ fn main() -> Result<(), Error> {
return Err(Error::new(ErrorKind::Other, "No vaults found")); return Err(Error::new(ErrorKind::Other, "No vaults found"));
} }
let mut vault = String::new(); let vault;
match env::var(ENV_VAR_DEFAULT_VAULT) { match env::var(ENV_VAR_DEFAULT_VAULT) {
Ok(default_vault) => { Ok(default_vault) => {
if vaults.contains(&default_vault) { if vaults.contains(&default_vault) {
@@ -27,10 +27,15 @@ fn main() -> Result<(), Error> {
} }
Err(_) => { Err(_) => {
vault = vaults.get(0).unwrap().clone(); vault = vaults.get(0).unwrap().clone();
println!("No default vault found (you can set it with {}), using {}...", ENV_VAR_DEFAULT_VAULT, vault); println!(
"No default vault found (you can set it with {}), using {}...",
ENV_VAR_DEFAULT_VAULT, vault
);
} }
}; };
println!("selected: {:?}", vault);
let items = pass::get_items(&vault);
println!("{:?}", items);
return Ok(()); return Ok(());
} }
+31 -12
View File
@@ -1,9 +1,10 @@
use crate::sh; use crate::sh;
use fancy_regex::Regex; use fancy_regex::{Regex, RegexBuilder};
use std::io::{Error, ErrorKind}; use std::io::{Error, ErrorKind};
const EXECUTABLE: &str = "pass-cli"; const EXECUTABLE: &str = "pass-cli";
const VAULT_NAME_REGEX: &str = r"(?m)(?<=- \[.{88}\]: ).*$"; const VAULT_NAME_REGEX: &str = r"(?<=- \[.{88}\]: ).*";
const ITEM_NAME_REGEX: &str = r"(?<=- \[.{88}\]: ).*(?= )";
pub fn check_pass() -> Result<(), Error> { pub fn check_pass() -> Result<(), Error> {
let which = sh::sh(format!("which {}", EXECUTABLE)); let which = sh::sh(format!("which {}", EXECUTABLE));
@@ -29,18 +30,11 @@ pub fn get_vaults() -> Result<Vec<String>, Error> {
let re = Regex::new(VAULT_NAME_REGEX).unwrap(); let re = Regex::new(VAULT_NAME_REGEX).unwrap();
let vaults_raw = sh::sh(format!("{} vault list", EXECUTABLE)); let vaults_raw = sh::sh(format!("{} vault list", EXECUTABLE));
let captures = re let matches = re.find_iter(vaults_raw.as_str());
.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 mut vaults = Vec::<String>::new();
let captures = captures.unwrap(); for each in matches {
for each in captures.iter() { if let Err(_) = each {
if let None = each {
continue; continue;
} }
@@ -53,3 +47,28 @@ pub fn get_vaults() -> Result<Vec<String>, Error> {
return Ok(vaults); return Ok(vaults);
} }
pub fn get_items(vault: &String) -> Result<Vec<String>, Error> {
let re = RegexBuilder::new(ITEM_NAME_REGEX)
.multi_line(false)
.build()
.unwrap();
let items_raw = sh::sh(format!("{} item list {}", EXECUTABLE, vault));
let matches = re.find_iter(items_raw.as_str());
let mut items = Vec::<String>::new();
for each in matches {
if let Err(_) = each {
continue;
}
let each = each.unwrap();
let item = each.as_str();
if !item.is_empty() {
items.push(item.to_string());
}
}
return Ok(items);
}