use regex::{Regex, RegexBuilder};
pub(crate) fn extract_uid<'a>(text: &'a str, pattern: &'a str) -> Option<&'a str> {
let formatted = format!(r"^\s*{pattern}: (?P<uid>.+?)[\s\.]*?$");
let uid_regex: Regex = RegexBuilder::new(formatted.as_str())
.multi_line(true)
.build()
.unwrap();
uid_regex
.captures(text)
.and_then(|cap| cap.name("uid").map(|uid| uid.as_str()))
}
pub(crate) fn extract_certificate_id(text: &str) -> Option<&str> {
let formatted = r"certificate ID:\s*(?P<uid>[a-fA-F0-9\-]+)";
let uid_regex = RegexBuilder::new(formatted)
.multi_line(true)
.build()
.unwrap();
uid_regex
.captures(text)
.and_then(|cap| cap.name("uid").map(|uid| uid.as_str()))
}
pub(crate) fn extract_private_key(text: &str) -> Option<&str> {
extract_uid(text, "Private key unique identifier")
}
pub(crate) fn extract_public_key(text: &str) -> Option<&str> {
extract_uid(text, "Public key unique identifier")
}
pub(crate) fn extract_unique_identifier(text: &str) -> Option<&str> {
extract_uid(text, "Unique identifier")
}
pub(crate) fn extract_user_key(text: &str) -> Option<&str> {
extract_uid(text, "Unique identifier")
}
pub(crate) fn extract_database_secret(text: &str) -> Option<&str> {
let formatted = r"entry of your CKMS_CONF\):\s*?(?P<uid>[a-zA-Z0-9=]+)$";
let uid_regex = RegexBuilder::new(formatted)
.multi_line(true)
.build()
.unwrap();
uid_regex
.captures(text)
.and_then(|cap| cap.name("uid").map(|uid| uid.as_str()))
}
pub(crate) fn extract_locate_uids(text: &str) -> Option<Vec<String>> {
let formatted = r"^\.*?List of unique identifiers:\s*(?P<uids>.+)$";
let uid_regex: Regex = RegexBuilder::new(formatted)
.multi_line(true)
.dot_matches_new_line(true)
.build()
.unwrap();
uid_regex.captures(text).and_then(|cap| {
cap.name("uids").map(|uid| {
let uids = uid.as_str();
uids.lines()
.map(str::trim)
.filter(|line| !line.is_empty())
.map(std::borrow::ToOwned::to_owned)
.collect::<Vec<String>>()
})
})
}
#[cfg(feature = "non-fips")]
pub(crate) fn extract_wrapping_key(text: &str) -> Option<&str> {
let formatted = r"Wrapping key:\s*(?P<uid>[a-zA-Z0-9+/=]+)";
let uid_regex = RegexBuilder::new(formatted)
.multi_line(true)
.build()
.unwrap();
uid_regex
.captures(text)
.and_then(|cap| cap.name("uid").map(|uid| uid.as_str()))
}