package service import ( "context" "fmt" "github.com/pkg/errors" "github.com/urfave/cli" ) func exportCommands(client *Client) []cli.Command { return []cli.Command{ cli.Command{ Name: "export", Usage: "Export a key", Flags: []cli.Flag{ cli.StringFlag{Name: "kid, k", Usage: "kid"}, cli.StringFlag{Name: "type, t", Value: "default", Usage: "default, ssh"}, cli.BoolFlag{Name: "public", Usage: "export public part only"}, cli.StringFlag{Name: "password, p", Usage: "password"}, cli.BoolFlag{Name: "no-password", Usage: "export without password"}, }, Action: func(c *cli.Context) error { kid, err := argString(c, "kid", false) if err != nil { return err } typ, err := exportTypeFromString(c.String("type")) if err != nil { return err } password := c.String("password") public := c.Bool("public") noPassword := c.Bool("no-password") if !public && !noPassword { if len(password) == 0 { p, err := readVerifyPassword("Enter the password:") if err != nil { return err } password = p } } req := &KeyExportRequest{ KID: kid, Password: password, Type: typ, Public: public, NoPassword: noPassword, } resp, err := client.RPCClient().KeyExport(context.TODO(), req) if err != nil { return err } fmt.Println(string(resp.Export)) return nil }, }, } } func exportTypeFromString(s string) (ExportType, error) { switch s { case "", "default": return DefaultExport, nil case "ssh": return SSHExport, nil default: return DefaultExport, errors.Errorf("invalid type: %s", s) } }