diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..80cae54a --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,56 @@ +linters-settings: + govet: + check-shadowing: true + maligned: + suggest-new: true + dupl: + threshold: 200 + goconst: + min-len: 3 + min-occurrences: 2 + forbidigo: + forbid: + - ^print.*$ + - 'fmt\.Print.*' + gocognit: + min-complexity: 65 # This is super high value. We should gradually lower it to 30-40. + +linters: + enable: + - gosec + disable: + - typecheck + - errcheck + - govet + - staticcheck + - gosimple + - deadcode + - gofmt + - goimports + - bodyclose + - dupl + #- forbidigo # <- see later + - gocognit + - gocritic + - goimports + - nakedret + #- nolintlint + - revive + - stylecheck + - unconvert + - unparam + - maligned + - lll + - gochecknoinits + - gochecknoglobals +issues: + exclude-rules: + - linters: + - revive + text: "var-naming" + - linters: + - revive + text: "type name will be used as (.+?) by other packages, and that stutters" + - linters: + - stylecheck + text: "ST1003" diff --git a/core/cautils/getter/loadpolicy.go b/core/cautils/getter/loadpolicy.go index 500a2ede..83dba321 100644 --- a/core/cautils/getter/loadpolicy.go +++ b/core/cautils/getter/loadpolicy.go @@ -36,11 +36,11 @@ func NewLoadPolicy(filePaths []string) *LoadPolicy { } } -// Return control from file +// GetControl returns a control from the policy file. func (lp *LoadPolicy) GetControl(controlID string) (*reporthandling.Control, error) { - control := &reporthandling.Control{} filePath := lp.filePath() + f, err := os.ReadFile(filePath) if err != nil { return nil, err @@ -49,20 +49,26 @@ func (lp *LoadPolicy) GetControl(controlID string) (*reporthandling.Control, err if err = json.Unmarshal(f, control); err != nil { return control, err } - if controlID != "" && !strings.EqualFold(controlID, control.ControlID) && !strings.EqualFold(controlID, control.ControlID) { - framework, err := lp.GetFramework(control.Name) - if err != nil { - return nil, fmt.Errorf("control from file not matching") - } else { - for _, ctrl := range framework.Controls { - if strings.EqualFold(ctrl.ControlID, controlID) || strings.EqualFold(ctrl.ControlID, controlID) { - control = &ctrl - break - } - } + + if controlID == "" || strings.EqualFold(controlID, control.ControlID) { + return control, nil + } + + framework, err := lp.GetFramework(control.Name) + if err != nil { + return nil, fmt.Errorf("control from file not matching") + } + + for _, toPin := range framework.Controls { + ctrl := toPin + if strings.EqualFold(ctrl.ControlID, controlID) { + control = &ctrl + + break } } - return control, err + + return control, nil } func (lp *LoadPolicy) GetFramework(frameworkName string) (*reporthandling.Framework, error) {