// pws.rs // ************************************************************************* // * Copyright (C) 2019-2020 The Nitrocli Developers * // * * // * This program is free software: you can redistribute it and/or modify * // * it under the terms of the GNU General Public License as published by * // * the Free Software Foundation, either version 3 of the License, or * // * (at your option) any later version. * // * * // * This program is distributed in the hope that it will be useful, * // * but WITHOUT ANY WARRANTY; without even the implied warranty of * // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * // * GNU General Public License for more details. * // * * // * You should have received a copy of the GNU General Public License * // * along with this program. If not, see . * // ************************************************************************* use super::*; #[test_device] fn set_invalid_slot(model: nitrokey::Model) { let err = Nitrocli::with_model(model) .handle(&["pws", "set", "100", "name", "login", "1234"]) .unwrap_err() .to_string(); assert_eq!(err, "Failed to write PWS slot"); } #[test_device] fn status(model: nitrokey::Model) -> anyhow::Result<()> { let re = regex::Regex::new( r#"^slot\tname (\d+\t.+\n)+$"#, ) .unwrap(); let mut ncli = Nitrocli::with_model(model); // Make sure that we have at least something to display by ensuring // that there are there is one slot programmed. let _ = ncli.handle(&["pws", "set", "0", "the-name", "the-login", "123456"])?; let out = ncli.handle(&["pws", "status"])?; assert!(re.is_match(&out), out); Ok(()) } #[test_device] fn set_get(model: nitrokey::Model) -> anyhow::Result<()> { const NAME: &str = "dropbox"; const LOGIN: &str = "d-e-s-o"; const PASSWORD: &str = "my-secret-password"; let mut ncli = Nitrocli::with_model(model); let _ = ncli.handle(&["pws", "set", "1", &NAME, &LOGIN, &PASSWORD])?; let out = ncli.handle(&["pws", "get", "1", "--quiet", "--name"])?; assert_eq!(out, format!("{}\n", NAME)); let out = ncli.handle(&["pws", "get", "1", "--quiet", "--login"])?; assert_eq!(out, format!("{}\n", LOGIN)); let out = ncli.handle(&["pws", "get", "1", "--quiet", "--password"])?; assert_eq!(out, format!("{}\n", PASSWORD)); let out = ncli.handle(&["pws", "get", "1", "--quiet"])?; assert_eq!(out, format!("{}\n{}\n{}\n", NAME, LOGIN, PASSWORD)); let out = ncli.handle(&["pws", "get", "1"])?; assert_eq!( out, format!( "name: {}\nlogin: {}\npassword: {}\n", NAME, LOGIN, PASSWORD ), ); Ok(()) } #[test_device] fn set_reset_get(model: nitrokey::Model) -> anyhow::Result<()> { const NAME: &str = "some/svc"; const LOGIN: &str = "a\\user"; const PASSWORD: &str = "!@&-)*(&+%^@"; let mut ncli = Nitrocli::with_model(model); let _ = ncli.handle(&["pws", "set", "2", &NAME, &LOGIN, &PASSWORD])?; let out = ncli.handle(&["reset"])?; assert_eq!(out, ""); let res = ncli.handle(&["pws", "get", "2"]); let err = res.unwrap_err().to_string(); assert_eq!(err, "Failed to access PWS slot"); Ok(()) } #[test_device] fn clear(model: nitrokey::Model) -> anyhow::Result<()> { let mut ncli = Nitrocli::with_model(model); let _ = ncli.handle(&["pws", "set", "10", "clear-test", "some-login", "abcdef"])?; let _ = ncli.handle(&["pws", "clear", "10"])?; let res = ncli.handle(&["pws", "get", "10"]); let err = res.unwrap_err().to_string(); assert_eq!(err, "Failed to access PWS slot"); Ok(()) }