From d4ac773437eb4737eb0b44bdefc62ac38ac18c41 Mon Sep 17 00:00:00 2001 From: stceum <50257864+stceum@users.noreply.github.com> Date: Mon, 7 Oct 2024 12:48:18 +0800 Subject: [PATCH] feat: a possible better way to enter password --- go.mod | 1 + go.sum | 4 ++++ pkg/cmd/config.go | 28 +++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 8cec7aa..8ad3272 100644 --- a/go.mod +++ b/go.mod @@ -10,5 +10,6 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/stretchr/testify v1.7.0 github.com/urfave/cli/v2 v2.3.0 + golang.org/x/term v0.24.0 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect ) diff --git a/go.sum b/go.sum index 638d993..c0eb0c4 100644 --- a/go.sum +++ b/go.sum @@ -22,6 +22,10 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/pkg/cmd/config.go b/pkg/cmd/config.go index 0d41992..f1da423 100644 --- a/pkg/cmd/config.go +++ b/pkg/cmd/config.go @@ -2,9 +2,11 @@ package cmd import ( "fmt" + "syscall" "github.com/neucn/ipgw/pkg/console" "github.com/urfave/cli/v2" + "golang.org/x/term" ) var ( @@ -39,8 +41,9 @@ var ( }, &cli.StringFlag{ Name: "password", + Value: "", Aliases: []string{"p"}, - Required: true, + Required: false, Usage: "`password` for pass.neu.edu.cn", }, &cli.StringFlag{ @@ -60,6 +63,18 @@ var ( } username := ctx.String("username") password := ctx.String("password") + if password == "" { + fmt.Print("Enter Password: ") + bytePassword, err := term.ReadPassword(int(syscall.Stdin)) + fmt.Println() + if err != nil { + return err + } + password = string(bytePassword) + if password == "" { + return fmt.Errorf("password should not be empty") + } + } if err = store.Config.AddAccount( username, password, @@ -147,10 +162,21 @@ var ( } password := ctx.String("password") + if password == "" { + fmt.Print("Enter Password: ") + bytePassword, err := term.ReadPassword(int(syscall.Stdin)) + fmt.Println() + if err != nil { + return err + } + password = string(bytePassword) + } if password != "" { if err = account.SetPassword(ctx.String("password"), []byte(ctx.String("secret"))); err != nil { return fmt.Errorf("fail to set password:\n\t'%v'", err) } + } else { + return fmt.Errorf("password should not be empty") } if ctx.Bool("default") {