From a3c466919c5d23112230f40d34b22d1cfdedd83b Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Mon, 11 Aug 2025 15:30:31 +0200 Subject: [PATCH] v5 Fix Resource Listing (#82) * Fix json Listing * Always Decrypt Resource --- resource/filter.go | 36 +++++++++++++----------------------- resource/list.go | 28 +++++++++++++--------------- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/resource/filter.go b/resource/filter.go index 2cc1f31..f84f7d8 100644 --- a/resource/filter.go +++ b/resource/filter.go @@ -5,8 +5,6 @@ import ( "fmt" "github.com/google/cel-go/cel" - "github.com/google/cel-go/common/types" - "github.com/google/cel-go/common/types/ref" "github.com/passbolt/go-passbolt-cli/util" "github.com/passbolt/go-passbolt/api" "github.com/passbolt/go-passbolt/helper" @@ -38,28 +36,20 @@ func filterResources(resources *[]api.Resource, celCmd string, ctx context.Conte filteredResources := []api.Resource{} for _, resource := range *resources { + // TODO We should decrypt the secret only when required for performance reasonse + _, name, username, uri, pass, desc, err := helper.GetResource(ctx, client, resource.ID) + if err != nil { + return nil, fmt.Errorf("Get Resource %w", err) + } + val, _, err := (*program).ContextEval(ctx, map[string]any{ - "Id": resource.ID, - "FolderParentID": resource.FolderParentID, - "Name": resource.Name, - "Username": resource.Username, - "URI": resource.URI, - "Password": func() ref.Val { - _, _, _, _, pass, _, err := helper.GetResource(ctx, client, resource.ID) - if err != nil { - fmt.Printf("Get Resource %v", err) - return types.String("") - } - return types.String(pass) - }, - "Description": func() ref.Val { - _, _, _, _, _, descr, err := helper.GetResource(ctx, client, resource.ID) - if err != nil { - fmt.Printf("Get Resource %v", err) - return types.String("") - } - return types.String(descr) - }, + "Id": resource.ID, + "FolderParentID": resource.FolderParentID, + "Name": name, + "Username": username, + "URI": uri, + "Password": pass, + "Description": desc, "CreatedTimestamp": resource.Created.Time, "ModifiedTimestamp": resource.Modified.Time, }) diff --git a/resource/list.go b/resource/list.go index 0e0280e..010930b 100644 --- a/resource/list.go +++ b/resource/list.go @@ -93,16 +93,16 @@ func ResourceList(cmd *cobra.Command, args []string) error { if jsonOutput { outputResources := []ResourceJsonOutput{} for i := range resources { - _, _, _, _, pass, desc, err := helper.GetResource(ctx, client, resources[i].ID) + _, name, username, uri, pass, desc, err := helper.GetResource(ctx, client, resources[i].ID) if err != nil { return fmt.Errorf("Get Resource %w", err) } outputResources = append(outputResources, ResourceJsonOutput{ ID: &resources[i].ID, FolderParentID: &resources[i].FolderParentID, - Name: &resources[i].Name, - Username: &resources[i].Username, - URI: &resources[i].URI, + Name: &name, + Username: &username, + URI: &uri, Password: &pass, Description: &desc, CreatedTimestamp: &resources[i].Created.Time, @@ -118,6 +118,12 @@ func ResourceList(cmd *cobra.Command, args []string) error { data := pterm.TableData{columns} for _, resource := range resources { + // TODO We should decrypt the secret only when required for performance reasonse + _, name, username, uri, pass, desc, err := helper.GetResource(ctx, client, resource.ID) + if err != nil { + return fmt.Errorf("Get Resource %w", err) + } + entry := make([]string, len(columns)) for i := range columns { switch strings.ToLower(columns[i]) { @@ -126,22 +132,14 @@ func ResourceList(cmd *cobra.Command, args []string) error { case "folderparentid": entry[i] = resource.FolderParentID case "name": - entry[i] = shellescape.StripUnsafe(resource.Name) + entry[i] = shellescape.StripUnsafe(name) case "username": - entry[i] = shellescape.StripUnsafe(resource.Username) + entry[i] = shellescape.StripUnsafe(username) case "uri": - entry[i] = shellescape.StripUnsafe(resource.URI) + entry[i] = shellescape.StripUnsafe(uri) case "password": - _, _, _, _, pass, _, err := helper.GetResource(ctx, client, resource.ID) - if err != nil { - return fmt.Errorf("Get Resource %w", err) - } entry[i] = shellescape.StripUnsafe(pass) case "description": - _, _, _, _, _, desc, err := helper.GetResource(ctx, client, resource.ID) - if err != nil { - return fmt.Errorf("Get Resource %w", err) - } entry[i] = shellescape.StripUnsafe(desc) case "createdtimestamp": entry[i] = resource.Created.Format(time.RFC3339)