Ensure API create_wallet returns failure when provided with invalid mnemonic seeds (#319)

* Ensure  returns failure with invalid mnemonic seeds, add tests

* test fixes resulting from change
This commit is contained in:
Yeastplume 2020-01-31 12:00:49 +00:00 committed by GitHub
parent e71d79dc38
commit ed5b9008c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 3 deletions

View file

@ -1517,7 +1517,7 @@ pub trait OwnerRpcS {
"params": { "params": {
"name": null, "name": null,
"mnemonic": null, "mnemonic": null,
"mnemonic_length": 0, "mnemonic_length": 32,
"password": "my_secret_password" "password": "my_secret_password"
}, },
"id": 1 "id": 1

View file

@ -183,7 +183,16 @@ where
return Err(ErrorKind::WalletSeedExists(msg))?; return Err(ErrorKind::WalletSeedExists(msg))?;
} }
} }
let _ = WalletSeed::init_file(&data_dir_name, mnemonic_length, mnemonic.clone(), password); WalletSeed::init_file(
&data_dir_name,
mnemonic_length,
mnemonic.clone(),
password,
test_mode,
)
.context(ErrorKind::Lifecycle(
"Error creating wallet seed (is mnemonic valid?)".into(),
))?;
info!("Wallet seed file created"); info!("Wallet seed file created");
let mut wallet: LMDBBackend<'a, C, K> = let mut wallet: LMDBBackend<'a, C, K> =
match LMDBBackend::new(&data_dir_name, self.node_client.clone()) { match LMDBBackend::new(&data_dir_name, self.node_client.clone()) {
@ -327,6 +336,7 @@ where
0, 0,
Some(ZeroingString::from(orig_mnemonic)), Some(ZeroingString::from(orig_mnemonic)),
new.clone(), new.clone(),
false,
); );
info!("Wallet seed file created"); info!("Wallet seed file created");

View file

@ -150,6 +150,7 @@ impl WalletSeed {
seed_length: usize, seed_length: usize,
recovery_phrase: Option<util::ZeroingString>, recovery_phrase: Option<util::ZeroingString>,
password: util::ZeroingString, password: util::ZeroingString,
test_mode: bool,
) -> Result<WalletSeed, Error> { ) -> Result<WalletSeed, Error> {
// create directory if it doesn't exist // create directory if it doesn't exist
fs::create_dir_all(data_file_dir).context(ErrorKind::IO)?; fs::create_dir_all(data_file_dir).context(ErrorKind::IO)?;
@ -158,8 +159,9 @@ impl WalletSeed {
warn!("Generating wallet seed file at: {}", seed_file_path); warn!("Generating wallet seed file at: {}", seed_file_path);
let exists = WalletSeed::seed_file_exists(data_file_dir)?; let exists = WalletSeed::seed_file_exists(data_file_dir)?;
if exists { if exists && !test_mode {
let msg = format!("Wallet seed already exists at: {}", data_file_dir); let msg = format!("Wallet seed already exists at: {}", data_file_dir);
error!("{}", msg);
return Err(ErrorKind::WalletSeedExists(msg))?; return Err(ErrorKind::WalletSeedExists(msg))?;
} }

View file

@ -0,0 +1,11 @@
{
"jsonrpc": "2.0",
"method": "create_wallet",
"params": {
"name": null,
"mnemonic": "this is not valid",
"mnemonic_length": 32,
"password": "passwoid"
},
"id": 1
}

View file

@ -0,0 +1,11 @@
{
"jsonrpc": "2.0",
"method": "create_wallet",
"params": {
"name": null,
"mnemonic": "fat twenty mean degree forget shell check candy immense awful flame next during february bulb bike sun wink theory day kiwi embrace peace lunch",
"mnemonic_length": 32,
"password": "passwoid"
},
"id": 1
}

View file

@ -517,6 +517,20 @@ fn owner_v3_lifecycle() -> Result<(), grin_wallet_controller::Error> {
println!("RES 25: {:?}", res); println!("RES 25: {:?}", res);
assert!(res.is_err()); assert!(res.is_err());
// 26) Try to create a wallet with an invalid mnemonic
let req = include_str!("data/v3_reqs/create_wallet_invalid_mn.req.json");
let res =
send_request_enc::<String>(1, 1, "http://127.0.0.1:43420/v3/owner", &req, &shared_key)?;
println!("RES 26: {:?}", res);
assert!(res.is_err());
// 27) Try to create a wallet with an valid mnemonic
let req = include_str!("data/v3_reqs/create_wallet_valid_mn.req.json");
let res =
send_request_enc::<String>(1, 1, "http://127.0.0.1:43420/v3/owner", &req, &shared_key)?;
println!("RES 27: {:?}", res);
assert!(res.is_ok());
clean_output_dir(test_dir); clean_output_dir(test_dir);
Ok(()) Ok(())