feat: Remove vault field if its value is empty string #62
2 changed files with 33 additions and 9 deletions
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue