Skip to content

Commit 9767cd5

Browse files
Balijepalli Vamshi Krishnavarunsh-coder
authored andcommitted
add actionMap as a argument to secure workflow
1 parent 5743da9 commit 9767cd5

File tree

4 files changed

+37
-58
lines changed

4 files changed

+37
-58
lines changed

remediation/workflow/maintainedactions/maintainedActions.go

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"encoding/json"
55
"fmt"
66
"io/ioutil"
7-
"path/filepath"
87
"strings"
98

109
"github.com/step-security/secure-repo/remediation/workflow/metadata"
@@ -32,10 +31,8 @@ type replacement struct {
3231
}
3332

3433
// LoadMaintainedActions loads the maintained actions from the JSON file
35-
func LoadMaintainedActions() (map[string]string, error) {
34+
func LoadMaintainedActions(jsonPath string) (map[string]string, error) {
3635
// Read the JSON file
37-
jsonPath := filepath.Join("maintainedactions", "maintainedActions.json")
38-
// jsonPath := filepath.Join("maintainedActions.json")
3936
data, err := ioutil.ReadFile(jsonPath)
4037
if err != nil {
4138
return nil, fmt.Errorf("failed to read maintained actions file: %v", err)
@@ -59,14 +56,13 @@ func LoadMaintainedActions() (map[string]string, error) {
5956
}
6057

6158
// ReplaceActions replaces original actions with Step Security actions in a workflow
62-
func ReplaceActions(inputYaml string, customerMaintainedActions []string) (string, bool, error) {
59+
func ReplaceActions(inputYaml string, customerMaintainedActions map[string]string) (string, bool, error) {
6360
workflow := metadata.Workflow{}
6461
updated := false
65-
actionMap, err := LoadMaintainedActions()
66-
if err != nil {
67-
return "", updated, fmt.Errorf("unable to load maintained actions: %v", err)
68-
}
69-
err = yaml.Unmarshal([]byte(inputYaml), &workflow)
62+
63+
actionMap := customerMaintainedActions
64+
65+
err := yaml.Unmarshal([]byte(inputYaml), &workflow)
7066
if err != nil {
7167
return "", updated, fmt.Errorf("unable to parse yaml: %v", err)
7268
}
@@ -83,9 +79,6 @@ func ReplaceActions(inputYaml string, customerMaintainedActions []string) (strin
8379
// fmt.Println("step ", step.Uses)
8480
actionName := strings.Split(step.Uses, "@")[0]
8581
if newAction, ok := actionMap[actionName]; ok {
86-
if isMaintained(newAction, customerMaintainedActions) {
87-
continue
88-
}
8982
latestVersion, err := GetLatestRelease(newAction)
9083
if err != nil {
9184
return "", updated, fmt.Errorf("unable to get latest release: %v", err)
@@ -148,12 +141,3 @@ func replaceAction(t *yaml.Node, inputLines []string, replacements []replacement
148141
}
149142
return inputLines, updated
150143
}
151-
152-
func isMaintained(actionName string, maintainedActions []string) bool {
153-
for _, maintainedAction := range maintainedActions {
154-
if maintainedAction == actionName {
155-
return true
156-
}
157-
}
158-
return false
159-
}

remediation/workflow/maintainedactions/maintainedactions_test.go

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,6 @@ func TestReplaceActions(t *testing.T) {
6969
wantUpdated: true,
7070
wantErr: false,
7171
},
72-
{
73-
name: "exemtedMaintainedActions.yml",
74-
inputFile: "exemtedMaintainedActions.yml",
75-
outputFile: "exemtedMaintainedActions.yml",
76-
wantUpdated: true,
77-
},
7872
}
7973

8074
for _, tt := range tests {
@@ -84,16 +78,12 @@ func TestReplaceActions(t *testing.T) {
8478
if err != nil {
8579
t.Fatalf("error reading input file: %v", err)
8680
}
87-
88-
// Call ReplaceActions
89-
var got string
90-
var updated bool
91-
var replaceErr error
92-
if tt.inputFile == "exemtedMaintainedActions.yml" {
93-
got, updated, replaceErr = ReplaceActions(string(input), []string{"step-security/git-restore-mtime-action"})
94-
} else {
95-
got, updated, replaceErr = ReplaceActions(string(input), []string{})
81+
actionMap, err := LoadMaintainedActions("maintainedActions.json")
82+
if err != nil {
83+
t.Errorf("ReplaceActions() unable to json file %v", err)
84+
return
9685
}
86+
got, updated, replaceErr := ReplaceActions(string(input), actionMap)
9787

9888
// Check error
9989
if (replaceErr != nil) != tt.wantErr {

remediation/workflow/secureworkflow.go

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package workflow
22

33
import (
4-
"encoding/json"
54
"log"
65

76
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface"
@@ -18,10 +17,10 @@ const (
1817
)
1918

2019
func SecureWorkflow(queryStringParams map[string]string, inputYaml string, svc dynamodbiface.DynamoDBAPI, params ...interface{}) (*permissions.SecureWorkflowReponse, error) {
21-
pinActions, addHardenRunner, addPermissions, addProjectComment, addMaintainedActions := true, true, true, true, true
22-
pinnedActions, addedHardenRunner, addedPermissions, addedMaintainedActions := false, false, false, false
20+
pinActions, addHardenRunner, addPermissions, addProjectComment, replaceMaintainedActions := true, true, true, true, false
21+
pinnedActions, addedHardenRunner, addedPermissions, replacedMaintainedActions := false, false, false, false
2322
ignoreMissingKBs := false
24-
exemptedActions, pinToImmutable, customerMaintainedActions := []string{}, false, []string{}
23+
exemptedActions, pinToImmutable, customerMaintainedActions := []string{}, false, map[string]string{}
2524
if len(params) > 0 {
2625
if v, ok := params[0].([]string); ok {
2726
exemptedActions = v
@@ -33,7 +32,7 @@ func SecureWorkflow(queryStringParams map[string]string, inputYaml string, svc d
3332
}
3433
}
3534
if len(params) > 2 {
36-
if v, ok := params[2].([]string); ok {
35+
if v, ok := params[2].(map[string]string); ok {
3736
customerMaintainedActions = v
3837
}
3938
}
@@ -58,17 +57,8 @@ func SecureWorkflow(queryStringParams map[string]string, inputYaml string, svc d
5857
addProjectComment = false
5958
}
6059

61-
if queryStringParams["enableLogging"] == "true" {
62-
enableLogging = true
63-
}
64-
65-
if enableLogging {
66-
// Log query parameters
67-
paramsJSON, _ := json.MarshalIndent(queryStringParams, "", " ")
68-
log.Printf("SecureWorkflow called with query parameters: %s", paramsJSON)
69-
70-
// Log input YAML (complete)
71-
log.Printf("Input YAML: %s", inputYaml)
60+
if len(customerMaintainedActions) > 0 {
61+
replaceMaintainedActions = true
7262
}
7363

7464
secureWorkflowReponse := &permissions.SecureWorkflowReponse{FinalOutput: inputYaml, OriginalInput: inputYaml}
@@ -114,8 +104,8 @@ func SecureWorkflow(queryStringParams map[string]string, inputYaml string, svc d
114104
addedPermissions = !secureWorkflowReponse.HasErrors
115105
}
116106

117-
if addMaintainedActions {
118-
secureWorkflowReponse.FinalOutput, addedMaintainedActions, err = maintainedactions.ReplaceActions(secureWorkflowReponse.FinalOutput, customerMaintainedActions)
107+
if replaceMaintainedActions {
108+
secureWorkflowReponse.FinalOutput, replacedMaintainedActions, err = maintainedactions.ReplaceActions(secureWorkflowReponse.FinalOutput, customerMaintainedActions)
119109
if err != nil {
120110
secureWorkflowReponse.HasErrors = true
121111
}
@@ -156,6 +146,6 @@ func SecureWorkflow(queryStringParams map[string]string, inputYaml string, svc d
156146
secureWorkflowReponse.PinnedActions = pinnedActions
157147
secureWorkflowReponse.AddedHardenRunner = addedHardenRunner
158148
secureWorkflowReponse.AddedPermissions = addedPermissions
159-
secureWorkflowReponse.AddedMaintainedActions = addedMaintainedActions
149+
secureWorkflowReponse.AddedMaintainedActions = replacedMaintainedActions
160150
return secureWorkflowReponse, nil
161151
}

remediation/workflow/secureworkflow_test.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"testing"
99

1010
"github.com/jarcoal/httpmock"
11+
"github.com/step-security/secure-repo/remediation/workflow/maintainedactions"
12+
"github.com/step-security/secure-repo/remediation/workflow/permissions"
1113
)
1214

1315
func TestSecureWorkflow(t *testing.T) {
@@ -202,7 +204,9 @@ func TestSecureWorkflow(t *testing.T) {
202204
{fileName: "error.yml", wantPinnedActions: false, wantAddedHardenRunner: false, wantAddedPermissions: false},
203205
}
204206
for _, test := range tests {
205-
input, err := ioutil.ReadFile(path.Join(inputDirectory, test.fileName))
207+
var err error
208+
var input []byte
209+
input, err = ioutil.ReadFile(path.Join(inputDirectory, test.fileName))
206210

207211
if err != nil {
208212
log.Fatal(err)
@@ -232,7 +236,18 @@ func TestSecureWorkflow(t *testing.T) {
232236
}
233237
queryParams["addProjectComment"] = "false"
234238

235-
output, err := SecureWorkflow(queryParams, string(input), &mockDynamoDBClient{})
239+
var output *permissions.SecureWorkflowReponse
240+
var actionMap map[string]string
241+
if test.fileName == "oneJob.yml" {
242+
actionMap, err = maintainedactions.LoadMaintainedActions("maintainedactions/maintainedActions.json")
243+
if err != nil {
244+
t.Errorf("unable to load the file %s", err)
245+
}
246+
output, err = SecureWorkflow(queryParams, string(input), &mockDynamoDBClient{}, []string{}, false, actionMap)
247+
248+
} else {
249+
output, err = SecureWorkflow(queryParams, string(input), &mockDynamoDBClient{})
250+
}
236251

237252
if err != nil {
238253
t.Errorf("Error not expected")

0 commit comments

Comments
 (0)