Skip to content

Commit 9ff0a83

Browse files
authored
Feature/scan types (#185)
* Added support for KICS and SCA scans. * Added support incremental scans for SAST, KICS and SCA. * Removed uneeded variables.
1 parent d1b103e commit 9ff0a83

2 files changed

Lines changed: 95 additions & 17 deletions

File tree

internal/commands/root.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ const (
3333
mainBranchFlag = "branch"
3434
projectName = "project-name"
3535
projectType = "project-type"
36-
incremental = "incremental"
36+
incrementalSast = "incremental-sast"
37+
incrementalKics = "incremental-kics"
38+
incrementalSca = "incremental-sca"
3739
presetName = "preset-name"
3840
accessKeyIDFlag = "client-id"
3941
accessKeyIDFlagUsage = "The access key ID"

internal/commands/scan.go

Lines changed: 92 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ func NewScanCommand(scansWrapper wrappers.ScansWrapper, uploadsWrapper wrappers.
7171
createScanCmd.PersistentFlags().StringP(sourceDirFilterFlag, sourceDirFilterFlagSh, "",
7272
"Source file filtering pattern")
7373
createScanCmd.PersistentFlags().String(projectName, "", "Name of the project")
74-
createScanCmd.PersistentFlags().String(incremental, "", "Indicates if incremental scan should be performed, defaults to false.")
74+
createScanCmd.PersistentFlags().String(incrementalSast, "", "Incremental SAST scan should be performed, defaults to false.")
75+
createScanCmd.PersistentFlags().String(incrementalKics, "", "Incremental KICS scan should be performed, defaults to false.")
76+
createScanCmd.PersistentFlags().String(incrementalSca, "", "Incremental SCA scan should be performed, defaults to false.")
7577
createScanCmd.PersistentFlags().String(presetName, "", "The name of the Checkmarx preset to use.")
7678
createScanCmd.PersistentFlags().String(projectType, "", "Type of project: sast")
7779

@@ -162,9 +164,6 @@ func createProject(projectName string) (string, error) {
162164
func updateScanRequestValues(input *[]byte, cmd *cobra.Command, sourceType string) {
163165
var info map[string]interface{}
164166
newProjectName, _ := cmd.Flags().GetString(projectName)
165-
newProjectType, _ := cmd.Flags().GetString(projectType)
166-
newIncremental, _ := cmd.Flags().GetString(incremental)
167-
newPresetName, _ := cmd.Flags().GetString(presetName)
168167
_ = json.Unmarshal(*input, &info)
169168
info["type"] = sourceType
170169
// Handle the project settings
@@ -180,26 +179,103 @@ func updateScanRequestValues(input *[]byte, cmd *cobra.Command, sourceType strin
180179
projectID := findProject(info["project"].(map[string]interface{})["id"].(string))
181180
info["project"].(map[string]interface{})["id"] = projectID
182181
// Handle the scan configuration
182+
var configArr []interface{}
183183
if _, ok := info["config"]; !ok {
184-
var configArr []interface{}
185-
_ = json.Unmarshal([]byte("[{}]"), &configArr)
186-
info["config"] = configArr
184+
_ = json.Unmarshal([]byte("[]"), &configArr)
185+
}
186+
var sastConfig map[string]interface{} = addSastScan(cmd)
187+
if sastConfig != nil {
188+
configArr = append(configArr, sastConfig)
187189
}
188-
if newProjectType != "" {
189-
info["config"].([]interface{})[0].(map[string]interface{})["type"] = newProjectType
190+
var kicsConfig map[string]interface{} = addKicsScan(cmd)
191+
if kicsConfig != nil {
192+
configArr = append(configArr, kicsConfig)
190193
}
191-
if info["config"].([]interface{})[0].(map[string]interface{})["value"] == nil {
194+
var scaConfig map[string]interface{} = addScaScan(cmd)
195+
if scaConfig != nil {
196+
configArr = append(configArr, scaConfig)
197+
}
198+
info["config"] = configArr
199+
*input, _ = json.Marshal(info)
200+
}
201+
202+
func scanTypeEnabled(cmd *cobra.Command, scanType string) bool {
203+
newProjectType, _ := cmd.Flags().GetString(projectType)
204+
scanTypes := strings.Split(newProjectType, ",")
205+
for _, a := range scanTypes {
206+
if strings.EqualFold(a, scanType) {
207+
return true
208+
}
209+
}
210+
return false
211+
}
212+
213+
func addSastScan(cmd *cobra.Command) map[string]interface{} {
214+
if scanTypeEnabled(cmd, "sast") {
215+
var objArr map[string]interface{}
216+
_ = json.Unmarshal([]byte("{}"), &objArr)
217+
newIncremental, _ := cmd.Flags().GetString(incrementalSast)
218+
newPresetName, _ := cmd.Flags().GetString(presetName)
219+
objArr["type"] = "sast"
192220
var valueMap map[string]interface{}
193221
_ = json.Unmarshal([]byte("{}"), &valueMap)
194-
info["config"].([]interface{})[0].(map[string]interface{})["value"] = valueMap
222+
foundValue := false
223+
if newIncremental != "" {
224+
foundValue = true
225+
valueMap["incremental"] = newIncremental
226+
}
227+
if newPresetName != "" {
228+
foundValue = true
229+
valueMap["presetName"] = newPresetName
230+
}
231+
if foundValue {
232+
objArr["value"] = valueMap
233+
}
234+
return objArr
195235
}
196-
if newIncremental != "" {
197-
info["config"].([]interface{})[0].(map[string]interface{})["value"].(map[string]interface{})["incremental"] = newIncremental
236+
return nil
237+
}
238+
239+
func addKicsScan(cmd *cobra.Command) map[string]interface{} {
240+
if scanTypeEnabled(cmd, "kics") {
241+
var objArr map[string]interface{}
242+
_ = json.Unmarshal([]byte("{}"), &objArr)
243+
newIncremental, _ := cmd.Flags().GetString(incrementalKics)
244+
objArr["type"] = "kics"
245+
var valueMap map[string]interface{}
246+
_ = json.Unmarshal([]byte("{}"), &valueMap)
247+
foundValue := false
248+
if newIncremental != "" {
249+
foundValue = true
250+
valueMap["incremental"] = newIncremental
251+
}
252+
if foundValue {
253+
objArr["value"] = valueMap
254+
}
255+
return objArr
198256
}
199-
if newPresetName != "" {
200-
info["config"].([]interface{})[0].(map[string]interface{})["value"].(map[string]interface{})["presetName"] = newPresetName
257+
return nil
258+
}
259+
260+
func addScaScan(cmd *cobra.Command) map[string]interface{} {
261+
if scanTypeEnabled(cmd, "sca") {
262+
var objArr map[string]interface{}
263+
_ = json.Unmarshal([]byte("{}"), &objArr)
264+
newIncremental, _ := cmd.Flags().GetString(incrementalSca)
265+
objArr["type"] = "sca"
266+
var valueMap map[string]interface{}
267+
_ = json.Unmarshal([]byte("{}"), &valueMap)
268+
foundValue := false
269+
if newIncremental != "" {
270+
foundValue = true
271+
valueMap["incremental"] = newIncremental
272+
}
273+
if foundValue {
274+
objArr["value"] = valueMap
275+
}
276+
return objArr
201277
}
202-
*input, _ = json.Marshal(info)
278+
return nil
203279
}
204280

205281
func compressFolder(sourceDir, filter string) (string, error) {

0 commit comments

Comments
 (0)