Added commands for base64 and JWT decoding
This commit is contained in:
parent
d1f51f5d7b
commit
44e4d09c3a
1 changed files with 69 additions and 0 deletions
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -123,6 +124,32 @@ var TextFilters = map[string]TextProcessor{
|
||||||
return TextFilterResponse{Output: result}, nil
|
return TextFilterResponse{Output: result}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"compact-json": {
|
||||||
|
Label: "JSON: Compact",
|
||||||
|
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
||||||
|
var (
|
||||||
|
dst bytes.Buffer
|
||||||
|
inBfr bytes.Buffer
|
||||||
|
outBfr bytes.Buffer
|
||||||
|
)
|
||||||
|
|
||||||
|
scnr := bufio.NewScanner(strings.NewReader(input))
|
||||||
|
for scnr.Scan() {
|
||||||
|
line := scnr.Text()
|
||||||
|
inBfr.WriteString(line)
|
||||||
|
inBfr.WriteString("\n")
|
||||||
|
|
||||||
|
if err := json.Compact(&outBfr, inBfr.Bytes()); err == nil {
|
||||||
|
dst.WriteString(outBfr.String())
|
||||||
|
dst.WriteString("\n")
|
||||||
|
inBfr.Reset()
|
||||||
|
outBfr.Reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TextFilterResponse{Output: dst.String() + inBfr.String()}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
"format-json": {
|
"format-json": {
|
||||||
Label: "JSON: Format",
|
Label: "JSON: Format",
|
||||||
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
||||||
|
|
@ -173,6 +200,48 @@ var TextFilters = map[string]TextProcessor{
|
||||||
return TextFilterResponse{Output: string(jsonBytes)}, nil
|
return TextFilterResponse{Output: string(jsonBytes)}, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"jwt-decode": {
|
||||||
|
Label: "JWT: Decode",
|
||||||
|
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
||||||
|
tokens := strings.Split(input, ".")
|
||||||
|
if len(tokens) != 3 {
|
||||||
|
return TextFilterResponse{}, errors.New("invalid JWT format")
|
||||||
|
}
|
||||||
|
|
||||||
|
header, err := base64.RawURLEncoding.DecodeString(tokens[0])
|
||||||
|
if err != nil {
|
||||||
|
return TextFilterResponse{}, err
|
||||||
|
}
|
||||||
|
payload, err := base64.RawURLEncoding.DecodeString(tokens[1])
|
||||||
|
if err != nil {
|
||||||
|
return TextFilterResponse{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var headerJSON, payloadJSON bytes.Buffer
|
||||||
|
json.Indent(&headerJSON, header, "", " ")
|
||||||
|
json.Indent(&payloadJSON, payload, "", " ")
|
||||||
|
|
||||||
|
return TextFilterResponse{Output: headerJSON.String() + "\n" + payloadJSON.String()}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"base64-decode": {
|
||||||
|
Label: "Base64: Decode",
|
||||||
|
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
||||||
|
dst, err := base64.StdEncoding.DecodeString(input)
|
||||||
|
if err != nil {
|
||||||
|
return TextFilterResponse{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return TextFilterResponse{Output: string(dst)}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"base64-encode": {
|
||||||
|
Label: "Base64: Encode",
|
||||||
|
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
||||||
|
dst := base64.StdEncoding.EncodeToString([]byte(input))
|
||||||
|
return TextFilterResponse{Output: dst}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
"lorem-ipsum": {
|
"lorem-ipsum": {
|
||||||
Label: "Generate: Lorem Ipsum",
|
Label: "Generate: Lorem Ipsum",
|
||||||
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
Filter: func(ctx context.Context, input string) (resp TextFilterResponse, err error) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue