Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 22 additions & 17 deletions central/graphql/resolvers/cluster_vulnerabilities.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,8 @@ type ClusterVulnerabilityResolver interface {
VulnerabilityTypes() []string
}

var _ ClusterVulnerabilityResolver = (*clusterCVEResolver)(nil)

// ClusterVulnerability returns a vulnerability of the given id
func (resolver *Resolver) ClusterVulnerability(ctx context.Context, args IDQuery) (*clusterCVEResolver, error) {
func (resolver *Resolver) ClusterVulnerability(ctx context.Context, args IDQuery) (ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "ClusterVulnerability")

// check permissions
Expand All @@ -77,7 +75,7 @@ func (resolver *Resolver) ClusterVulnerability(ctx context.Context, args IDQuery
}

// ClusterVulnerabilities resolves a set of image vulnerabilities for the input query
func (resolver *Resolver) ClusterVulnerabilities(ctx context.Context, q PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *Resolver) ClusterVulnerabilities(ctx context.Context, q PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "ClusterVulnerabilities")

// check permissions
Expand All @@ -100,7 +98,17 @@ func (resolver *Resolver) ClusterVulnerabilities(ctx context.Context, q Paginate
// get values
query = tryUnsuppressedQuery(query)
vulns, err := loader.FromQuery(ctx, query)
return resolver.wrapClusterCVEsWithContext(ctx, vulns, err)
cveResolvers, err := resolver.wrapClusterCVEsWithContext(ctx, vulns, err)
if err != nil {
return nil, err
}

// cast as return type
ret := make([]ClusterVulnerabilityResolver, 0, len(cveResolvers))
for _, res := range cveResolvers {
ret = append(ret, res)
}
return ret, nil
}

// ClusterVulnerabilityCount returns count of image vulnerabilities for the input query
Expand Down Expand Up @@ -172,13 +180,13 @@ func (resolver *Resolver) ClusterVulnerabilityCounter(ctx context.Context, args
}

// K8sClusterVulnerability resolves a single k8s vulnerability based on an id (the CVE value).
func (resolver *Resolver) K8sClusterVulnerability(ctx context.Context, args IDQuery) (*clusterCVEResolver, error) {
func (resolver *Resolver) K8sClusterVulnerability(ctx context.Context, args IDQuery) (ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "K8sClusterVulnerability")
return resolver.ClusterVulnerability(ctx, args)
}

// K8sClusterVulnerabilities resolves a set of k8s vulnerabilities based on a query.
func (resolver *Resolver) K8sClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *Resolver) K8sClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "K8sClusterVulnerabilities")
query := withK8sTypeFiltering(args.String())
return resolver.ClusterVulnerabilities(ctx, PaginatedQuery{Query: &query, Pagination: args.Pagination})
Expand All @@ -192,13 +200,13 @@ func (resolver *Resolver) K8sClusterVulnerabilityCount(ctx context.Context, args
}

// IstioClusterVulnerability resolves a single k8s vulnerability based on an id (the CVE value).
func (resolver *Resolver) IstioClusterVulnerability(ctx context.Context, args IDQuery) (*clusterCVEResolver, error) {
func (resolver *Resolver) IstioClusterVulnerability(ctx context.Context, args IDQuery) (ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "IstioClusterVulnerability")
return resolver.ClusterVulnerability(ctx, args)
}

// IstioClusterVulnerabilities resolves a set of k8s vulnerabilities based on a query.
func (resolver *Resolver) IstioClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *Resolver) IstioClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "IstioClusterVulnerabilities")
query := withIstioTypeFiltering(args.String())
return resolver.ClusterVulnerabilities(ctx, PaginatedQuery{Query: &query, Pagination: args.Pagination})
Expand All @@ -212,13 +220,13 @@ func (resolver *Resolver) IstioClusterVulnerabilityCount(ctx context.Context, ar
}

// OpenShiftClusterVulnerability resolves a single k8s vulnerability based on an id (the CVE value).
func (resolver *Resolver) OpenShiftClusterVulnerability(ctx context.Context, args IDQuery) (*clusterCVEResolver, error) {
func (resolver *Resolver) OpenShiftClusterVulnerability(ctx context.Context, args IDQuery) (ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "OpenShiftClusterVulnerability")
return resolver.ClusterVulnerability(ctx, args)
}

// OpenShiftClusterVulnerabilities resolves a set of k8s vulnerabilities based on a query.
func (resolver *Resolver) OpenShiftClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *Resolver) OpenShiftClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "OpenShiftClusterVulnerabilities")
query := withOpenShiftTypeFiltering(args.String())
return resolver.ClusterVulnerabilities(ctx, PaginatedQuery{Query: &query, Pagination: args.Pagination})
Expand Down Expand Up @@ -268,13 +276,10 @@ func (resolver *clusterCVEResolver) clusterVulnerabilityScopeContext(ctx context
})
}

func clusterCveToVulnerabilityWithSeverity(in []*storage.ClusterCVE) []*vulnerabilityWithSeverityImpl {
ret := make([]*vulnerabilityWithSeverityImpl, len(in))
func clusterCveToVulnerabilityWithSeverity(in []*storage.ClusterCVE) []VulnerabilityWithSeverity {
ret := make([]VulnerabilityWithSeverity, len(in))
for i, vuln := range in {
ret[i] = &vulnerabilityWithSeverityImpl{
id: vuln.GetId(),
severity: vuln.GetSeverity(),
}
ret[i] = vuln
}
return ret
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ func (s *GraphQLClusterVulnerabilityTestSuite) getClusterResolver(ctx context.Co
return cluster
}

func (s *GraphQLClusterVulnerabilityTestSuite) getClusterVulnerabilityResolver(ctx context.Context, id string) *clusterCVEResolver {
func (s *GraphQLClusterVulnerabilityTestSuite) getClusterVulnerabilityResolver(ctx context.Context, id string) ClusterVulnerabilityResolver {
vulnID := graphql.ID(id)

vuln, err := s.resolver.ClusterVulnerability(ctx, IDQuery{ID: &vulnID})
Expand Down
16 changes: 8 additions & 8 deletions central/graphql/resolvers/clusters.go
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@ func (resolver *clusterResolver) ImageCount(ctx context.Context, args RawQuery)
return resolver.root.ImageCount(resolver.clusterScopeContext(ctx), args)
}

func (resolver *clusterResolver) ImageComponents(ctx context.Context, args PaginatedQuery) ([]*imageComponentV2Resolver, error) {
func (resolver *clusterResolver) ImageComponents(ctx context.Context, args PaginatedQuery) ([]ImageComponentResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "ImageComponents")
return resolver.root.ImageComponents(resolver.clusterScopeContext(ctx), args)
}
Expand All @@ -534,7 +534,7 @@ func (resolver *clusterResolver) ImageComponentCount(ctx context.Context, args R
}

// NodeComponents returns the node components in the cluster.
func (resolver *clusterResolver) NodeComponents(ctx context.Context, args PaginatedQuery) ([]*nodeComponentResolver, error) {
func (resolver *clusterResolver) NodeComponents(ctx context.Context, args PaginatedQuery) ([]NodeComponentResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "NodeComponents")
return resolver.root.NodeComponents(resolver.clusterScopeContext(ctx), args)
}
Expand All @@ -546,7 +546,7 @@ func (resolver *clusterResolver) NodeComponentCount(ctx context.Context, args Ra
}

// NodeVulnerabilities returns the node vulnerabilities in the cluster.
func (resolver *clusterResolver) NodeVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*nodeCVEResolver, error) {
func (resolver *clusterResolver) NodeVulnerabilities(ctx context.Context, args PaginatedQuery) ([]NodeVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "NodeVulnerabilities")

// (ROX-10911) Cluster scoping the context is not able to resolve node vulns when combined with 'Fixable:true/false' query
Expand Down Expand Up @@ -588,7 +588,7 @@ func (resolver *clusterResolver) clusterScopeContext(ctx context.Context) contex
})
}

func (resolver *clusterResolver) ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*imageCVEV2Resolver, error) {
func (resolver *clusterResolver) ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ImageVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "ImageVulnerabilities")
return resolver.root.ImageVulnerabilities(resolver.clusterScopeContext(ctx), args)
}
Expand All @@ -603,7 +603,7 @@ func (resolver *clusterResolver) ImageVulnerabilityCounter(ctx context.Context,
return resolver.root.ImageVulnerabilityCounter(resolver.clusterScopeContext(ctx), args)
}

func (resolver *clusterResolver) ClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *clusterResolver) ClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "ClusterVulnerabilities")
return resolver.root.ClusterVulnerabilities(resolver.clusterScopeContext(ctx), args)
}
Expand All @@ -618,7 +618,7 @@ func (resolver *clusterResolver) ClusterVulnerabilityCounter(ctx context.Context
return resolver.root.ClusterVulnerabilityCounter(resolver.clusterScopeContext(ctx), args)
}

func (resolver *clusterResolver) K8sClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *clusterResolver) K8sClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "K8sClusterVulnerabilities")
return resolver.root.K8sClusterVulnerabilities(resolver.clusterScopeContext(ctx), args)
}
Expand All @@ -628,7 +628,7 @@ func (resolver *clusterResolver) K8sClusterVulnerabilityCount(ctx context.Contex
return resolver.root.K8sClusterVulnerabilityCount(resolver.clusterScopeContext(ctx), args)
}

func (resolver *clusterResolver) IstioClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *clusterResolver) IstioClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "IstioClusterVulnerabilities")
return resolver.root.IstioClusterVulnerabilities(resolver.clusterScopeContext(ctx), args)
}
Expand All @@ -638,7 +638,7 @@ func (resolver *clusterResolver) IstioClusterVulnerabilityCount(ctx context.Cont
return resolver.root.IstioClusterVulnerabilityCount(resolver.clusterScopeContext(ctx), args)
}

func (resolver *clusterResolver) OpenShiftClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*clusterCVEResolver, error) {
func (resolver *clusterResolver) OpenShiftClusterVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ClusterVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Cluster, "OpenShiftClusterVulnerabilities")
return resolver.root.OpenShiftClusterVulnerabilities(resolver.clusterScopeContext(ctx), args)
}
Expand Down
4 changes: 2 additions & 2 deletions central/graphql/resolvers/deployments.go
Original file line number Diff line number Diff line change
Expand Up @@ -524,7 +524,7 @@ func (resolver *deploymentResolver) ImageCount(ctx context.Context, args RawQuer
return resolver.root.ImageCount(resolver.withDeploymentScopeContext(ctx), args)
}

func (resolver *deploymentResolver) ImageComponents(ctx context.Context, args PaginatedQuery) ([]*imageComponentV2Resolver, error) {
func (resolver *deploymentResolver) ImageComponents(ctx context.Context, args PaginatedQuery) ([]ImageComponentResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Deployments, "ImageComponents")
return resolver.root.ImageComponents(resolver.withDeploymentScopeContext(ctx), args)
}
Expand All @@ -534,7 +534,7 @@ func (resolver *deploymentResolver) ImageComponentCount(ctx context.Context, arg
return resolver.root.ImageComponentCount(resolver.withDeploymentScopeContext(ctx), args)
}

func (resolver *deploymentResolver) ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*imageCVEV2Resolver, error) {
func (resolver *deploymentResolver) ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ImageVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Deployments, "ImageVulnerabilities")
return resolver.root.ImageVulnerabilities(resolver.withDeploymentScopeContext(ctx), args)
}
Expand Down
26 changes: 17 additions & 9 deletions central/graphql/resolvers/image_components.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ type ImageComponentResolver interface {
Images(ctx context.Context, args PaginatedQuery) ([]ImageResolver, error)
ImageVulnerabilityCount(ctx context.Context, args RawQuery) (int32, error)
ImageVulnerabilityCounter(ctx context.Context, args RawQuery) (*VulnerabilityCounterResolver, error)
ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*imageCVEV2Resolver, error)
ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ImageVulnerabilityResolver, error)
LastScanned(ctx context.Context) (*graphql.Time, error)
LayerIndex() (*int32, error)
License(ctx context.Context) (*licenseResolver, error)
Expand All @@ -93,7 +93,7 @@ type ImageComponentResolver interface {
Priority(ctx context.Context) int32
RiskScore(ctx context.Context) float64
Source(ctx context.Context) string
TopImageVulnerability(ctx context.Context) (*imageCVEV2Resolver, error)
TopImageVulnerability(ctx context.Context) (ImageVulnerabilityResolver, error)
UnusedVarSink(ctx context.Context, args RawQuery) *int32
Version(ctx context.Context) string
InBaseImageLayer(ctx context.Context) bool
Expand All @@ -103,10 +103,8 @@ type ImageComponentResolver interface {
FixedIn(ctx context.Context) string
}

var _ ImageComponentResolver = (*imageComponentV2Resolver)(nil)

// ImageComponent returns an image component based on an input id (name:version)
func (resolver *Resolver) ImageComponent(ctx context.Context, args IDQuery) (*imageComponentV2Resolver, error) {
func (resolver *Resolver) ImageComponent(ctx context.Context, args IDQuery) (ImageComponentResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "ImageComponent")

// check permissions
Expand Down Expand Up @@ -150,7 +148,7 @@ func (resolver *Resolver) ImageComponent(ctx context.Context, args IDQuery) (*im
}

// ImageComponents returns image components that match the input query.
func (resolver *Resolver) ImageComponents(ctx context.Context, q PaginatedQuery) ([]*imageComponentV2Resolver, error) {
func (resolver *Resolver) ImageComponents(ctx context.Context, q PaginatedQuery) ([]ImageComponentResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.Root, "ImageComponents")

// check permissions
Expand Down Expand Up @@ -213,7 +211,17 @@ func (resolver *Resolver) ImageComponents(ctx context.Context, q PaginatedQuery)
normalizedComponents = append(normalizedComponents, foundComponent[normalized])
}

return resolver.wrapImageComponentV2sFlatWithContext(ctx, normalizedComponents, componentFlatData, err)
componentResolvers, err := resolver.wrapImageComponentV2sFlatWithContext(ctx, normalizedComponents, componentFlatData, err)
if err != nil {
return nil, err
}

// cast as return type
ret := make([]ImageComponentResolver, 0, len(componentResolvers))
for _, res := range componentResolvers {
ret = append(ret, res)
}
return ret, nil
}

// ImageComponentCount returns count of image components that match the input query
Expand Down Expand Up @@ -268,7 +276,7 @@ func (resolver *imageComponentV2Resolver) ImageVulnerabilityCounter(ctx context.
return resolver.root.ImageVulnerabilityCounter(resolver.imageComponentScopeContext(ctx), args)
}

func (resolver *imageComponentV2Resolver) ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]*imageCVEV2Resolver, error) {
func (resolver *imageComponentV2Resolver) ImageVulnerabilities(ctx context.Context, args PaginatedQuery) ([]ImageVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ImageComponents, "ImageVulnerabilities")
if resolver.ctx == nil {
resolver.ctx = ctx
Expand Down Expand Up @@ -322,7 +330,7 @@ func (resolver *imageComponentV2Resolver) PlottedImageVulnerabilities(ctx contex
return resolver.root.PlottedImageVulnerabilities(resolver.imageComponentScopeContext(ctx), args)
}

func (resolver *imageComponentV2Resolver) TopImageVulnerability(ctx context.Context) (*imageCVEV2Resolver, error) {
func (resolver *imageComponentV2Resolver) TopImageVulnerability(ctx context.Context) (ImageVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ImageComponents, "TopImageVulnerability")
if resolver.ctx == nil {
resolver.ctx = ctx
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ func (s *GraphQLImageComponentV2TestSuite) getImageResolver(ctx context.Context,
return image
}

func (s *GraphQLImageComponentV2TestSuite) getImageComponentResolver(ctx context.Context, id string) *imageComponentV2Resolver {
func (s *GraphQLImageComponentV2TestSuite) getImageComponentResolver(ctx context.Context, id string) ImageComponentResolver {
vulnID := graphql.ID(id)
vuln, err := s.resolver.ImageComponent(ctx, IDQuery{ID: &vulnID})
assert.NoError(s.T(), err)
Expand Down Expand Up @@ -643,7 +643,7 @@ func (s *GraphQLImageComponentV2TestSuite) getComponentIDMap(images []*storage.I
}
}

func verifyLocationAndLayerIndex(ctx context.Context, t *testing.T, component *imageComponentV2Resolver, assertEmpty bool) {
func verifyLocationAndLayerIndex(ctx context.Context, t *testing.T, component ImageComponentResolver, assertEmpty bool) {
if strings.EqualFold(component.Source(ctx), storage.SourceType_OS.String()) {
return
}
Expand Down
9 changes: 7 additions & 2 deletions central/graphql/resolvers/image_cve_core.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ func (resolver *imageCVECoreResolver) Deployments(ctx context.Context, args stru
})
}

func (resolver *imageCVECoreResolver) DistroTuples(ctx context.Context) ([]*imageCVEV2Resolver, error) {
func (resolver *imageCVECoreResolver) DistroTuples(ctx context.Context) ([]ImageVulnerabilityResolver, error) {
defer metrics.SetGraphQLOperationDurationTime(time.Now(), pkgMetrics.ImageCVECore, "DistroTuples")
query := search.NewQueryBuilder().AddExactMatches(search.CVEID, resolver.data.GetCVEIDs()...).ProtoQuery()

Expand All @@ -192,7 +192,12 @@ func (resolver *imageCVECoreResolver) DistroTuples(ctx context.Context) ([]*imag
cveResolvers[i] = &imageCVEV2Resolver{ctx: ctx, root: resolver.root, data: v, flatData: nil}
}

return cveResolvers, nil
// cast cves to the resolver
ret := make([]ImageVulnerabilityResolver, 0, len(cveResolvers))
for _, res := range cveResolvers {
ret = append(ret, res)
}
return ret, nil
}

func (resolver *imageCVECoreResolver) FirstDiscoveredInSystem(_ context.Context) *graphql.Time {
Expand Down
2 changes: 1 addition & 1 deletion central/graphql/resolvers/image_scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func init() {
)
}

func (resolver *imageScanResolver) ImageComponents(_ context.Context, args PaginatedQuery) ([]*imageComponentV2Resolver, error) {
func (resolver *imageScanResolver) ImageComponents(_ context.Context, args PaginatedQuery) ([]ImageComponentResolver, error) {
return resolver.root.ImageComponents(resolver.ctx, args)
}

Expand Down
Loading
Loading