@@ -6,12 +6,10 @@ import (
66
77 "github.com/google/cel-go/cel"
88 "github.com/passbolt/go-passbolt-cli/util"
9- "github.com/passbolt/go-passbolt/api"
10- "github.com/passbolt/go-passbolt/helper"
119)
1210
13- // Environments for CEl
14- var celEnvOptions = []cel.EnvOption {
11+ // CelEnvOptions defines the CEL environment for resource filtering
12+ var CelEnvOptions = []cel.EnvOption {
1513 cel .Variable ("ID" , cel .StringType ),
1614 cel .Variable ("FolderParentID" , cel .StringType ),
1715 cel .Variable ("Name" , cel .StringType ),
@@ -23,48 +21,42 @@ var celEnvOptions = []cel.EnvOption{
2321 cel .Variable ("ModifiedTimestamp" , cel .TimestampType ),
2422}
2523
26- // Filters the slice resources by invoke CEL program for each resource
27- func filterResources (resources * []api. Resource , celCmd string , ctx context.Context , client * api. Client ) ([]api. Resource , error ) {
24+ // filterDecryptedResources filters already-decrypted resources by evaluating a CEL expression.
25+ func filterDecryptedResources (resources [] decryptedResource , celCmd string , ctx context.Context ) ([]decryptedResource , error ) {
2826 if celCmd == "" {
29- return * resources , nil
27+ return resources , nil
3028 }
3129
32- program , err := util .InitCELProgram (celCmd , celEnvOptions ... )
30+ program , err := util .InitCELProgram (celCmd , CelEnvOptions ... )
3331 if err != nil {
3432 return nil , err
3533 }
3634
37- filteredResources := []api.Resource {}
38- for _ , resource := range * resources {
39- // TODO We should decrypt the secret only when required for performance reasonse
40- _ , name , username , uri , pass , desc , err := helper .GetResource (ctx , client , resource .ID )
41- if err != nil {
42- return nil , fmt .Errorf ("Get Resource %w" , err )
43- }
44-
35+ filtered := []decryptedResource {}
36+ for _ , d := range resources {
4537 val , _ , err := (* program ).ContextEval (ctx , map [string ]any {
46- "Id " : resource .ID ,
47- "FolderParentID" : resource .FolderParentID ,
48- "Name" : name ,
49- "Username" : username ,
50- "URI" : uri ,
51- "Password" : pass ,
52- "Description" : desc ,
53- "CreatedTimestamp" : resource .Created .Time ,
54- "ModifiedTimestamp" : resource .Modified .Time ,
38+ "ID " : d . resource .ID ,
39+ "FolderParentID" : d . resource .FolderParentID ,
40+ "Name" : d . name ,
41+ "Username" : d . username ,
42+ "URI" : d . uri ,
43+ "Password" : d . password ,
44+ "Description" : d . description ,
45+ "CreatedTimestamp" : d . resource .Created .Time ,
46+ "ModifiedTimestamp" : d . resource .Modified .Time ,
5547 })
5648
5749 if err != nil {
5850 return nil , err
5951 }
6052
6153 if val .Value () == true {
62- filteredResources = append (filteredResources , resource )
54+ filtered = append (filtered , d )
6355 }
6456 }
6557
66- if len (filteredResources ) == 0 {
58+ if len (filtered ) == 0 {
6759 return nil , fmt .Errorf ("No such Resources found with filter %v!" , celCmd )
6860 }
69- return filteredResources , nil
61+ return filtered , nil
7062}
0 commit comments