Skip to content

Commit c960642

Browse files
ybelMekksindrerh2tommytroen
committed
feat: add vuln id
Co-authored-by: Sindre Rødseth Hansen <[email protected]> Co-authored-by: Tommy Trøen <[email protected]>
1 parent beb11f8 commit c960642

File tree

9 files changed

+386
-284
lines changed

9 files changed

+386
-284
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.24.0
55
require (
66
cloud.google.com/go/auth v0.15.0
77
github.com/containerd/log v0.1.0
8+
github.com/emicklei/pgtalk v1.8.3
89
github.com/exaring/otelpgx v0.9.0
910
github.com/fatih/color v1.18.0
1011
github.com/google/go-containerregistry v0.20.3

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp
259259
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
260260
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
261261
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
262+
github.com/emicklei/pgtalk v1.8.3 h1:8wsBWX5s//UdMfosTlFHElqi+FzGsnfOpISPjKArH+s=
263+
github.com/emicklei/pgtalk v1.8.3/go.mod h1:a9wP/z+1O0t4swEMPLiBRH8rlqWEIcMuZUuDBkODrc4=
262264
github.com/emicklei/proto v1.13.4 h1:myn1fyf8t7tAqIzV91Tj9qXpvyXXGXk8OS2H6IBSc9g=
263265
github.com/emicklei/proto v1.13.4/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
264266
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=

internal/api/grpcvulnerabilities/vulnerabilities.go

+17-18
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"github.com/emicklei/pgtalk/convert"
78
"github.com/jackc/pgx/v5"
89
"github.com/nais/v13s/internal/api/grpcpagination"
910
"github.com/nais/v13s/internal/collections"
@@ -51,6 +52,7 @@ func (s *Server) ListVulnerabilities(ctx context.Context, request *vulnerabiliti
5152
ImageTag: row.ImageTag,
5253
},
5354
Vulnerability: &vulnerabilities.Vulnerability{
55+
Id: row.ID.String(),
5456
Package: row.Package,
5557
Suppressed: &row.Suppressed,
5658
Cve: &vulnerabilities.Cve{
@@ -132,6 +134,7 @@ func (s *Server) ListVulnerabilitiesForImage(ctx context.Context, request *vulne
132134
suppressReasonStr := strings.ToUpper(string(suppressReason))
133135

134136
return &vulnerabilities.Vulnerability{
137+
Id: row.ID.String(),
135138
Package: row.Package,
136139
Suppressed: &row.Suppressed,
137140
SuppressedReason: &suppressReasonStr,
@@ -211,34 +214,30 @@ func (s *Server) ListSuppressedVulnerabilities(ctx context.Context, request *vul
211214
}
212215

213216
func (s *Server) SuppressVulnerability(ctx context.Context, request *vulnerabilities.SuppressVulnerabilityRequest) (*vulnerabilities.SuppressVulnerabilityResponse, error) {
214-
suppressedVuln := request.GetSuppressedVulnerability()
215-
_, err := s.querier.GetSuppressedVulnerability(ctx, sql.GetSuppressedVulnerabilityParams{
216-
ImageName: suppressedVuln.GetImageName(),
217-
Package: suppressedVuln.GetPackage(),
218-
CveID: suppressedVuln.GetCveId(),
219-
})
220-
217+
uuid := convert.StringToUUID(request.Id)
218+
vuln, err := s.querier.GetVulnerabilityById(ctx, uuid)
221219
if err != nil {
222220
if !errors.Is(err, pgx.ErrNoRows) {
223-
return nil, fmt.Errorf("failed to get suppressed vulnerability: %w", err)
221+
return nil, fmt.Errorf("get suppressed vulnerability: %w", err)
224222
}
225223
}
226224

227225
supErr := s.querier.SuppressVulnerability(ctx, sql.SuppressVulnerabilityParams{
228-
ImageName: suppressedVuln.GetImageName(),
229-
CveID: suppressedVuln.GetCveId(),
230-
Package: suppressedVuln.GetPackage(),
231-
SuppressedBy: suppressedVuln.GetSuppressedBy(),
232-
Suppressed: suppressedVuln.GetSuppress(),
233-
Reason: sql.VulnerabilitySuppressReason(strings.ToLower(suppressedVuln.GetState().String())),
234-
ReasonText: suppressedVuln.GetReason(),
226+
ImageName: vuln.ImageName,
227+
CveID: vuln.CveID,
228+
Package: vuln.Package,
229+
SuppressedBy: request.GetSuppressedBy(),
230+
Suppressed: request.GetSuppress(),
231+
Reason: sql.VulnerabilitySuppressReason(strings.ToLower(request.GetState().String())),
232+
ReasonText: request.GetReason(),
235233
})
236234
if supErr != nil {
237-
return nil, fmt.Errorf("failed to suppress vulnerability: %w", supErr)
235+
return nil, fmt.Errorf("suppress vulnerability: %w", supErr)
238236
}
237+
239238
return &vulnerabilities.SuppressVulnerabilityResponse{
240-
CveId: suppressedVuln.GetCveId(),
241-
Suppressed: suppressedVuln.GetSuppress(),
239+
CveId: vuln.CveID,
240+
Suppressed: request.GetSuppress(),
242241
}, nil
243242
}
244243

internal/database/queries/vulnerabilities.sql

+14-5
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,12 @@ DO UPDATE
4646
WHERE vulnerabilities.latest_version <> EXCLUDED.latest_version
4747
;
4848

49-
50-
5149
-- name: GetCve :one
5250
SELECT *
5351
FROM cve
5452
WHERE cve_id = @cve_id
5553
;
5654

57-
5855
-- name: GetVulnerability :one
5956
SELECT *
6057
FROM vulnerabilities
@@ -64,6 +61,16 @@ WHERE image_name = @image_name
6461
AND cve_id = @cve_id
6562
;
6663

64+
-- name: GetVulnerabilityById :one
65+
SELECT v.image_name,
66+
v.image_tag,
67+
v.package,
68+
v.cve_id,
69+
v.source
70+
FROM vulnerabilities v
71+
JOIN cve c ON v.cve_id = c.cve_id
72+
WHERE v.id = @id
73+
;
6774

6875
-- name: SuppressVulnerability :exec
6976
INSERT INTO suppressed_vulnerabilities(image_name,
@@ -169,7 +176,8 @@ WHERE (CASE WHEN sqlc.narg('cluster')::TEXT is not null THEN w.cluster = sqlc.na
169176
;
170177

171178
-- name: ListVulnerabilitiesForImage :many
172-
SELECT v.image_name,
179+
SELECT v.id,
180+
v.image_name,
173181
v.image_tag,
174182
v.package,
175183
v.cve_id,
@@ -215,7 +223,8 @@ WHERE v.image_name = @image_name
215223
;
216224

217225
-- name: ListVulnerabilities :many
218-
SELECT w.name AS workload_name,
226+
SELECT v.id,
227+
w.name AS workload_name,
219228
w.workload_type,
220229
w.namespace,
221230
w.cluster,

internal/database/sql/querier.go

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/database/sql/vulnerabilities.sql.go

+49-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/api/vulnerabilities/client.go

+7-11
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type Client interface {
1515
ListVulnerabilitySummaries(ctx context.Context, opts ...Option) (*ListVulnerabilitySummariesResponse, error)
1616
GetVulnerabilitySummary(ctx context.Context, opts ...Option) (*GetVulnerabilitySummaryResponse, error)
1717
GetVulnerabilitySummaryForImage(ctx context.Context, imageName, imageTag string) (*GetVulnerabilitySummaryForImageResponse, error)
18-
SuppressVulnerability(ctx context.Context, imageName, cveId, packaged, reason, suppressedBy string, state SuppressState, suppress bool) error
18+
SuppressVulnerability(ctx context.Context, id, reason, suppressedBy string, state SuppressState, suppress bool) error
1919
management.ManagementClient
2020
}
2121

@@ -107,17 +107,13 @@ func (c *client) GetVulnerabilitySummaryForImage(ctx context.Context, imageName,
107107
})
108108
}
109109

110-
func (c *client) SuppressVulnerability(ctx context.Context, imageName, cveId, packaged, reason, suppressedBy string, state SuppressState, suppress bool) error {
110+
func (c *client) SuppressVulnerability(ctx context.Context, id, reason, suppressedBy string, state SuppressState, suppress bool) error {
111111
_, err := c.c.SuppressVulnerability(ctx, &SuppressVulnerabilityRequest{
112-
SuppressedVulnerability: &SuppressedVulnerability{
113-
ImageName: imageName,
114-
State: state,
115-
Package: packaged,
116-
CveId: cveId,
117-
Reason: &reason,
118-
SuppressedBy: &suppressedBy,
119-
Suppress: &suppress,
120-
},
112+
Id: id,
113+
Reason: &reason,
114+
SuppressedBy: &suppressedBy,
115+
State: state,
116+
Suppress: &suppress,
121117
})
122118
return err
123119
}

pkg/api/vulnerabilities/schemas/vulnerabilities.proto

+12-7
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,11 @@ message GetVulnerabilitySummaryResponse {
118118
}
119119

120120
message SuppressVulnerabilityRequest {
121-
SuppressedVulnerability suppressed_vulnerability = 1;
121+
string id = 1;
122+
SuppressState state = 2;
123+
optional string reason = 3;
124+
optional string suppressed_by = 4;
125+
optional bool suppress = 5;
122126
}
123127

124128
message SuppressedVulnerability {
@@ -207,12 +211,13 @@ message Cve {
207211

208212
// TODO: should it be grouped by package like now or Cve?
209213
message Vulnerability {
210-
string package = 1;
211-
Cve cve = 2;
212-
string latest_version = 3;
213-
optional bool suppressed = 4;
214-
optional string suppressed_reason = 5;
215-
optional string suppressed_details = 6;
214+
string id = 1;
215+
string package = 2;
216+
Cve cve = 3;
217+
string latest_version = 4;
218+
optional bool suppressed = 5;
219+
optional string suppressed_reason = 6;
220+
optional string suppressed_details = 7;
216221
}
217222

218223
message Finding {

0 commit comments

Comments
 (0)