From 68ddbe7f149ff805042bd6dcb748136f6eb2cd37 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 14:33:02 -0600 Subject: [PATCH 01/10] small change --- src/cli/cli.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 073be83..5ff2124 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -5,7 +5,6 @@ import ( "fmt" "io" "io/ioutil" - "log" "os" "path/filepath" "runtime" @@ -16,6 +15,7 @@ import ( "github.com/schollz/croc/v6/src/models" "github.com/schollz/croc/v6/src/tcp" "github.com/schollz/croc/v6/src/utils" + log "github.com/schollz/logger" "github.com/urfave/cli" ) @@ -64,6 +64,7 @@ func Run() (err error) { }, } app.Flags = []cli.Flag{ + cli.BoolFlag{Name: "config", Usage: "save these settings to reuse next time"}, 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"}, @@ -95,8 +96,20 @@ func Run() (err error) { // return croc.SaveDefaultConfig() // } -func send(c *cli.Context) (err error) { +func makeConfigDir() (err error) { + homedir, err := os.UserHomeDir() + if err != nil { + log.Error(err) + return + } + log.SetLevel("debug") + log.Debugf("creating home directory %s", homedir) + return +} +func send(c *cli.Context) (err error) { + makeConfigDir() + os.Exit(0) var fnames []string stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { @@ -116,7 +129,7 @@ func send(c *cli.Context) (err error) { defer func() { err = os.Remove(fnames[0]) if err != nil { - log.Println(err) + log.Error(err) } }() } else { From f18c2eae7e3f98cfcc11656acc3bac5b9a6fca60 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 15:55:43 -0600 Subject: [PATCH 02/10] add get config dir --- src/cli/cli.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 5ff2124..82c85ab 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -6,6 +6,7 @@ import ( "io" "io/ioutil" "os" + "path" "path/filepath" "runtime" "strings" @@ -96,14 +97,19 @@ func Run() (err error) { // return croc.SaveDefaultConfig() // } -func makeConfigDir() (err error) { - homedir, err := os.UserHomeDir() +func getConfigDir() (homedir string, err error) { + homedir, err = os.UserHomeDir() if err != nil { log.Error(err) return } log.SetLevel("debug") - log.Debugf("creating home directory %s", homedir) + homedir = path.Join(homedir, ".config", "croc") + if _, err := os.Stat(homedir); os.IsNotExist(err) { + log.Debugf("creating home directory %s", homedir) + err = os.MkdirAll(homedir, 0700) + + } return } From 1d7976a61a13b08fe6768f86a9578c5dcc0b5502 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 16:19:32 -0600 Subject: [PATCH 03/10] save send remember --- src/cli/cli.go | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 82c85ab..a93bfc4 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -1,6 +1,7 @@ package cli import ( + "encoding/json" "errors" "fmt" "io" @@ -65,7 +66,7 @@ func Run() (err error) { }, } app.Flags = []cli.Flag{ - cli.BoolFlag{Name: "config", Usage: "save these settings to reuse next time"}, + cli.BoolFlag{Name: "remember", Usage: "save these settings to reuse next time"}, 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"}, @@ -103,19 +104,26 @@ func getConfigDir() (homedir string, err error) { log.Error(err) return } - log.SetLevel("debug") homedir = path.Join(homedir, ".config", "croc") if _, err := os.Stat(homedir); os.IsNotExist(err) { log.Debugf("creating home directory %s", homedir) err = os.MkdirAll(homedir, 0700) - } return } func send(c *cli.Context) (err error) { - makeConfigDir() - os.Exit(0) + if c.GlobalBool("debug") { + log.SetLevel("debug") + log.Debug("debug mode on") + } + configFile, err := getConfigDir() + if err != nil { + log.Error(err) + return + } + configFile = path.Join(configFile, "send.json") + var fnames []string stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { @@ -181,7 +189,7 @@ func send(c *cli.Context) (err error) { paths = append(paths, filepath.ToSlash(fname)) } } - cr, err := croc.New(croc.Options{ + crocOptions := croc.Options{ SharedSecret: sharedSecret, IsSender: true, Debug: c.GlobalBool("debug"), @@ -190,11 +198,29 @@ func send(c *cli.Context) (err error) { Stdout: c.GlobalBool("stdout"), DisableLocal: c.Bool("no-local"), RelayPorts: strings.Split(c.String("ports"), ","), - }) + } + cr, err := croc.New(crocOptions) if err != nil { return } + // save the config + if c.GlobalBool("remember") { + log.Debug("saving config file") + var bConfig []byte + bConfig, err = json.MarshalIndent(crocOptions, "", " ") + if err != nil { + log.Error(err) + return + } + err = ioutil.WriteFile(configFile, bConfig, 0644) + if err != nil { + log.Error(err) + return + } + log.Debugf("wrote %s", configFile) + } + err = cr.Send(croc.TransferOptions{ PathToFiles: paths, KeepPathInRemote: haveFolder, From 54fb8aec9d72d6956ed1d3dbfe3b4080c038755f Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 17:23:50 -0600 Subject: [PATCH 04/10] how to check if flag is set? --- src/cli/cli.go | 68 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index a93bfc4..0db8a51 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -124,6 +124,47 @@ func send(c *cli.Context) (err error) { } configFile = path.Join(configFile, "send.json") + var crocOptions croc.Options + b, errOpen := ioutil.ReadFile(configFile) + if errOpen == nil { + err = json.Unmarshal(b, &crocOptions) + if err != nil { + log.Error(err) + return + } + // update anything that has changed + if crocOptions.Debug != c.GlobalBool("debug") { + crocOptions.Debug = c.GlobalBool("debug") + } + if crocOptions.NoPrompt != c.GlobalBool("yes") { + crocOptions.NoPrompt = c.GlobalBool("yes") + } + if crocOptions.RelayAddress != c.GlobalString("relay") { + crocOptions.RelayAddress = c.GlobalString("relay") + } + if crocOptions.Stdout != c.GlobalBool("stdout") { + crocOptions.Stdout = c.GlobalBool("stdout") + } + if crocOptions.DisableLocal != c.Bool("no-local") { + crocOptions.DisableLocal = c.Bool("no-local") + } + // TODO: add ports + if c.String("code") != "" { + crocOptions.SharedSecret = "" + } + } else { + crocOptions = croc.Options{ + SharedSecret: "", + IsSender: true, + Debug: c.GlobalBool("debug"), + NoPrompt: c.GlobalBool("yes"), + RelayAddress: c.GlobalString("relay"), + Stdout: c.GlobalBool("stdout"), + DisableLocal: c.Bool("no-local"), + RelayPorts: strings.Split(c.String("ports"), ","), + } + } + var fnames []string stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { @@ -153,14 +194,12 @@ func send(c *cli.Context) (err error) { return errors.New("must specify file: croc send [filename]") } - var sharedSecret string if c.String("code") != "" { - sharedSecret = c.String("code") + crocOptions.SharedSecret = c.String("code") } - // cr.LoadConfig() - if len(sharedSecret) == 0 { + if len(crocOptions.SharedSecret) == 0 { // generate code phrase - sharedSecret = utils.GetRandomName() + crocOptions.SharedSecret = utils.GetRandomName() } haveFolder := false @@ -189,16 +228,7 @@ func send(c *cli.Context) (err error) { paths = append(paths, filepath.ToSlash(fname)) } } - crocOptions := croc.Options{ - SharedSecret: sharedSecret, - IsSender: true, - Debug: c.GlobalBool("debug"), - NoPrompt: c.GlobalBool("yes"), - RelayAddress: c.GlobalString("relay"), - Stdout: c.GlobalBool("stdout"), - DisableLocal: c.Bool("no-local"), - RelayPorts: strings.Split(c.String("ports"), ","), - } + cr, err := croc.New(crocOptions) if err != nil { return @@ -208,6 +238,10 @@ func send(c *cli.Context) (err error) { if c.GlobalBool("remember") { log.Debug("saving config file") var bConfig []byte + // if the code wasn't set, don't save it + if c.String("code") == "" { + crocOptions.SharedSecret = "" + } bConfig, err = json.MarshalIndent(crocOptions, "", " ") if err != nil { log.Error(err) @@ -231,8 +265,8 @@ func send(c *cli.Context) (err error) { func receive(c *cli.Context) (err error) { var sharedSecret string - if c.GlobalString("code") != "" { - sharedSecret = c.GlobalString("code") + if c.String("code") != "" { + sharedSecret = c.String("code") } if c.Args().First() != "" { sharedSecret = c.Args().First() From 97d18e1fbf1afff630f0e0fbaa21adf6c102a5ba Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 17:26:42 -0600 Subject: [PATCH 05/10] toggling parameters --- src/cli/cli.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 0db8a51..cc6e66f 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -126,7 +126,7 @@ func send(c *cli.Context) (err error) { var crocOptions croc.Options b, errOpen := ioutil.ReadFile(configFile) - if errOpen == nil { + if errOpen == nil && !c.GlobalBool("remember") { err = json.Unmarshal(b, &crocOptions) if err != nil { log.Error(err) @@ -136,19 +136,22 @@ func send(c *cli.Context) (err error) { if crocOptions.Debug != c.GlobalBool("debug") { crocOptions.Debug = c.GlobalBool("debug") } - if crocOptions.NoPrompt != c.GlobalBool("yes") { + if c.GlobalBool("yes") { crocOptions.NoPrompt = c.GlobalBool("yes") } if crocOptions.RelayAddress != c.GlobalString("relay") { crocOptions.RelayAddress = c.GlobalString("relay") } - if crocOptions.Stdout != c.GlobalBool("stdout") { + if c.GlobalBool("stdout") { crocOptions.Stdout = c.GlobalBool("stdout") } - if crocOptions.DisableLocal != c.Bool("no-local") { + // TODO: use c.IsSet + + if c.Bool("no-local") { crocOptions.DisableLocal = c.Bool("no-local") } // TODO: add ports + if c.String("code") != "" { crocOptions.SharedSecret = "" } From 252e96a6702aa7589094b06eee41ea6c844f307c Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 18:06:52 -0600 Subject: [PATCH 06/10] simplify toggling --- src/cli/cli.go | 56 +++++++++++++++++++------------------------------- 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index cc6e66f..ad3f5a1 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -124,47 +124,36 @@ func send(c *cli.Context) (err error) { } configFile = path.Join(configFile, "send.json") - var crocOptions croc.Options + crocOptions := croc.Options{ + SharedSecret: c.String("code"), + IsSender: true, + Debug: c.GlobalBool("debug"), + NoPrompt: c.GlobalBool("yes"), + RelayAddress: c.GlobalString("relay"), + Stdout: c.GlobalBool("stdout"), + DisableLocal: c.Bool("no-local"), + RelayPorts: strings.Split(c.String("ports"), ","), + } b, errOpen := ioutil.ReadFile(configFile) if errOpen == nil && !c.GlobalBool("remember") { - err = json.Unmarshal(b, &crocOptions) + var rememberedOptions croc.Options + err = json.Unmarshal(b, &rememberedOptions) if err != nil { log.Error(err) return } - // update anything that has changed - if crocOptions.Debug != c.GlobalBool("debug") { - crocOptions.Debug = c.GlobalBool("debug") + // update anything that isn't explicitly set + if !c.GlobalIsSet("relay") { + crocOptions.RelayAddress = rememberedOptions.RelayAddress } - if c.GlobalBool("yes") { - crocOptions.NoPrompt = c.GlobalBool("yes") + if !c.IsSet("no-local") { + crocOptions.DisableLocal = rememberedOptions.DisableLocal } - if crocOptions.RelayAddress != c.GlobalString("relay") { - crocOptions.RelayAddress = c.GlobalString("relay") + if !c.IsSet("ports") { + crocOptions.RelayPorts = rememberedOptions.RelayPorts } - if c.GlobalBool("stdout") { - crocOptions.Stdout = c.GlobalBool("stdout") - } - // TODO: use c.IsSet - - if c.Bool("no-local") { - crocOptions.DisableLocal = c.Bool("no-local") - } - // TODO: add ports - - if c.String("code") != "" { - crocOptions.SharedSecret = "" - } - } else { - crocOptions = croc.Options{ - SharedSecret: "", - IsSender: true, - Debug: c.GlobalBool("debug"), - NoPrompt: c.GlobalBool("yes"), - RelayAddress: c.GlobalString("relay"), - Stdout: c.GlobalBool("stdout"), - DisableLocal: c.Bool("no-local"), - RelayPorts: strings.Split(c.String("ports"), ","), + if !c.IsSet("code") { + crocOptions.SharedSecret = rememberedOptions.SharedSecret } } @@ -197,9 +186,6 @@ func send(c *cli.Context) (err error) { return errors.New("must specify file: croc send [filename]") } - if c.String("code") != "" { - crocOptions.SharedSecret = c.String("code") - } if len(crocOptions.SharedSecret) == 0 { // generate code phrase crocOptions.SharedSecret = utils.GetRandomName() From 6a8bdccb66863c45fbd1865ba2d3bba1cab9f1a1 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Wed, 17 Jul 2019 18:16:50 -0600 Subject: [PATCH 07/10] add receiver config --- src/cli/cli.go | 61 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index ad3f5a1..8c72346 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -253,28 +253,55 @@ func send(c *cli.Context) (err error) { } func receive(c *cli.Context) (err error) { - var sharedSecret string - if c.String("code") != "" { - sharedSecret = c.String("code") - } - if c.Args().First() != "" { - sharedSecret = c.Args().First() - } - 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, + crocOptions := croc.Options{ + SharedSecret: c.String("code"), IsSender: false, Debug: c.GlobalBool("debug"), NoPrompt: c.GlobalBool("yes"), RelayAddress: c.GlobalString("relay"), Stdout: c.GlobalBool("stdout"), - }) + } + if c.Args().First() != "" { + crocOptions.SharedSecret = c.Args().First() + } + + // load options here + if c.GlobalBool("debug") { + log.SetLevel("debug") + log.Debug("debug mode on") + } + configFile, err := getConfigDir() + if err != nil { + log.Error(err) + return + } + configFile = path.Join(configFile, "receive.json") + b, errOpen := ioutil.ReadFile(configFile) + if errOpen == nil && !c.GlobalBool("remember") { + var rememberedOptions croc.Options + err = json.Unmarshal(b, &rememberedOptions) + if err != nil { + log.Error(err) + return + } + // update anything that isn't explicitly set + if !c.GlobalIsSet("relay") { + crocOptions.RelayAddress = rememberedOptions.RelayAddress + } + if crocOptions.SharedSecret == "" { + crocOptions.SharedSecret = rememberedOptions.SharedSecret + } + } + + if crocOptions.SharedSecret == "" { + crocOptions.SharedSecret = utils.GetInput("Enter receive code: ") + } + if c.GlobalString("out") != "" { + os.Chdir(c.GlobalString("out")) + } + + cr, err := croc.New(crocOptions) + if err != nil { return } From 7fcf45cece5d4ae9db771d86a5b3069db85117f8 Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Thu, 18 Jul 2019 06:06:56 -0700 Subject: [PATCH 08/10] remove unused code --- src/cli/cli.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 8c72346..3afa945 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -94,10 +94,6 @@ func Run() (err error) { return app.Run(os.Args) } -// func saveDefaultConfig(c *cli.Context) error { -// return croc.SaveDefaultConfig() -// } - func getConfigDir() (homedir string, err error) { homedir, err = os.UserHomeDir() if err != nil { @@ -329,14 +325,3 @@ func relay(c *cli.Context) (err error) { } return tcp.Run(debugString, ports[0], tcpPorts) } - -// func dirSize(path string) (int64, error) { -// var size int64 -// err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error { -// if !info.IsDir() { -// size += info.Size() -// } -// return err -// }) -// return size, err -// } From 256e0c51fa14522b3f4cfd2a8a0410e7a068884b Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Thu, 18 Jul 2019 06:13:11 -0700 Subject: [PATCH 09/10] add save file for receiver --- src/cli/cli.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cli/cli.go b/src/cli/cli.go index 3afa945..300b8f1 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -284,6 +284,9 @@ func receive(c *cli.Context) (err error) { if !c.GlobalIsSet("relay") { crocOptions.RelayAddress = rememberedOptions.RelayAddress } + if !c.GlobalIsSet("yes") { + crocOptions.NoPrompt = rememberedOptions.NoPrompt + } if crocOptions.SharedSecret == "" { crocOptions.SharedSecret = rememberedOptions.SharedSecret } @@ -297,10 +300,27 @@ func receive(c *cli.Context) (err error) { } cr, err := croc.New(crocOptions) - if err != nil { return } + + // save the config + if c.GlobalBool("remember") { + log.Debug("saving config file") + var bConfig []byte + bConfig, err = json.MarshalIndent(crocOptions, "", " ") + if err != nil { + log.Error(err) + return + } + err = ioutil.WriteFile(configFile, bConfig, 0644) + if err != nil { + log.Error(err) + return + } + log.Debugf("wrote %s", configFile) + } + err = cr.Receive() return } From edc97915bdfd35cc41180f5c995762413ecfe86c Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Thu, 18 Jul 2019 06:17:15 -0700 Subject: [PATCH 10/10] don't keep debug --- src/cli/cli.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cli/cli.go b/src/cli/cli.go index 300b8f1..e63a285 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -112,6 +112,8 @@ func send(c *cli.Context) (err error) { if c.GlobalBool("debug") { log.SetLevel("debug") log.Debug("debug mode on") + } else { + log.SetLevel("info") } configFile, err := getConfigDir() if err != nil { @@ -265,6 +267,8 @@ func receive(c *cli.Context) (err error) { if c.GlobalBool("debug") { log.SetLevel("debug") log.Debug("debug mode on") + } else { + log.SetLevel("info") } configFile, err := getConfigDir() if err != nil {