@@ -2,6 +2,7 @@ package convert
22
33import (
44 "encoding/base64"
5+ "encoding/hex"
56 "fmt"
67 "strings"
78
@@ -15,6 +16,9 @@ const (
1516
1617// GetBase64CaseCmd creates a helper command that encode/decode base64
1718func GetBase64CaseCmd() *cobra.Command {
19+ const flagShowBuffer = "show-buffer"
20+ const flagFromBuffer = "from-buffer"
21+
1822 cmd := &cobra.Command{
1923 Use: "base64 [input]",
2024 Short: fmt.Sprintf("Encode base64, use --%s to decode", flagDecode),
@@ -24,21 +28,40 @@ Support pipe.`, flagDecode),
2428 args, err := utils.ProvidedArgsOrFromPipe(args)
2529 utils.ExitOnErr(err, "failed to get args from pipe")
2630
27- if cmd.Flag(flagDecode).Changed {
31+ decode := cmd.Flag(flagDecode).Changed
32+ showBuffer := cmd.Flag(flagShowBuffer).Changed
33+ fromBuffer := cmd.Flag(flagFromBuffer).Changed
34+ if decode {
35+ if fromBuffer {
36+ panic(fmt.Sprintf("flag --%s is not supported on decoding mode", flagFromBuffer))
37+ }
2838 utils.RequireExactArgsCount(args, 1, cmd)
2939 utils.PrintlnStdErr("INF: decoding base64")
3040 data, err := base64.StdEncoding.DecodeString(args[0])
3141 utils.ExitOnErr(err, "failed to decode base64")
42+ if showBuffer {
43+ utils.PrintfStdErr("(buffer: %s)\n", hex.EncodeToString(data))
44+ }
3245 fmt.Println(string(data))
3346 } else {
3447 utils.RequireArgs(args, cmd)
3548 utils.PrintfStdErr("INF: encoding base64 (use --%s to decode)\n", flagDecode)
36- fmt.Println(base64.StdEncoding.EncodeToString([]byte(strings.Join(args, " "))))
49+ data := []byte(strings.Join(args, " "))
50+ if fromBuffer {
51+ data, err = hex.DecodeString(string(data))
52+ utils.ExitOnErr(err, "failed to decode hex buffer")
53+ }
54+ if showBuffer {
55+ utils.PrintfStdErr("(buffer: %s)\n", hex.EncodeToString(data))
56+ }
57+ fmt.Println(base64.StdEncoding.EncodeToString(data))
3758 }
3859 },
3960 }
4061
4162 cmd.Flags().BoolP(flagDecode, "d", false, "decode base64 instead of encode")
63+ cmd.Flags().Bool(flagShowBuffer, false, "show buffer in hex format")
64+ cmd.Flags().Bool(flagFromBuffer, false, "input is hex buffer, effective ONLY on encoding")
4265
4366 return cmd
4467}
0 commit comments