diff options
| author | adnano <[email protected]> | 2020-09-28 14:20:19 -0400 |
|---|---|---|
| committer | adnano <[email protected]> | 2020-09-28 14:20:19 -0400 |
| commit | f785ed12fd77362c1132ea88787fbe7d49a4bd13 (patch) | |
| tree | a396f469b815230a36dfbb3a9313d0bfdf1e98e3 /examples/client | |
| parent | Use net/http implementation of ServeMux (diff) | |
| download | go-gemini-f785ed12fd77362c1132ea88787fbe7d49a4bd13.tar.xz go-gemini-f785ed12fd77362c1132ea88787fbe7d49a4bd13.zip | |
examples/client: Disable echo for sensitive input
Diffstat (limited to 'examples/client')
| -rw-r--r-- | examples/client/client.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/examples/client/client.go b/examples/client/client.go index 15f6dd2..5582597 100644 --- a/examples/client/client.go +++ b/examples/client/client.go @@ -8,9 +8,11 @@ import ( "crypto/x509" "fmt" "os" + "syscall" "time" - gmi "git.sr.ht/~adnano/go-gemini" + "git.sr.ht/~adnano/go-gemini" + "golang.org/x/crypto/ssh/terminal" ) var ( @@ -76,8 +78,16 @@ func sendRequest(req *gmi.Request) error { switch resp.Status / 10 { case gmi.StatusClassInput: fmt.Printf("%s: ", resp.Meta) - scanner.Scan() - req.URL.RawQuery = scanner.Text() + if resp.Status == gmi.StatusSensitiveInput { + input, err := terminal.ReadPassword(int(syscall.Stdin)) + if err != nil { + return err + } + req.URL.RawQuery = string(input) + } else { + scanner.Scan() + req.URL.RawQuery = scanner.Text() + } return sendRequest(req) case gmi.StatusClassSuccess: fmt.Print(string(resp.Body)) @@ -135,7 +145,7 @@ func trustCertificate(cert *x509.Certificate) trust { func main() { if len(os.Args) < 2 { - fmt.Println("usage: %s gemini://...", os.Args[0]) + fmt.Printf("usage: %s gemini://...", os.Args[0]) os.Exit(1) } |