🐛 Fixes regex in multiple lines
Signed-off-by: Ash Svitan <selfsigned-ash@proton.me>
This commit is contained in:
+8
-3
@@ -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
@@ -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);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user