Add various missing cli validators (#5745)

automerge
This commit is contained in:
Michael Vines
2019-08-30 09:27:35 -07:00
committed by Grimes
parent 4786143524
commit 22667d64d1
6 changed files with 42 additions and 4 deletions

View File

@ -1661,7 +1661,7 @@ fn is_pubkey(string: String) -> Result<(), String> {
} }
} }
// Return an error if a pubkey cannot be parsed. // Return an error if a keypair file cannot be parsed.
fn is_keypair(string: String) -> Result<(), String> { fn is_keypair(string: String) -> Result<(), String> {
read_keypair(&string) read_keypair(&string)
.map(|_| ()) .map(|_| ())

View File

@ -15,7 +15,7 @@ use std::error;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::process::exit; use std::process::exit;
fn pubkey_validator(pubkey: String) -> Result<(), String> { fn is_pubkey(pubkey: String) -> Result<(), String> {
match pubkey.parse::<Pubkey>() { match pubkey.parse::<Pubkey>() {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(err) => Err(format!("{:?}", err)), Err(err) => Err(format!("{:?}", err)),
@ -38,6 +38,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.value_name("HOST:PORT") .value_name("HOST:PORT")
.takes_value(true) .takes_value(true)
.default_value(&entrypoint_string) .default_value(&entrypoint_string)
.validator(solana_netutil::is_host_port)
.global(true) .global(true)
.help("Rendezvous with the cluster at this entry point"), .help("Rendezvous with the cluster at this entry point"),
) )
@ -81,7 +82,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.long("pubkey") .long("pubkey")
.value_name("PUBKEY") .value_name("PUBKEY")
.takes_value(true) .takes_value(true)
.validator(pubkey_validator) .validator(is_pubkey)
.help("Public key of a specific node to wait for"), .help("Public key of a specific node to wait for"),
) )
.arg( .arg(
@ -101,7 +102,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.index(1) .index(1)
.required(true) .required(true)
.value_name("PUBKEY") .value_name("PUBKEY")
.validator(pubkey_validator) .validator(is_pubkey)
.help("Public key of a specific node to stop"), .help("Public key of a specific node to stop"),
), ),
) )

View File

@ -8,6 +8,13 @@ use std::path::PathBuf;
use std::process::exit; use std::process::exit;
use std::sync::Arc; use std::sync::Arc;
// Return an error if a keypair file cannot be parsed.
fn is_keypair(string: String) -> Result<(), String> {
read_keypair(&string)
.map(|_| ())
.map_err(|err| format!("{:?}", err))
}
fn main() { fn main() {
solana_logger::setup(); solana_logger::setup();
@ -20,6 +27,7 @@ fn main() {
.long("identity") .long("identity")
.value_name("PATH") .value_name("PATH")
.takes_value(true) .takes_value(true)
.validator(is_keypair)
.help("File containing an identity (keypair)"), .help("File containing an identity (keypair)"),
) )
.arg( .arg(
@ -29,6 +37,7 @@ fn main() {
.value_name("HOST:PORT") .value_name("HOST:PORT")
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.validator(solana_netutil::is_host_port)
.help("Rendezvous with the cluster at this entry point"), .help("Rendezvous with the cluster at this entry point"),
) )
.arg( .arg(
@ -47,6 +56,7 @@ fn main() {
.value_name("PATH") .value_name("PATH")
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.validator(is_keypair)
.help("File containing the storage account keypair"), .help("File containing the storage account keypair"),
) )
.get_matches(); .get_matches();

View File

@ -104,6 +104,11 @@ pub fn parse_host_port(host_port: &str) -> Result<SocketAddr, String> {
} }
} }
pub fn is_host_port(string: String) -> Result<(), String> {
parse_host_port(&string)?;
Ok(())
}
#[cfg(windows)] #[cfg(windows)]
fn udp_socket(_reuseaddr: bool) -> io::Result<Socket> { fn udp_socket(_reuseaddr: bool) -> io::Result<Socket> {
let sock = Socket::new(Domain::ipv4(), Type::dgram(), None)?; let sock = Socket::new(Domain::ipv4(), Type::dgram(), None)?;

View File

@ -50,6 +50,13 @@ fn is_pubkey(string: String) -> Result<(), String> {
} }
} }
// Return an error if a keypair file cannot be parsed.
fn is_keypair(string: String) -> Result<(), String> {
read_keypair(&string)
.map(|_| ())
.map_err(|err| format!("{:?}", err))
}
// Return an error if a url cannot be parsed. // Return an error if a url cannot be parsed.
fn is_url(string: String) -> Result<(), String> { fn is_url(string: String) -> Result<(), String> {
match url::Url::parse(&string) { match url::Url::parse(&string) {
@ -187,6 +194,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.value_name("KEYPAIR") .value_name("KEYPAIR")
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.validator(is_keypair)
.help("/path/to/validator-keypair.json"), .help("/path/to/validator-keypair.json"),
) )
.arg( .arg(

View File

@ -211,6 +211,13 @@ fn initialize_ledger_path(
Ok(genesis_blockhash) Ok(genesis_blockhash)
} }
// Return an error if a keypair file cannot be parsed.
fn is_keypair(string: String) -> Result<(), String> {
read_keypair(&string)
.map(|_| ())
.map_err(|err| format!("{:?}", err))
}
fn main() { fn main() {
solana_logger::setup_with_filter("solana=info"); solana_logger::setup_with_filter("solana=info");
solana_metrics::set_panic_hook("validator"); solana_metrics::set_panic_hook("validator");
@ -233,6 +240,7 @@ fn main() {
.long("identity") .long("identity")
.value_name("PATH") .value_name("PATH")
.takes_value(true) .takes_value(true)
.validator(is_keypair)
.help("File containing the identity keypair for the validator"), .help("File containing the identity keypair for the validator"),
) )
.arg( .arg(
@ -240,6 +248,7 @@ fn main() {
.long("voting-keypair") .long("voting-keypair")
.value_name("PATH") .value_name("PATH")
.takes_value(true) .takes_value(true)
.validator(is_keypair)
.help("File containing the authorized voting keypair. Default is an ephemeral keypair"), .help("File containing the authorized voting keypair. Default is an ephemeral keypair"),
) )
.arg( .arg(
@ -247,6 +256,7 @@ fn main() {
.long("vote-account") .long("vote-account")
.value_name("PUBKEY") .value_name("PUBKEY")
.takes_value(true) .takes_value(true)
.validator(is_keypair)
.help("Public key of the vote account to vote with. Default is the public key of the voting keypair"), .help("Public key of the vote account to vote with. Default is the public key of the voting keypair"),
) )
.arg( .arg(
@ -254,6 +264,7 @@ fn main() {
.long("storage-keypair") .long("storage-keypair")
.value_name("PATH") .value_name("PATH")
.takes_value(true) .takes_value(true)
.validator(is_keypair)
.help("File containing the storage account keypair. Default is an ephemeral keypair"), .help("File containing the storage account keypair. Default is an ephemeral keypair"),
) )
.arg( .arg(
@ -278,6 +289,7 @@ fn main() {
.long("entrypoint") .long("entrypoint")
.value_name("HOST:PORT") .value_name("HOST:PORT")
.takes_value(true) .takes_value(true)
.validator(solana_netutil::is_host_port)
.help("Rendezvous with the cluster at this entry point"), .help("Rendezvous with the cluster at this entry point"),
) )
.arg( .arg(
@ -324,6 +336,7 @@ fn main() {
.long("rpc-drone-address") .long("rpc-drone-address")
.value_name("HOST:PORT") .value_name("HOST:PORT")
.takes_value(true) .takes_value(true)
.validator(solana_netutil::is_host_port)
.help("Enable the JSON RPC 'requestAirdrop' API with this drone address."), .help("Enable the JSON RPC 'requestAirdrop' API with this drone address."),
) )
.arg( .arg(
@ -332,6 +345,7 @@ fn main() {
.value_name("HOST:PORT") .value_name("HOST:PORT")
.takes_value(true) .takes_value(true)
.hidden(true) // Don't document this argument to discourage its use .hidden(true) // Don't document this argument to discourage its use
.validator(solana_netutil::is_host_port)
.help("Rendezvous with the vote signer at this RPC end point"), .help("Rendezvous with the vote signer at this RPC end point"),
) )
.arg( .arg(