mirror of
https://github.com/mimblewimble/grin-wallet.git
synced 2025-02-01 17:01:10 +03:00
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:
parent
e71d79dc38
commit
ed5b9008c0
6 changed files with 51 additions and 3 deletions
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
|
|
||||||
|
|
|
@ -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))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
11
tests/data/v3_reqs/create_wallet_invalid_mn.req.json
Normal file
11
tests/data/v3_reqs/create_wallet_invalid_mn.req.json
Normal 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
|
||||||
|
}
|
11
tests/data/v3_reqs/create_wallet_valid_mn.req.json
Normal file
11
tests/data/v3_reqs/create_wallet_valid_mn.req.json
Normal 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
|
||||||
|
}
|
|
@ -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(())
|
||||||
|
|
Loading…
Reference in a new issue