diff --git a/cmd/lotus-shed/cid.go b/cmd/lotus-shed/cid.go index 7839ec601..76ab8ec8e 100644 --- a/cmd/lotus-shed/cid.go +++ b/cmd/lotus-shed/cid.go @@ -5,38 +5,55 @@ import ( "encoding/hex" "fmt" - "github.com/urfave/cli/v2" - "github.com/ipfs/go-cid" mh "github.com/multiformats/go-multihash" + "github.com/urfave/cli/v2" + "golang.org/x/xerrors" ) var cidCmd = &cli.Command{ - Name: "cid", + Name: "cid", + Usage: "Cid command", Subcommands: cli.Commands{ cidIdCmd, }, } var cidIdCmd = &cli.Command{ - Name: "id", - Usage: "create identity CID from hex or base64 data", + Name: "id", + Usage: "Create identity CID from hex or base64 data", + ArgsUsage: "[data]", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "encoding", + Value: "base64", + Usage: "specify input encoding to parse", + }, + }, Action: func(cctx *cli.Context) error { if !cctx.Args().Present() { return fmt.Errorf("must specify data") } - dec, err := hex.DecodeString(cctx.Args().First()) - if err != nil { - dec, err = base64.StdEncoding.DecodeString(cctx.Args().First()) + var dec []byte + switch cctx.String("encoding") { + case "base64": + data, err := base64.StdEncoding.DecodeString(cctx.Args().First()) if err != nil { - return err + return xerrors.Errorf("decoding base64 value: %w", err) } - + dec = data + case "hex": + data, err := hex.DecodeString(cctx.Args().First()) + if err != nil { + return xerrors.Errorf("decoding hex value: %w", err) + } + dec = data + default: + return xerrors.Errorf("unrecognized encoding: %s", cctx.String("encoding")) } builder := cid.V1Builder{Codec: cid.Raw, MhType: mh.IDENTITY} - c, err := builder.Sum(dec) if err != nil { return err