package printer import ( "github.com/kubescape/k8s-interface/workloadinterface" "github.com/kubescape/kubescape/v2/core/cautils" "github.com/kubescape/opa-utils/reporthandling" "github.com/kubescape/opa-utils/reporthandling/results/v1/prioritization" "github.com/kubescape/opa-utils/reporthandling/results/v1/reportsummary" "github.com/kubescape/opa-utils/reporthandling/results/v1/resourcesresults" reporthandlingv2 "github.com/kubescape/opa-utils/reporthandling/v2" ) // finalizeV2Report finalize the results objects by copying data from map to lists func FinalizeResults(data *cautils.OPASessionObj) *reporthandlingv2.PostureReport { report := reporthandlingv2.PostureReport{ SummaryDetails: data.Report.SummaryDetails, Metadata: *data.Metadata, ClusterAPIServerInfo: data.Report.ClusterAPIServerInfo, ReportGenerationTime: data.Report.ReportGenerationTime, Attributes: data.Report.Attributes, ClusterName: data.Report.ClusterName, CustomerGUID: data.Report.CustomerGUID, ClusterCloudProvider: data.Report.ClusterCloudProvider, } report.Results = make([]resourcesresults.Result, len(data.ResourcesResult)) finalizeResults(report.Results, data.ResourcesResult, data.ResourcesPrioritized) if !data.OmitRawResources { report.Resources = finalizeResources(report.Results, data.AllResources, data.ResourceSource) } return &report } func finalizeResults(results []resourcesresults.Result, resourcesResult map[string]resourcesresults.Result, prioritizedResources map[string]prioritization.PrioritizedResource) { index := 0 for resourceID := range resourcesResult { results[index] = resourcesResult[resourceID] // Add prioritization information to the result if v, exist := prioritizedResources[resourceID]; exist { results[index].PrioritizedResource = &v } index++ } } type infoStars struct { stars string info string } func mapInfoToPrintInfo(controls reportsummary.ControlSummaries) []infoStars { infoToPrintInfo := []infoStars{} infoToPrintInfoMap := map[string]interface{}{} starCount := "*" for _, control := range controls { if control.GetStatus().IsSkipped() && control.GetStatus().Info() != "" { if _, ok := infoToPrintInfoMap[control.GetStatus().Info()]; !ok { infoToPrintInfo = append(infoToPrintInfo, infoStars{ info: control.GetStatus().Info(), stars: starCount, }) starCount += starCount infoToPrintInfoMap[control.GetStatus().Info()] = nil } } } return infoToPrintInfo } func finalizeResources(results []resourcesresults.Result, allResources map[string]workloadinterface.IMetadata, resourcesSource map[string]reporthandling.Source) []reporthandling.Resource { resources := make([]reporthandling.Resource, 0) for i := range results { if obj, ok := allResources[results[i].ResourceID]; ok { resource := *reporthandling.NewResourceIMetadata(obj) if r, ok := resourcesSource[results[i].ResourceID]; ok { resource.SetSource(&r) } resources = append(resources, resource) } } return resources }