aboutsummaryrefslogtreecommitdiff
path: root/examples/client
diff options
context:
space:
mode:
authoradnano <[email protected]>2020-09-28 14:20:19 -0400
committeradnano <[email protected]>2020-09-28 14:20:19 -0400
commitf785ed12fd77362c1132ea88787fbe7d49a4bd13 (patch)
treea396f469b815230a36dfbb3a9313d0bfdf1e98e3 /examples/client
parentUse net/http implementation of ServeMux (diff)
downloadgo-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.go18
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)
}