From 42f46841c0da526f39ce35833fb6cdc02c6d7efb Mon Sep 17 00:00:00 2001 From: Toru Maesaka Date: Thu, 5 Jun 2025 13:07:43 -0700 Subject: [PATCH 1/3] go.mod: bump go from 1.23 to 1.24 --- go.mod | 6 +++--- go.sum | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ee45c1b..2eae675 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module github.com/chronohq/puff -go 1.23.0 +go 1.24.0 -require github.com/urfave/cli/v2 v2.27.4 +require github.com/urfave/cli/v2 v2.27.6 require ( - github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/google/uuid v1.6.0 github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect diff --git a/go.sum b/go.sum index d6e8a42..99eba3e 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,14 @@ github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= +github.com/urfave/cli/v2 v2.27.6 h1:VdRdS98FNhKZ8/Az8B7MTyGQmpIr36O1EHybx/LaZ4g= +github.com/urfave/cli/v2 v2.27.6/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= From 4f1163d18d9f9658c2024dbd695c681ea7bd6899 Mon Sep 17 00:00:00 2001 From: Toru Maesaka Date: Thu, 5 Jun 2025 13:26:26 -0700 Subject: [PATCH 2/3] main: add a --suffix option --- main.go | 51 ++++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/main.go b/main.go index 2de59ed..b91d78e 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,7 @@ const ( delimiterParam = "delimiter" numParam = "num" outputParam = "output" + suffixParam = "suffix" urlSafeParam = "url-safe" uuidVersionParam = "version" @@ -110,6 +111,7 @@ func printError(w io.Writer, err error) { // delimiter, except the final value. func generateHex(c *cli.Context) error { iterations := c.Int(numParam) + suffix := c.String(suffixParam) if iterations <= 0 { printError(c.App.ErrWriter, errInvalidIterations) @@ -122,7 +124,7 @@ func generateHex(c *cli.Context) error { return errBlankDelimiter } - for i := 0; i < iterations; i++ { + for i := range iterations { src, err := randomBytes(c.Int(bytesParam)) if err != nil { @@ -133,7 +135,7 @@ func generateHex(c *cli.Context) error { delimiter = defaultDelimiter } - fmt.Printf("%s%s", hex.EncodeToString(src), delimiter) + fmt.Printf("%s%s%s", hex.EncodeToString(src), suffix, delimiter) } return nil @@ -145,6 +147,7 @@ func generateUUID(c *cli.Context) error { version := c.Int(uuidVersionParam) compact := c.Bool(compactParam) iterations := c.Int(numParam) + suffix := c.String(suffixParam) if version != uuidV4 && version != uuidV7 { return paintError(errors.New("invalid uuid version (supported: 4, 7)")) @@ -185,7 +188,7 @@ func generateUUID(c *cli.Context) error { delimiter = defaultDelimiter } - fmt.Printf("%s%s", line, delimiter) + fmt.Printf("%s%s%s", line, suffix, delimiter) } return nil @@ -198,6 +201,7 @@ func generateBase64(c *cli.Context) error { iterations := c.Int(numParam) delimiter := resolveDelimiter(c.String(delimiterParam)) urlSafe := c.Bool(urlSafeParam) + suffix := c.String(suffixParam) if len(delimiter) == 0 { return paintError(errBlankDelimiter) @@ -215,9 +219,9 @@ func generateBase64(c *cli.Context) error { } if urlSafe { - fmt.Printf("%s%s", base64.RawURLEncoding.EncodeToString(src), delimiter) + fmt.Printf("%s%s%s", base64.RawURLEncoding.EncodeToString(src), suffix, delimiter) } else { - fmt.Printf("%s%s", base64.StdEncoding.EncodeToString(src), delimiter) + fmt.Printf("%s%s%s", base64.StdEncoding.EncodeToString(src), suffix, delimiter) } } @@ -253,6 +257,19 @@ func generateBinaryBlob(c *cli.Context) error { } func main() { + delimiterFlag := &cli.StringFlag{ + Name: "delimiter", + Aliases: []string{"d"}, + Usage: "delimiter between values", + Value: defaultDelimiter, + } + + suffixFlag := &cli.StringFlag{ + Name: "suffix", + Aliases: []string{"s"}, + Usage: "optional value to append to the values", + } + app := &cli.App{ Name: "puff", Usage: "Generate random values in different formats", @@ -275,12 +292,8 @@ func main() { Usage: "number of hex strings to generate", Value: 1, }, - &cli.StringFlag{ - Name: "delimiter", - Aliases: []string{"d"}, - Usage: "delimiter between values", - Value: defaultDelimiter, - }, + delimiterFlag, + suffixFlag, }, }, { @@ -304,12 +317,8 @@ func main() { Name: "compact", Usage: "print uuid strings without dashes", }, - &cli.StringFlag{ - Name: "delimiter", - Aliases: []string{"d"}, - Usage: "value separator", - Value: defaultDelimiter, - }, + delimiterFlag, + suffixFlag, }, }, { @@ -329,16 +338,12 @@ func main() { Usage: "number of base64 strings to generate", Value: 1, }, - &cli.StringFlag{ - Name: "delimiter", - Aliases: []string{"d"}, - Usage: "value separator", - Value: defaultDelimiter, - }, &cli.BoolFlag{ Name: "url-safe", Usage: "use url-safe encoding", }, + delimiterFlag, + suffixFlag, }, }, { From bdf7bea80e4737a8eb5b3ce86353947b9cb733db Mon Sep 17 00:00:00 2001 From: Toru Maesaka Date: Thu, 5 Jun 2025 13:40:19 -0700 Subject: [PATCH 3/3] README.md: document the --suffix option --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 27d54d3..a8e9d88 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,11 @@ puff hex --bytes 32 # Print hex-encoded values separated by a comma puff hex -n 2 --delimiter "," d4bc48da024a728fee985a6257e88611,63100951b7ff67de3f7e9c1d0b98101d + +# Print hex-encoded values with a custom suffix +puff hex -n 2 --suffix ".png" +2259c58f9a774fe171720349cd715bed.png +314fb96973ccf36ef579fcaa9303ddcc.png ``` ### Print UUIDs as Hexadecimal Values @@ -76,6 +81,11 @@ puff uuid -n 2 --compact # Print a compact, dash-less UUID version 4 value puff uuid --version 4 --compact f357e1d4dc0d4aa285cb7cef37cb3ad0 + +# Print UUIDs with a custom suffix +puff uuid -n 2 --compact --suffix ".png" +019741d0e7dc77188cebae635ceb67a2.png +019741d0e7dc773797d7c695b0402434.png ``` ### Print Base64 Values (Default: 16 Bytes) @@ -94,6 +104,10 @@ YPjRDxaUYFkurRAhz0MUzzl8Hh3Y0Z79DZcrJX5R/4g= # Print a base64-encoded value using URL-safe encoding puff base64 --url-safe 7KtUKGFAvVHoDdsQDIuRtQ + +# Print a URL-safe base64-encoded with custom suffix +puff base64 --url-safe --suffix ".png" +BvOqihvrdg2kmtPQaxKx6A.png ``` ### Create a Binary File with Random Bytes