diff --git a/cmd/obscure/obscure.go b/cmd/obscure/obscure.go index 38f70c14a..84ae266b8 100644 --- a/cmd/obscure/obscure.go +++ b/cmd/obscure/obscure.go @@ -3,6 +3,9 @@ package obscure import ( "fmt" + "io/ioutil" + "os" + "github.com/rclone/rclone/cmd" "github.com/rclone/rclone/fs/config/obscure" "github.com/spf13/cobra" @@ -26,13 +29,29 @@ Many equally important things (like access tokens) are not obscured in the config file. However it is very hard to shoulder surf a 64 character hex token. +This command can also accept a password through STDIN instead of an +argument by passing a hyphen as an argument. Example: + +echo "secretpassword" | rclone obscure - + +If there is no data on STDIN to read, rclone obscure will default to +obfuscating the hyphen itself. + If you want to encrypt the config file then please use config file encryption - see [rclone config](/commands/rclone_config/) for more info.`, Run: func(command *cobra.Command, args []string) { cmd.CheckArgs(1, 1, command, args) + var password string + fi, _ := os.Stdin.Stat() + if args[0] == "-" && (fi.Mode()&os.ModeCharDevice) == 0 { + bytes, _ := ioutil.ReadAll(os.Stdin) + password = string(bytes) + } else { + password = args[0] + } cmd.Run(false, false, command, func() error { - obscured := obscure.MustObscure(args[0]) + obscured := obscure.MustObscure(password) fmt.Println(obscured) return nil })