use std::io::Write;
use anyhow::{bail, Result};
use regex::Regex;
use tabwriter::TabWriter;
use super::types::Secret;
pub fn validate_name(name: &str) -> Result<()> {
let regex = regex::Regex::new(r"(?i)^[a-z0-9_]{1,64}$").unwrap();
if !regex.is_match(name) {
bail!("Invalid name. Secret names are limited to 64 characters in length, must be alphanumeric (with underscores) and are automatically uppercased.")
}
Ok(())
}
pub fn format_secrets(secrets: &Vec<Secret>, title: bool) -> Vec<String> {
let mut tw = TabWriter::new(vec![]);
if title {
writeln!(&mut tw, "NAME\tID\tCREATED").unwrap();
}
for secret in secrets {
writeln!(
&mut tw,
"{}\t{}\t{}",
secret.name, secret.id, secret.created_at
)
.unwrap();
}
String::from_utf8(tw.into_inner().unwrap())
.unwrap()
.lines()
.map(std::string::ToString::to_string)
.collect()
}
pub fn get_secret_name(secret: &str) -> Option<String> {
let regex = Regex::new(r"(?i)^\$\{secrets\.(\w+)}$").unwrap();
regex.captures(secret).map(|c| c[1].to_string())
}