Compare commits

...

2 commits

Author SHA1 Message Date
3567865c2d
docs: Update edit command docs
All checks were successful
Rust CI / Rust CI (pull_request) Successful in 2m0s
Write changelog / write-changelog (push) Successful in 4s
Rust CI / Rust CI (push) Successful in 2m28s
Signed-off-by: Awiteb <a@4rs.nl>
2024-07-24 10:36:17 +03:00
5d30b8b021
feat: Remove vault field if its value is empty string
Signed-off-by: Awiteb <a@4rs.nl>
2024-07-24 10:36:02 +03:00
2 changed files with 33 additions and 9 deletions

View file

@ -55,6 +55,10 @@ custom fields.
For secrets like the password and TOTP secret, you can provide them as arguments For secrets like the password and TOTP secret, you can provide them as arguments
or you will be prompted for them. or you will be prompted for them.
## Field removal
If you want to remove a field from the vault, you can provide an empty value for
it, e.g. `-o ""`.
## Custom fields ## Custom fields
If you want to add a custom field to the vault, you can use the `-c, --custom` If you want to add a custom field to the vault, you can use the `-c, --custom`
option, and provide the key-value pair. If you want to delete a custom field, option, and provide the key-value pair. If you want to delete a custom field,

View file

@ -82,23 +82,43 @@ impl LprsCommand for Edit {
if let Some(new_name) = self.name { if let Some(new_name) = self.name {
vault.name = new_name; vault.name = new_name;
} }
if self.password.is_some() { if let Some(ref new_password) = self.password {
vault.password = utils::user_secret(self.password, "New vault password:", false)?; if new_password.as_deref().is_some_and(|s| s.is_empty()) {
vault.password = None;
} else {
vault.password = utils::user_secret(self.password, "New vault password:", false)?;
}
} }
if let Some(totp_secret) = utils::user_secret(self.totp_secret, "TOTP Secret:", false)? { if let Some(totp_secret) = utils::user_secret(self.totp_secret, "TOTP Secret:", false)? {
cipher::base32_decode(&totp_secret).map_err(|_| { if totp_secret.is_empty() {
LprsError::Base32("Invalid TOTP secret, must be valid base32 string".to_owned()) vault.totp_secret = None;
})?; } else {
vault.totp_secret = Some(totp_secret); cipher::base32_decode(&totp_secret).map_err(|_| {
LprsError::Base32("Invalid TOTP secret, must be valid base32 string".to_owned())
})?;
vault.totp_secret = Some(totp_secret);
}
} }
if let Some(new_username) = self.username { if let Some(new_username) = self.username {
vault.username = Some(new_username); if new_username.is_empty() {
vault.username = None;
} else {
vault.username = Some(new_username);
}
} }
if let Some(new_service) = self.service { if let Some(new_service) = self.service {
vault.service = Some(new_service); if new_service.is_empty() {
vault.service = None;
} else {
vault.service = Some(new_service);
}
} }
if let Some(new_note) = self.note { if let Some(new_note) = self.note {
vault.note = Some(new_note); if new_note.is_empty() {
vault.note = None;
} else {
vault.note = Some(new_note);
}
} }
utils::apply_custom_fields(&mut vault.custom_fields, self.custom_fields); utils::apply_custom_fields(&mut vault.custom_fields, self.custom_fields);