passlane 2.4.2

A password manager and authenticator for the command line
use keyring::{Entry};
use log::{debug};
use crate::vault::entities::Error;

const SERVICE_NAME: &str = "passlane_master_pwd";
const SERVICE_NAME_TOTP: &str = "passlane_totp_master_pwd";
const USERNAME: &str = "passlane";

impl From<keyring::Error> for Error {
    fn from(e: keyring::Error) -> Self {
        Error {
            message: e.to_string(),
        }
    }
}

pub fn save_master_password(pwd: &str) -> Result<(), Error> {
    let entry = Entry::new(SERVICE_NAME, USERNAME)?;
    Ok(entry.set_password(pwd)?)
}
pub fn save_totp_master_password(pwd: &str) -> Result<(), Error> {
    let entry = Entry::new(SERVICE_NAME_TOTP, USERNAME)?;
    Ok(entry.set_password(pwd)?)
}

pub fn get_master_password() -> Result<String, Error> {
    debug!("Getting master password from keychain");
    let entry = Entry::new(SERVICE_NAME, USERNAME)?;
    Ok(entry.get_password()?)
}

pub fn delete_master_password() -> Result<(), Error> {
    let entry = Entry::new(SERVICE_NAME, USERNAME)?;
    Ok(entry.delete_password()?)
}

pub(crate) fn get_totp_master_password() -> Result<String, Error> {
    let entry = Entry::new(SERVICE_NAME_TOTP, USERNAME)?;
    Ok(entry.get_password()?)
}

pub(crate) fn delete_totp_master_password() -> Result<(), Error>{
    let entry = Entry::new(SERVICE_NAME_TOTP, USERNAME)?;
    Ok(entry.delete_password()?)
}