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-08-08 23:41:20 +00:00
|
|
|
// https://github.com/izderadicka/ptunnel-rust
|
|
|
|
// https://github.com/ctz/rustls
|
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,
|
|
|
|
}
|