From d0b79f3e7cd772b5033164d98a151ccce53da106 Mon Sep 17 00:00:00 2001 From: vilmibm Date: Wed, 18 Oct 2023 00:48:37 +0000 Subject: [PATCH] start on bare bones help SSH command --- cmd/help/main.go | 75 ++++++++++++++++++++++++++++++++++++++++++++++-- go.mod | 3 +- go.sum | 9 +++++- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/cmd/help/main.go b/cmd/help/main.go index 51e1bc0..1dab141 100644 --- a/cmd/help/main.go +++ b/cmd/help/main.go @@ -1,7 +1,78 @@ package main -import "fmt" +import ( + "fmt" + "os" + "strconv" + + "github.com/mattn/go-tty" +) + +func numberPrompt(tty *tty.TTY, prompt string, opts []string) (int, error) { + fmt.Println() + fmt.Println(prompt) + fmt.Println("(pick an option using the corresponding number)") + + chosen := -1 + for chosen < 0 { + fmt.Println() + for ix, o := range opts { + fmt.Printf("%d: %s\n", ix+1, o) + } + r, err := tty.ReadRune() + if err != nil { + return -1, fmt.Errorf("could not collect answer for '%s': %w", prompt, err) + } + c, err := strconv.Atoi(string(r)) + if err != nil { + fmt.Println() + fmt.Printf("I could not understand '%s'. Try again, please.\n", string(r)) + continue + } + if c > len(opts) || c == 0 { + fmt.Println() + fmt.Printf("%s is not an option. Try again, please.\n", string(r)) + continue + } + chosen = c - 1 + } + + return chosen, nil +} + +func _main() error { + fmt.Println("Hi, you have reached the tilde town help desk.") + fmt.Println() + fmt.Println("Please check out the options below. If none of them apply to you, you can send an e-mail to root@tilde.town .") + tty, err := tty.Open() + if err != nil { + return fmt.Errorf("could not open tty: %w", err) + } + defer tty.Close() + + options := []string{ + "I lost access to my tilde.town account and want to upload a new SSH key", + "I have a code from my e-mail to redeem", + "I just want outta here", + } + c, err := numberPrompt(tty, "What do you need help with?", options) + + if c == 2 { + fmt.Println() + fmt.Println("bye~") + return nil + } + + // TODO collect email + + return nil +} func main() { - fmt.Println("TODO") + err := _main() + if err != nil { + fmt.Printf("sorry, something went wrong: %s\n", err.Error()) + fmt.Println("Please let an admin know by emailing a copy of this error to root@tilde.town") + os.Exit(1) + } } diff --git a/go.mod b/go.mod index bcebb12..a175d22 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/charmbracelet/lipgloss v0.6.0 github.com/gdamore/tcell/v2 v2.5.3 github.com/mattn/go-sqlite3 v1.14.16 + github.com/mattn/go-tty v0.0.5 github.com/rivo/tview v0.0.0-20230130130022-4a1b7a76c01c github.com/spf13/cobra v1.5.0 gopkg.in/yaml.v3 v3.0.1 @@ -23,7 +24,7 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mattn/go-colorable v0.1.2 // indirect + github.com/mattn/go-colorable v0.1.4 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect diff --git a/go.sum b/go.sum index 1e8f65c..5ee8fbd 100644 --- a/go.sum +++ b/go.sum @@ -34,12 +34,15 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= @@ -47,6 +50,8 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-tty v0.0.5 h1:s09uXI7yDbXzzTTfw3zonKFzwGkyYlgU3OMjqA0ddz4= +github.com/mattn/go-tty v0.0.5/go.mod h1:u5GGXBtZU6RQoKV8gY5W6UhMudbR5vXnUe7j3pxse28= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/microcosm-cc/bluemonday v1.0.17 h1:Z1a//hgsQ4yjC+8zEkV8IWySkXnsxmdSY642CTFQb5Y= @@ -84,6 +89,8 @@ github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGj golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=