Tame overeager wallet manager (#9262)
* Add helper fn to check for usb cli args * Use helper fn to prevent wallet_manager connecting unnecessarily * Review improvements
This commit is contained in:
parent
0e53939e00
commit
ec4745d174
|
@ -47,6 +47,13 @@ pub fn parse_keypair_path(path: &str) -> KeypairUrl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn check_for_usb<S>(mut items: impl Iterator<Item = S>) -> bool
|
||||||
|
where
|
||||||
|
S: Into<String>,
|
||||||
|
{
|
||||||
|
items.any(|arg| matches!(parse_keypair_path(&arg.into()), KeypairUrl::Usb(_)))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn presigner_from_pubkey_sigs(
|
pub fn presigner_from_pubkey_sigs(
|
||||||
pubkey: &Pubkey,
|
pubkey: &Pubkey,
|
||||||
signers: &[(Pubkey, Signature)],
|
signers: &[(Pubkey, Signature)],
|
||||||
|
@ -256,4 +263,20 @@ mod tests {
|
||||||
sanitize_seed_phrase(seed_phrase)
|
sanitize_seed_phrase(seed_phrase)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_check_for_usb() {
|
||||||
|
let args: Vec<&str> = vec![];
|
||||||
|
assert_eq!(check_for_usb(args.into_iter()), false);
|
||||||
|
let args = vec!["usb://"];
|
||||||
|
assert_eq!(check_for_usb(args.into_iter()), true);
|
||||||
|
let args = vec!["other"];
|
||||||
|
assert_eq!(check_for_usb(args.into_iter()), false);
|
||||||
|
let args = vec!["other", "usb://", "another"];
|
||||||
|
assert_eq!(check_for_usb(args.into_iter()), true);
|
||||||
|
let args = vec!["other", "another"];
|
||||||
|
assert_eq!(check_for_usb(args.into_iter()), false);
|
||||||
|
let args = vec!["usb://", "usb://"];
|
||||||
|
assert_eq!(check_for_usb(args.into_iter()), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,9 @@ use clap::{crate_description, crate_name, AppSettings, Arg, ArgGroup, ArgMatches
|
||||||
use console::style;
|
use console::style;
|
||||||
|
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::{
|
||||||
input_validators::is_url, keypair::SKIP_SEED_PHRASE_VALIDATION_ARG, offline::SIGN_ONLY_ARG,
|
input_validators::is_url,
|
||||||
|
keypair::{check_for_usb, SKIP_SEED_PHRASE_VALIDATION_ARG},
|
||||||
|
offline::SIGN_ONLY_ARG,
|
||||||
DisplayError,
|
DisplayError,
|
||||||
};
|
};
|
||||||
use solana_cli::{
|
use solana_cli::{
|
||||||
|
@ -233,12 +235,20 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
do_main(&matches).map_err(|err| DisplayError::new_as_boxed(err).into())
|
do_main(&matches, check_for_usb(std::env::args()))
|
||||||
|
.map_err(|err| DisplayError::new_as_boxed(err).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_main(matches: &ArgMatches<'_>) -> Result<(), Box<dyn error::Error>> {
|
fn do_main(
|
||||||
|
matches: &ArgMatches<'_>,
|
||||||
|
need_wallet_manager: bool,
|
||||||
|
) -> Result<(), Box<dyn error::Error>> {
|
||||||
if parse_settings(&matches)? {
|
if parse_settings(&matches)? {
|
||||||
let wallet_manager = maybe_wallet_manager()?;
|
let wallet_manager = if need_wallet_manager {
|
||||||
|
maybe_wallet_manager()?
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let (mut config, signers) = parse_args(&matches, wallet_manager)?;
|
let (mut config, signers) = parse_args(&matches, wallet_manager)?;
|
||||||
config.signers = signers.iter().map(|s| s.as_ref()).collect();
|
config.signers = signers.iter().map(|s| s.as_ref()).collect();
|
||||||
|
|
|
@ -8,7 +8,7 @@ use num_cpus;
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::{
|
||||||
input_validators::is_derivation,
|
input_validators::is_derivation,
|
||||||
keypair::{
|
keypair::{
|
||||||
keypair_from_seed_phrase, prompt_passphrase, signer_from_path,
|
check_for_usb, keypair_from_seed_phrase, prompt_passphrase, signer_from_path,
|
||||||
SKIP_SEED_PHRASE_VALIDATION_ARG,
|
SKIP_SEED_PHRASE_VALIDATION_ARG,
|
||||||
},
|
},
|
||||||
DisplayError,
|
DisplayError,
|
||||||
|
@ -407,7 +407,11 @@ fn do_main(matches: &ArgMatches<'_>) -> Result<(), Box<dyn error::Error>> {
|
||||||
Config::default()
|
Config::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let wallet_manager = maybe_wallet_manager()?;
|
let wallet_manager = if check_for_usb(std::env::args()) {
|
||||||
|
maybe_wallet_manager()?
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
match matches.subcommand() {
|
match matches.subcommand() {
|
||||||
("pubkey", Some(matches)) => {
|
("pubkey", Some(matches)) => {
|
||||||
|
|
Loading…
Reference in New Issue