examples/client: Disable echo for sensitive input

This commit is contained in:
adnano 2020-09-28 14:20:19 -04:00
parent 10760a256f
commit f785ed12fd
5 changed files with 26 additions and 6 deletions

View File

@ -6,7 +6,7 @@ import (
"log" "log"
"time" "time"
gmi "git.sr.ht/~adnano/go-gemini" "git.sr.ht/~adnano/go-gemini"
) )
func main() { func main() {

View File

@ -8,9 +8,11 @@ import (
"crypto/x509" "crypto/x509"
"fmt" "fmt"
"os" "os"
"syscall"
"time" "time"
gmi "git.sr.ht/~adnano/go-gemini" "git.sr.ht/~adnano/go-gemini"
"golang.org/x/crypto/ssh/terminal"
) )
var ( var (
@ -76,8 +78,16 @@ func sendRequest(req *gmi.Request) error {
switch resp.Status / 10 { switch resp.Status / 10 {
case gmi.StatusClassInput: case gmi.StatusClassInput:
fmt.Printf("%s: ", resp.Meta) fmt.Printf("%s: ", resp.Meta)
scanner.Scan() if resp.Status == gmi.StatusSensitiveInput {
req.URL.RawQuery = scanner.Text() 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) return sendRequest(req)
case gmi.StatusClassSuccess: case gmi.StatusClassSuccess:
fmt.Print(string(resp.Body)) fmt.Print(string(resp.Body))
@ -135,7 +145,7 @@ func trustCertificate(cert *x509.Certificate) trust {
func main() { func main() {
if len(os.Args) < 2 { if len(os.Args) < 2 {
fmt.Println("usage: %s gemini://...", os.Args[0]) fmt.Printf("usage: %s gemini://...", os.Args[0])
os.Exit(1) os.Exit(1)
} }

View File

@ -32,7 +32,7 @@ func TestServeMuxEntryOrder(t *testing.T) {
for _, s := range a { for _, s := range a {
mux.Handle(s, nil) mux.Handle(s, nil)
} }
for i, e := range mux.entries { for i, e := range mux.es {
s := e.u.String() s := e.u.String()
if s != expected[i] { if s != expected[i] {
t.Errorf("wrong order of mux entries: expected %s, got %s", expected[i], s) t.Errorf("wrong order of mux entries: expected %s, got %s", expected[i], s)

2
go.mod
View File

@ -1,3 +1,5 @@
module git.sr.ht/~adnano/go-gemini module git.sr.ht/~adnano/go-gemini
go 1.15 go 1.15
require golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a

8
go.sum Normal file
View File

@ -0,0 +1,8 @@
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=