Skip to content

Commit 8fd422e

Browse files
tommytroenybelMekksindrerh2
committedMar 17, 2025··
feat: add more orderby fields to vulns query
* use nodes pattern for list response“ Co-authored-by: ybelmekk <youssef.bel.mekki@nav.no> Co-authored-by: sindrerh2 <sindre.rodseth.hansen@nav.no>
1 parent f215d2b commit 8fd422e

File tree

8 files changed

+393
-372
lines changed

8 files changed

+393
-372
lines changed
 

‎cmd/cli/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ func listSummaries(ctx context.Context, cmd *cli.Command, c vulnerabilities.Clie
262262
tbl := table.New("Workload", "Cluster", "Namespace", "Has SBOM", "Critical", "High", "Medium", "Low", "Unassigned", "RiskScore")
263263
tbl.WithHeaderFormatter(headerFmt).WithFirstColumnFormatter(columnFmt)
264264

265-
for _, n := range resp.WorkloadSummaries {
265+
for _, n := range resp.GetNodes() {
266266
tbl.AddRow(
267267
// kills the layout
268268
// n.Workload.GetImageName()+":"+n.GetWorkload().GetImageTag(),

‎cmd/client/main.go

+1-16
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,6 @@ func main() {
4646

4747
listVulnz(c)
4848

49-
err = c.SuppressVulnerability(
50-
ctx,
51-
"europe-north1-docker.pkg.dev/nais-io/nais/images/dataproduct-apps",
52-
"CVE-2020-25658",
53-
"pkg:pypi/rsa@4.9",
54-
"Not in my code doe",
55-
"johnDoe@ali.com",
56-
vulnerabilities.SuppressState_NOT_AFFECTED,
57-
true,
58-
)
59-
if err != nil {
60-
fmt.Println("YOLO")
61-
panic(err)
62-
}
63-
6449
sup, err := c.ListSuppressedVulnerabilities(
6550
ctx,
6651
)
@@ -165,7 +150,7 @@ func handle(resp *vulnerabilities.ListVulnerabilitySummariesResponse, err error)
165150
if err != nil {
166151
panic(err)
167152
}
168-
for _, w := range resp.WorkloadSummaries {
153+
for _, w := range resp.Nodes {
169154
fmt.Printf("workload: %v\n", w.Workload)
170155
fmt.Printf("summary: %v\n", w.VulnerabilitySummary)
171156
}

‎internal/api/grpcvulnerabilities/summary.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ func (s *Server) ListVulnerabilitySummaries(ctx context.Context, request *vulner
6767
}
6868

6969
response := &vulnerabilities.ListVulnerabilitySummariesResponse{
70-
WorkloadSummaries: ws,
71-
PageInfo: pageInfo,
70+
Nodes: ws,
71+
PageInfo: pageInfo,
7272
}
7373
return response, nil
7474
}

‎internal/database/queries/vulnerabilities.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,15 @@ WHERE v.image_name = @image_name
220220
ORDER BY
221221
CASE WHEN sqlc.narg('order_by') = 'severity_asc' THEN c.severity END ASC,
222222
CASE WHEN sqlc.narg('order_by') = 'severity_desc' THEN c.severity END DESC,
223-
v.id ASC
223+
CASE WHEN sqlc.narg('order_by') = 'package_asc' THEN v.package END ASC,
224+
CASE WHEN sqlc.narg('order_by') = 'package_desc' THEN v.package END DESC,
225+
CASE WHEN sqlc.narg('order_by') = 'cve_id_asc' THEN v.cve_id END ASC,
226+
CASE WHEN sqlc.narg('order_by') = 'cve_id_desc' THEN v.cve_id END DESC,
227+
CASE WHEN sqlc.narg('order_by') = 'suppressed_asc' THEN COALESCE(sv.suppressed, FALSE) END ASC,
228+
CASE WHEN sqlc.narg('order_by') = 'suppressed_desc' THEN COALESCE(sv.suppressed, FALSE) END DESC,
229+
CASE WHEN sqlc.narg('order_by') = 'reason_asc' THEN sv.reason END ASC,
230+
CASE WHEN sqlc.narg('order_by') = 'reason_desc' THEN sv.reason END DESC,
231+
c.severity, v.id ASC
224232
LIMIT sqlc.arg('limit') OFFSET sqlc.arg('offset')
225233
;
226234

‎internal/database/sql/vulnerabilities.sql.go

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

‎pkg/api/vulnerabilities/options.go

+26-5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ type OrderByField string
1414

1515
const (
1616
OrderBySeverity OrderByField = "severity"
17+
OrderByPackage OrderByField = "package"
18+
OrderByCveId OrderByField = "cve_id"
19+
OrderBySuppressed OrderByField = "suppressed"
20+
OrderByReason OrderByField = "reason"
1721
OrderByCluster OrderByField = "cluster"
1822
OrderByNamespace OrderByField = "namespace"
1923
OrderByWorkload OrderByField = "workload"
@@ -25,16 +29,33 @@ const (
2529
OrderByRiskScore OrderByField = "risk_score"
2630
)
2731

32+
// Map of valid fields
33+
var validOrderByFields = map[OrderByField]struct{}{
34+
OrderBySeverity: {},
35+
OrderByPackage: {},
36+
OrderByCveId: {},
37+
OrderBySuppressed: {},
38+
OrderByReason: {},
39+
OrderByCluster: {},
40+
OrderByNamespace: {},
41+
OrderByWorkload: {},
42+
OrderByCritical: {},
43+
OrderByHigh: {},
44+
OrderByMedium: {},
45+
OrderByLow: {},
46+
OrderByUnassigned: {},
47+
OrderByRiskScore: {},
48+
}
49+
50+
// String method for OrderByField
2851
func (o OrderByField) String() string {
2952
return string(o)
3053
}
3154

55+
// IsValid method using a map for efficient lookup
3256
func (o OrderByField) IsValid() bool {
33-
switch o {
34-
case OrderBySeverity, OrderByCluster, OrderByNamespace, OrderByWorkload:
35-
return true
36-
}
37-
return false
57+
_, exists := validOrderByFields[o]
58+
return exists
3859
}
3960

4061
const DefaultLimit = 50

‎pkg/api/vulnerabilities/schemas/vulnerabilities.proto

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ message ListVulnerabilitySummariesRequest {
6666
}
6767

6868
message ListVulnerabilitySummariesResponse {
69-
repeated WorkloadSummary workload_summaries = 1;
69+
repeated WorkloadSummary nodes = 1;
7070
PageInfo page_info = 2;
7171
}
7272

‎pkg/api/vulnerabilities/vulnerabilities.pb.go

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

0 commit comments

Comments
 (0)
Please sign in to comment.