Adds creating logins

Signed-off-by: Ash Svitan <selfsigned-ash@proton.me>
This commit is contained in:
2026-04-30 21:35:10 +02:00
parent efb661c32a
commit 3719b63d73
4 changed files with 98 additions and 22 deletions
+18 -2
View File
@@ -1,8 +1,10 @@
use crate::sh;
use regex::Regex;
use serde::Deserialize;
use std::io::{Error, ErrorKind};
const EXECUTABLE: &str = "pass-cli";
const EMAIL_REGEX: &str = r"^[\w\-\.]+@([\w-]+\.)+[\w-]{2,}$";
#[derive(Deserialize, Debug)]
pub struct Vaults {
@@ -124,7 +126,7 @@ pub fn get_logins(items: Items) -> Vec<LoginItem> {
.collect()
}
pub fn update(vault: &String, item: LoginItem, user_is_actually_email: bool) -> Result<(), Error> {
pub fn update(vault: &String, item: LoginItem, user_is_actually_email: bool) {
let user_field_update = if user_is_actually_email {
format!("email={}", item.email)
} else {
@@ -135,6 +137,20 @@ pub fn update(vault: &String, item: LoginItem, user_is_actually_email: bool) ->
EXECUTABLE, vault, item.id, item.password, user_field_update
));
println!("> {}", output);
}
return Ok(());
pub fn create(vault: &String, title: String, user: String, password: String) {
let re = Regex::new(EMAIL_REGEX).expect("Couldn't parse regex");
let is_email = re.is_match(&user);
let user_arg = if is_email {
format!("--email '{}'", user)
} else {
format!("--username '{}'", user)
};
let output = sh::sh(format!(
"{} item create login --vault-name '{}' --title '{}' {} --password '{}'",
EXECUTABLE, vault, title, user_arg, password
));
println!("> {}", output);
}