go-passbolt-cli/resource/update.go

109 lines
2.5 KiB
Go

package resource
import (
"context"
"fmt"
"github.com/passbolt/go-passbolt-cli/util"
"github.com/passbolt/go-passbolt/helper"
"github.com/spf13/cobra"
)
// ResourceUpdateCmd Updates a Passbolt Resource
var ResourceUpdateCmd = &cobra.Command{
Use: "resource",
Short: "Updates a Passbolt Resource",
Long: `Updates a Passbolt Resource`,
RunE: ResourceUpdate,
}
func init() {
ResourceUpdateCmd.Flags().String("id", "", "id of Resource to Update")
ResourceUpdateCmd.Flags().StringP("name", "n", "", "Resource Name")
ResourceUpdateCmd.Flags().StringP("username", "u", "", "Resource Username")
ResourceUpdateCmd.Flags().String("uri", "", "Resource URI")
ResourceUpdateCmd.Flags().StringP("password", "p", "", "Resource Password")
ResourceUpdateCmd.Flags().StringP("description", "d", "", "Resource Description")
ResourceUpdateCmd.Flags().String("expired", "", "Expiry date/time (ISO8601), e.g. 2025-12-31T23:59:59Z; use empty to clear with --clear-expired")
ResourceUpdateCmd.Flags().Bool("clear-expired", false, "Clear expiry (sets expired to null)")
ResourceUpdateCmd.MarkFlagRequired("id")
}
func ResourceUpdate(cmd *cobra.Command, args []string) error {
id, err := cmd.Flags().GetString("id")
if err != nil {
return err
}
name, err := cmd.Flags().GetString("name")
if err != nil {
return err
}
username, err := cmd.Flags().GetString("username")
if err != nil {
return err
}
uri, err := cmd.Flags().GetString("uri")
if err != nil {
return err
}
password, err := cmd.Flags().GetString("password")
if err != nil {
return err
}
description, err := cmd.Flags().GetString("description")
if err != nil {
return err
}
expired, err := cmd.Flags().GetString("expired")
if err != nil {
return err
}
clearExpired, err := cmd.Flags().GetBool("clear-expired")
if err != nil {
return err
}
ctx := util.GetContext()
client, err := util.GetClient(ctx)
if err != nil {
return err
}
defer client.Logout(context.TODO())
cmd.SilenceUsage = true
err = helper.UpdateResource(
ctx,
client,
id,
name,
username,
uri,
password,
description,
)
if err != nil {
return fmt.Errorf("Updating Resource: %w", err)
}
if clearExpired {
// explicit clear to null
_, _, err := client.DoCustomRequestAndReturnRawResponse(
ctx,
"PUT",
fmt.Sprintf("resources/%s.json", id),
"v2",
map[string]*string{"expired": nil},
nil,
)
if err != nil {
return fmt.Errorf("Clearing expiry: %w", err)
}
} else if expired != "" {
if err := SetResourceExpiry(ctx, client, id, expired); err != nil {
return err
}
}
return nil
}