github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scan/flat.go (about)

     1  package scan
     2  
     3  import (
     4  	"github.com/khulnasoft-lab/defsec/pkg/providers"
     5  	"github.com/khulnasoft-lab/defsec/pkg/severity"
     6  )
     7  
     8  type FlatResult struct {
     9  	RuleID          string             `json:"rule_id"`
    10  	LongID          string             `json:"long_id"`
    11  	RuleSummary     string             `json:"rule_description"`
    12  	RuleProvider    providers.Provider `json:"rule_provider"`
    13  	RuleService     string             `json:"rule_service"`
    14  	Impact          string             `json:"impact"`
    15  	Resolution      string             `json:"resolution"`
    16  	Links           []string           `json:"links"`
    17  	Description     string             `json:"description"`
    18  	RangeAnnotation string             `json:"-"`
    19  	Severity        severity.Severity  `json:"severity"`
    20  	Warning         bool               `json:"warning"`
    21  	Status          Status             `json:"status"`
    22  	Resource        string             `json:"resource"`
    23  	Occurrences     []Occurrence       `json:"occurrences,omitempty"`
    24  	Location        FlatRange          `json:"location"`
    25  }
    26  
    27  type FlatRange struct {
    28  	Filename  string `json:"filename"`
    29  	StartLine int    `json:"start_line"`
    30  	EndLine   int    `json:"end_line"`
    31  }
    32  
    33  func (r Results) Flatten() []FlatResult {
    34  	var results []FlatResult
    35  	for _, original := range r {
    36  		results = append(results, original.Flatten())
    37  	}
    38  	return results
    39  }
    40  
    41  func (r *Result) Flatten() FlatResult {
    42  	rng := r.metadata.Range()
    43  
    44  	resMetadata := r.metadata
    45  
    46  	for resMetadata.Parent() != nil {
    47  		resMetadata = *resMetadata.Parent()
    48  	}
    49  
    50  	return FlatResult{
    51  		RuleID:          r.rule.AVDID,
    52  		LongID:          r.Rule().LongID(),
    53  		RuleSummary:     r.rule.Summary,
    54  		RuleProvider:    r.rule.Provider,
    55  		RuleService:     r.rule.Service,
    56  		Impact:          r.rule.Impact,
    57  		Resolution:      r.rule.Resolution,
    58  		Links:           r.rule.Links,
    59  		Description:     r.Description(),
    60  		RangeAnnotation: r.Annotation(),
    61  		Severity:        r.rule.Severity,
    62  		Status:          r.status,
    63  		Resource:        resMetadata.Reference(),
    64  		Occurrences:     r.Occurrences(),
    65  		Warning:         r.IsWarning(),
    66  		Location: FlatRange{
    67  			Filename:  rng.GetFilename(),
    68  			StartLine: rng.GetStartLine(),
    69  			EndLine:   rng.GetEndLine(),
    70  		},
    71  	}
    72  }