From a66f71ac989c8d4c0f093de6d5852c833f9d9a23 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Fri, 12 Apr 2019 21:04:26 -0700 Subject: [PATCH] seems to work --- src/cli/cli.go | 52 ++++++++++++++++++++++++++++++------------------ src/croc/croc.go | 23 +++++++++++---------- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 46b8b048..0abc9f78 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -18,7 +18,6 @@ import ( ) var Version string -var cr *croc.Client func Run() (err error) { @@ -73,16 +72,6 @@ func Run() (err error) { } return receive(c) } - app.Before = func(c *cli.Context) error { - var err error - cr, err = croc.New(croc.Options{ - Debug: c.GlobalBool("debug"), - NoPrompt: c.GlobalBool("yes"), - AddressRelay: c.GlobalString("relay"), - Stdout: c.GlobalBool("stdout"), - }) - return err - } return app.Run(os.Args) } @@ -92,6 +81,7 @@ func Run() (err error) { // } func send(c *cli.Context) (err error) { + var fnames []string stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { @@ -121,13 +111,14 @@ func send(c *cli.Context) (err error) { return errors.New("must specify file: croc send [filename]") } + var sharedSecret string if c.String("code") != "" { - cr.Options.SharedSecret = c.String("code") + sharedSecret = c.String("code") } // cr.LoadConfig() - if len(cr.Options.SharedSecret) == 0 { + if len(sharedSecret) == 0 { // generate code phrase - cr.Options.SharedSecret = utils.GetRandomName() + sharedSecret = utils.GetRandomName() } paths := []string{} @@ -154,29 +145,52 @@ func send(c *cli.Context) (err error) { paths = append(paths, filepath.ToSlash(fname)) } } + cr, err := croc.New(croc.Options{ + SharedSecret: sharedSecret, + IsSender: true, + Debug: c.GlobalBool("debug"), + NoPrompt: c.GlobalBool("yes"), + AddressRelay: c.GlobalString("relay"), + Stdout: c.GlobalBool("stdout"), + }) + if err != nil { + return + } err = cr.Send(croc.TransferOptions{ PathToFiles: paths, - KeepPathInRemote: false, + KeepPathInRemote: false, // TODO: add options to change this }) return } func receive(c *cli.Context) (err error) { + var sharedSecret string if c.GlobalString("code") != "" { - cr.Options.SharedSecret = c.GlobalString("code") + sharedSecret = c.GlobalString("code") } if c.Args().First() != "" { - cr.Options.SharedSecret = c.Args().First() + sharedSecret = c.Args().First() } - if cr.Options.SharedSecret == "" { - cr.Options.SharedSecret = utils.GetInput("Enter receive code: ") + if sharedSecret == "" { + sharedSecret = utils.GetInput("Enter receive code: ") } if c.GlobalString("out") != "" { os.Chdir(c.GlobalString("out")) } + cr, err := croc.New(croc.Options{ + SharedSecret: sharedSecret, + IsSender: false, + Debug: c.GlobalBool("debug"), + NoPrompt: c.GlobalBool("yes"), + AddressRelay: c.GlobalString("relay"), + Stdout: c.GlobalBool("stdout"), + }) + if err != nil { + return + } err = cr.Receive() return } diff --git a/src/croc/croc.go b/src/croc/croc.go index a11dbfc8..64f83d78 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -146,6 +146,8 @@ func New(ops Options) (c *Client, err error) { // setup basic info c.Options = ops + Debug(c.Options.Debug) + log.Debugf("options: %+v", c.Options) // set channels if c.Options.IsSender { @@ -156,8 +158,6 @@ func New(ops Options) (c *Client, err error) { c.nameInChannel = c.Options.SharedSecret + "2" } - Debug(c.Options.Debug) - // initialize redis for communication in establishing channel c.redisdb = redis.NewClient(&redis.Options{ Addr: c.Options.AddressRelay, @@ -431,15 +431,18 @@ func (c *Client) processMessage(m Message) (err error) { totalSize += fi.Size } c.spinner.Stop() - fmt.Fprintf(os.Stderr, "\rAccept %s (%s) from machine '%s'? (y/n) ", fname, utils.ByteCountDecimal(totalSize), senderInfo.MachineID) - if strings.ToLower(strings.TrimSpace(utils.GetInput(""))) != "y" { - err = c.redisdb.Publish(c.nameOutChannel, Message{ - Type: "error", - Message: "refusing files", - }.String()).Err() - return fmt.Errorf("refused files") + if !c.Options.NoPrompt { + fmt.Fprintf(os.Stderr, "\rAccept %s (%s) from machine '%s'? (y/n) ", fname, utils.ByteCountDecimal(totalSize), senderInfo.MachineID) + if strings.ToLower(strings.TrimSpace(utils.GetInput(""))) != "y" { + err = c.redisdb.Publish(c.nameOutChannel, Message{ + Type: "error", + Message: "refusing files", + }.String()).Err() + return fmt.Errorf("refused files") + } + } else { + fmt.Fprintf(os.Stderr, "\rReceiving %s (%s) from machine '%s'\n", fname, utils.ByteCountDecimal(totalSize), senderInfo.MachineID) } - // TODO: accept file question? c.log.Debug(c.FilesToTransfer) c.Step2FileInfoTransfered = true case "recipientready":