sclient.rust/src/main.rs

70 lines
1.6 KiB
Rust
Raw Normal View History

2019-06-14 01:29:11 +00:00
use std::env;
fn help() {
println!(
2019-06-14 01:40:37 +00:00
"Usage: sclient [--servername <string>] [-k | --insecure] [ssh|rsync] <remote> <port>
2019-06-14 01:29:11 +00:00
ex: sclient whatever.com 3000
(whatever.com:443 localhost:3000)
ex: sclient whatever.com:4080 0.0.0.0:3000"
2019-05-10 02:44:34 +00:00
);
2019-06-14 01:29:11 +00:00
}
fn main() {
let args: Vec<String> = env::args().collect();
2019-06-14 01:40:37 +00:00
if args
.iter()
.any(|element| element == "-h" || element == "--help")
{
help();
return;
}
2019-06-14 01:29:11 +00:00
2019-06-14 01:40:37 +00:00
let mut flags = Flags::default();
2019-06-14 01:29:11 +00:00
2019-06-14 01:40:37 +00:00
// try!()
2019-06-14 01:29:11 +00:00
if args
.iter()
.any(|element| element == "-k" || element == "--insecure")
{
flags.insecure = true;
}
let serverNameArg = args
.iter()
.enumerate()
.find(|(index, element)| *element == "-servername");
if let Some((index, _)) = serverNameArg {
2019-06-14 01:40:37 +00:00
flags.servername = args[index + 1].clone();
2019-06-14 01:29:11 +00:00
}
2019-06-14 01:40:37 +00:00
// get port
2019-06-14 01:29:11 +00:00
let maybe_port = args[args.len() - 1].parse::<i32>();
if maybe_port.is_ok() {
// pull out of maybe option error
flags.port = maybe_port.unwrap();
2019-06-14 01:40:37 +00:00
} else {
help();
print!("<port> needs to be an integer");
2019-06-14 01:29:11 +00:00
}
2019-06-14 01:40:37 +00:00
// get remote
2019-06-14 01:29:11 +00:00
flags.remote = args[args.len() - 2].clone();
if args[args.len() - 3] == "ssh" || args[args.len() - 3] == "rsync" {
flags.custom = args[args.len() - 3].clone();
}
dbg!(flags);
2019-06-14 01:40:37 +00:00
// tls port forward functionality
2019-05-10 00:39:01 +00:00
}
2019-05-10 01:07:22 +00:00
2019-06-14 01:29:11 +00:00
#[derive(Default, Debug)]
struct Flags {
insecure: bool,
servername: String,
remote: String,
custom: String,
port: i32,
}