8
8
9
9
"github.com/snyk/error-catalog-golang-public/cli"
10
10
"github.com/snyk/go-application-framework/internal/api"
11
+ "github.com/snyk/go-application-framework/internal/api/contract"
11
12
policyApi "github.com/snyk/go-application-framework/internal/api/policy/2024-10-15"
12
13
"github.com/snyk/go-application-framework/pkg/configuration"
13
14
"github.com/snyk/go-application-framework/pkg/local_workflows/local_models"
@@ -40,26 +41,55 @@ func addCreateIgnoreDefaultConfigurationValues(invocationCtx workflow.Invocation
40
41
41
42
config .AddDefaultValue (ReasonKey , func (_ configuration.Configuration , existingValue interface {}) (interface {}, error ) {
42
43
isSet := config .IsSet (ReasonKey )
43
- return defaultFuncWithValidator (existingValue , isSet , isValidReason )
44
+ reasonRequired := config .GetBool (ConfigIgnoreReasonRequired )
45
+ return defaultFuncWithValidator (existingValue , isSet , getReasonValidator (reasonRequired ))
44
46
})
45
47
}
46
48
49
+ func getOrgIgnoreSettings (engine workflow.Engine ) (* contract.OrgSettingsResponse , error ) {
50
+ config := engine .GetConfiguration ()
51
+ org := config .GetString (configuration .ORGANIZATION )
52
+ client := engine .GetNetworkAccess ().GetHttpClient ()
53
+ url := config .GetString (configuration .API_URL )
54
+ apiClient := api .NewApi (url , client )
55
+
56
+ settings , err := apiClient .GetOrgSettings (org )
57
+ if err != nil {
58
+ engine .GetLogger ().Err (err ).Msg ("Failed to access settings." )
59
+ return nil , err
60
+ }
61
+
62
+ engine .GetConfiguration ().Set (ConfigIgnoreSettings , settings )
63
+ return settings , nil
64
+ }
65
+
66
+ func getOrgIgnoreSettingsConfig (engine workflow.Engine ) configuration.DefaultValueFunction {
67
+ callback := func (_ configuration.Configuration , existingValue interface {}) (interface {}, error ) {
68
+ if existingValue != nil {
69
+ return existingValue , nil
70
+ }
71
+
72
+ response , err := getOrgIgnoreSettings (engine )
73
+ if err != nil {
74
+ engine .GetLogger ().Err (err ).Msg ("Failed to access settings." )
75
+ return nil , err
76
+ }
77
+
78
+ return response , nil
79
+ }
80
+ return callback
81
+ }
82
+
47
83
func getOrgIgnoreApprovalEnabled (engine workflow.Engine ) configuration.DefaultValueFunction {
48
84
return func (_ configuration.Configuration , existingValue interface {}) (interface {}, error ) {
49
85
if existingValue != nil {
50
86
return existingValue , nil
51
87
}
52
88
53
- config := engine .GetConfiguration ()
54
- org := config .GetString (configuration .ORGANIZATION )
55
- client := engine .GetNetworkAccess ().GetHttpClient ()
56
- url := config .GetString (configuration .API_URL )
57
- apiClient := api .NewApi (url , client )
58
-
59
- settings , err := apiClient .GetOrgSettings (org )
89
+ settings , err := getOrgIgnoreSettings (engine )
60
90
if err != nil {
61
91
engine .GetLogger ().Err (err ).Msg ("Failed to access settings." )
62
- return nil , err
92
+ return false , err
63
93
}
64
94
65
95
if settings .Ignores != nil && settings .Ignores .ApprovalWorkflowEnabled {
@@ -70,6 +100,26 @@ func getOrgIgnoreApprovalEnabled(engine workflow.Engine) configuration.DefaultVa
70
100
}
71
101
}
72
102
103
+ func getOrgIgnoreReasonRequired (engine workflow.Engine ) configuration.DefaultValueFunction {
104
+ return func (_ configuration.Configuration , existingValue interface {}) (interface {}, error ) {
105
+ if existingValue != nil {
106
+ return existingValue , nil
107
+ }
108
+
109
+ settings , err := getOrgIgnoreSettings (engine )
110
+ if err != nil {
111
+ engine .GetLogger ().Err (err ).Msg ("Failed to access settings." )
112
+ return false , err
113
+ }
114
+
115
+ if settings .Ignores != nil {
116
+ return settings .Ignores .ReasonRequired , nil
117
+ }
118
+
119
+ return false , nil
120
+ }
121
+ }
122
+
73
123
func remoteRepoUrlDefaultFunc (existingValue interface {}, config configuration.Configuration ) (interface {}, error ) {
74
124
if existingValue != nil && existingValue != "" {
75
125
return existingValue , nil
@@ -148,6 +198,16 @@ func isValidFindingsId(input string) error {
148
198
return nil
149
199
}
150
200
201
+ func getReasonValidator (reasonRequired bool ) func (string ) error {
202
+ if reasonRequired {
203
+ return isValidReason
204
+ }
205
+
206
+ return func (input string ) error {
207
+ return nil
208
+ }
209
+ }
210
+
151
211
func isValidReason (input string ) error {
152
212
if input == "" {
153
213
return cli .NewValidationFailureError ("The ignore reason cannot be empty. Provide a justification for ignoring this finding." )
0 commit comments