From 9353b9aa47be65c9cd483a251cfd3aabc193c3ec Mon Sep 17 00:00:00 2001 From: Rasmus Dahlberg Date: Thu, 13 Oct 2022 17:47:14 +0200 Subject: Add terminal UI Intentionally backwards-compatible with HARICA's onion-csr tool, see: https://github.com/HARICA-official/onion-csr --- internal/options/options.go | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 internal/options/options.go (limited to 'internal/options/options.go') diff --git a/internal/options/options.go b/internal/options/options.go new file mode 100644 index 0000000..da63fc2 --- /dev/null +++ b/internal/options/options.go @@ -0,0 +1,56 @@ +// Package options provides parsing of user-provided onion-csr options +package options + +import ( + "encoding/hex" + "flag" + "fmt" + "os" +) + +const usage = `Usage: + + onion-csr -h + onion-csr -d HS_DIR -n NONCE + +Options: + + -h, --help: Output usage message and exit + -d, --hs-dir: Path to hidden service directory + -n, --ca-nonce: Nonce provided by a certificate authority in hex +` + +// Options is a collection of onion-csr options +type Options struct { + HSDir string + CANonce []byte + + caNonce string +} + +// New parses user-supplied onion-csr options +func New(cmd string, args []string) (opts Options, err error) { + fs := flag.NewFlagSet(cmd, flag.ContinueOnError) + fs.Usage = func() { fmt.Fprintf(os.Stderr, "%s", usage) } + stringOpt(fs, &opts.HSDir, "hs-dir", "d", "") + stringOpt(fs, &opts.caNonce, "ca-nonce", "n", "") + if err = fs.Parse(args); err != nil { + return opts, err + } + + if opts.HSDir == "" { + return opts, fmt.Errorf("-d, --hs-dir: must not be an empty string") + } + if opts.CANonce, err = hex.DecodeString(opts.caNonce); err != nil { + return opts, fmt.Errorf("-n, --ca-nonce: %v", err) + } + if len(opts.CANonce) == 0 { + return opts, fmt.Errorf("-n, --ca-nonce: must not be empty string") + } + return opts, err +} + +func stringOpt(fs *flag.FlagSet, opt *string, short, long, value string) { + fs.StringVar(opt, short, value, "") + fs.StringVar(opt, long, value, "") +} -- cgit v1.2.3