Skip to content

Commit 98c455f

Browse files
authored
Merge pull request #17 from bcdevtools/imp/improve-command-base64
imp: support show/from buffer for base64 cmd
2 parents e190031 + 807123f commit 98c455f

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ devd convert case [input] --upper
183183

184184
***Support pipe***
185185
```bash
186-
devd convert base64 [input]
186+
devd convert base64 [input] [--show-buffer] [--from-buffer]
187187
# devd c base64 123
188188
# echo 123 | devd c base64
189189
devd convert base64 [base64] --decode

cmd/convert/base64.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package convert
22

33
import (
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
1718
func 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

Comments
 (0)