diff --git a/go.mod b/go.mod index a038a21..7902c73 100644 --- a/go.mod +++ b/go.mod @@ -32,6 +32,7 @@ require ( github.com/mattn/go-sqlite3 v1.14.6 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/ugorji/go/codec v1.2.6 // indirect golang.org/x/sys v0.0.0-20210923061019-b8560ed6a9b7 // indirect diff --git a/go.sum b/go.sum index 93ae7d0..f6c15fc 100644 --- a/go.sum +++ b/go.sum @@ -65,6 +65,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/pkg/client/codec.go b/pkg/client/codec.go index 5d11bce..82cb2c0 100644 --- a/pkg/client/codec.go +++ b/pkg/client/codec.go @@ -4,11 +4,14 @@ import ( "encoding/base64" "encoding/hex" "fmt" + + "github.com/mr-tron/base58" ) const ( CodecNone = "none" CodecHex = "hex" + CodecBase58 = "base58" CodecBase64 = "base64" ) @@ -19,7 +22,7 @@ var ( func SetBinaryCodec(codec string) error { switch codec { - case CodecNone, CodecHex, CodecBase64: + case CodecNone, CodecHex, CodecBase58, CodecBase64: BinaryCodec = codec default: return fmt.Errorf("invalid binary codec: %v", codec) @@ -32,6 +35,8 @@ func encodeBinaryData(data []byte, codec string) string { switch codec { case CodecHex: return hex.EncodeToString(data) + case CodecBase58: + return base58.Encode(data) case CodecBase64: return base64.StdEncoding.EncodeToString(data) default: diff --git a/pkg/client/codec_test.go b/pkg/client/codec_test.go index 1c25f1d..a54357a 100644 --- a/pkg/client/codec_test.go +++ b/pkg/client/codec_test.go @@ -13,6 +13,7 @@ func TestSetBinaryCodec(t *testing.T) { err error }{ {input: CodecNone, err: nil}, + {input: CodecBase58, err: nil}, {input: CodecBase64, err: nil}, {input: CodecHex, err: nil}, {input: "foobar", err: errors.New("invalid binary codec: foobar")}, @@ -37,6 +38,7 @@ func Test_encodeBinaryData(t *testing.T) { encoding string }{ {input: "hello world", expected: "hello world", encoding: CodecNone}, + {input: "hello world", expected: "StV1DL6CwTryKyV", encoding: CodecBase58}, {input: "hello world", expected: "aGVsbG8gd29ybGQ=", encoding: CodecBase64}, {input: "hello world", expected: "68656c6c6f20776f726c64", encoding: CodecHex}, } diff --git a/pkg/command/options.go b/pkg/command/options.go index 85f6490..261601e 100644 --- a/pkg/command/options.go +++ b/pkg/command/options.go @@ -42,7 +42,7 @@ type Options struct { ConnectionIdleTimeout int `long:"idle-timeout" description:"Set connection idle timeout in minutes" default:"180"` Cors bool `long:"cors" description:"Enable Cross-Origin Resource Sharing (CORS)"` CorsOrigin string `long:"cors-origin" description:"Allowed CORS origins" default:"*"` - BinaryCodec string `long:"binary-codec" description:"Codec for binary data serialization"` + BinaryCodec string `long:"binary-codec" description:"Codec for binary data serialization, one of 'none', 'hex', 'base58', 'base64'" default:"base64"` } var Opts Options