Comparer les révisions

...

2 Révisions

Auteur SHA1 Message Date
lastlink 4b2e92d041 clean parsing 2019-06-13 21:40:37 -04:00
lastlink a2b239d3d4 remove clap dep 2019-06-13 21:29:11 -04:00
4 fichiers modifiés avec 78 ajouts et 41 suppressions

1
.gitignore externe
Voir le fichier

@ -10,3 +10,4 @@ Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
grrs

Voir le fichier

@ -4,5 +4,4 @@ version = "0.1.0"
authors = ["lastlink <theefunk@gmail.com>"]
edition = "2018"
[dependencies]
clap = "*"
[dependencies]

Voir le fichier

@ -1,3 +1,14 @@
# sclient.rust
compare https://git.rootprojects.org/root/sclient.go/src/branch/master
compare https://git.rootprojects.org/root/sclient.go/src/branch/master
## getting started
* run directly
* `cargo run -- -servername example -k example.com 3000`
* `cargo run test`
* `cargo run -- --help`
* build
* `cargo build`
* `target/debug/sclient --help` run from build
* `.\target\debug\sclient.exe --help` windows cmd

Voir le fichier

@ -1,43 +1,69 @@
use clap::*;
fn main() {
let app = App::new("sclient")
.arg(
Arg::with_name("pattern")
.long("pattern")
.takes_value(true)
.required(true),
)
.arg(
Arg::with_name("servername")
.long("servername")
.takes_value(true)
.required(true),
)
.arg(
Arg::with_name("k")
.short("k")
.takes_value(true) // remove if t/f
.required(true),
use std::env;
fn help() {
println!(
"Usage: sclient [--servername <string>] [-k | --insecure] [ssh|rsync] <remote> <port>
ex: sclient whatever.com 3000
(whatever.com:443 localhost:3000)
ex: sclient whatever.com:4080 0.0.0.0:3000"
);
// println!("Hello, world!");
//
let matches = app.get_matches();
println!("{}", matches.value_of("pattern").unwrap());
}
// cargo run test
// cargo build
// cargo run -- --help
// target/debug/sclient --help
// target/debug/sclient --pattern=kevin
fn main() {
let args: Vec<String> = env::args().collect();
struct Cli {
pattern: String,
path: std::path::PathBuf,
if args
.iter()
.any(|element| element == "-h" || element == "--help")
{
help();
return;
}
let mut flags = Flags::default();
// try!()
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 {
flags.servername = args[index + 1].clone();
}
// get port
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();
} else {
help();
print!("<port> needs to be an integer");
}
// get remote
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);
// tls port forward functionality
}
#[derive(Default, Debug)]
struct Flags {
insecure: bool,
servername: String,
remote: String,
custom: String,
port: i32,
}
// insecure := flag.Bool("k", false, "ignore bad TLS/SSL/HTTPS certificates")
// servername := flag.String("servername", "", "specify a servername different from <remote> (to disable SNI use an IP as <remote> and do use this option)")
// flag.BoolVar(insecure, "insecure", false, "ignore bad TLS/SSL/HTTPS certificates")
// flag.Parse()
// remotestr := flag.Arg(0)
// localstr := flag.Arg(1)