88
99 "github.com/snyk/error-catalog-golang-public/cli"
1010 "github.com/snyk/go-application-framework/internal/api"
11+ "github.com/snyk/go-application-framework/internal/api/contract"
1112 policyApi "github.com/snyk/go-application-framework/internal/api/policy/2024-10-15"
1213 "github.com/snyk/go-application-framework/pkg/configuration"
1314 "github.com/snyk/go-application-framework/pkg/local_workflows/local_models"
@@ -40,26 +41,55 @@ func addCreateIgnoreDefaultConfigurationValues(invocationCtx workflow.Invocation
4041
4142 config .AddDefaultValue (ReasonKey , func (_ configuration.Configuration , existingValue interface {}) (interface {}, error ) {
4243 isSet := config .IsSet (ReasonKey )
43- return defaultFuncWithValidator (existingValue , isSet , isValidReason )
44+ reasonRequired := config .GetBool (ConfigIgnoreReasonRequired )
45+ return defaultFuncWithValidator (existingValue , isSet , getReasonValidator (reasonRequired ))
4446 })
4547}
4648
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+
4783func getOrgIgnoreApprovalEnabled (engine workflow.Engine ) configuration.DefaultValueFunction {
4884 return func (_ configuration.Configuration , existingValue interface {}) (interface {}, error ) {
4985 if existingValue != nil {
5086 return existingValue , nil
5187 }
5288
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 )
6090 if err != nil {
6191 engine .GetLogger ().Err (err ).Msg ("Failed to access settings." )
62- return nil , err
92+ return false , err
6393 }
6494
6595 if settings .Ignores != nil && settings .Ignores .ApprovalWorkflowEnabled {
@@ -70,6 +100,26 @@ func getOrgIgnoreApprovalEnabled(engine workflow.Engine) configuration.DefaultVa
70100 }
71101}
72102
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+
73123func remoteRepoUrlDefaultFunc (existingValue interface {}, config configuration.Configuration ) (interface {}, error ) {
74124 if existingValue != nil && existingValue != "" {
75125 return existingValue , nil
@@ -148,6 +198,16 @@ func isValidFindingsId(input string) error {
148198 return nil
149199}
150200
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+
151211func isValidReason (input string ) error {
152212 if input == "" {
153213 return cli .NewValidationFailureError ("The ignore reason cannot be empty. Provide a justification for ignoring this finding." )
0 commit comments