diff --git a/src/cli/cli.go b/src/cli/cli.go index c7e356fb..9cc23c25 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -72,6 +72,7 @@ func Run() (err error) { cli.BoolFlag{Name: "debug", Usage: "increase verbosity (a lot)"}, cli.BoolFlag{Name: "yes", Usage: "automatically agree to all prompts"}, cli.BoolFlag{Name: "stdout", Usage: "redirect file to stdout"}, + cli.BoolFlag{Name: "ask", Usage: "make sure sender and recipient are prompted"}, cli.StringFlag{Name: "relay", Value: models.DEFAULT_RELAY, Usage: "address of the relay"}, cli.StringFlag{Name: "out", Value: ".", Usage: "specify an output folder to receive the file"}, } @@ -139,6 +140,7 @@ func send(c *cli.Context) (err error) { Stdout: c.GlobalBool("stdout"), DisableLocal: c.Bool("no-local"), RelayPorts: strings.Split(c.String("ports"), ","), + Ask: c.GlobalBool("ask"), } b, errOpen := ioutil.ReadFile(getConfigFile()) if errOpen == nil && !c.GlobalBool("remember") { @@ -288,6 +290,7 @@ func receive(c *cli.Context) (err error) { NoPrompt: c.GlobalBool("yes"), RelayAddress: c.GlobalString("relay"), Stdout: c.GlobalBool("stdout"), + Ask: c.GlobalBool("ask"), } if c.Args().First() != "" { crocOptions.SharedSecret = c.Args().First() diff --git a/src/croc/croc.go b/src/croc/croc.go index 5aa1e91a..ed570a12 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -55,6 +55,7 @@ type Options struct { Stdout bool NoPrompt bool DisableLocal bool + Ask bool } // Client holds the state of the croc transfer @@ -519,7 +520,7 @@ func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error } } // c.spinner.Stop() - if !c.Options.NoPrompt { + if !c.Options.NoPrompt || c.Options.Ask { fmt.Fprintf(os.Stderr, "\rAccept %s (%s)? (y/n) ", fname, utils.ByteCountDecimal(totalSize)) if strings.ToLower(strings.TrimSpace(utils.GetInput(""))) != "y" { err = message.Send(c.conn[0], c.Key, message.Message{ @@ -900,7 +901,19 @@ func (c *Client) updateState() (err error) { } if c.Options.IsSender && c.Step3RecipientRequestFile && !c.Step4FileTransfer { + if c.Options.Ask { + fmt.Fprintf(os.Stderr, "\rSend to X? (y/n) ") + if strings.ToLower(strings.TrimSpace(utils.GetInput(""))) != "y" { + err = message.Send(c.conn[0], c.Key, message.Message{ + Type: "error", + Message: "refusing files", + }) + return fmt.Errorf("refused files") + } + } + log.Debug("start sending data!") + if !c.firstSend { fmt.Fprintf(os.Stderr, "\nSending (->%s)\n", c.ExternalIPConnected) c.firstSend = true