|
|
|
@ -28,22 +28,20 @@ import (
|
|
|
|
|
"github.com/guregu/null/zero"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func (pgSQL *pgSQL) ListVulnerabilities(namespaceName string, limit int, page int) ([]database.Vulnerability, error) {
|
|
|
|
|
return listVulnerabilities(pgSQL, namespaceName, limit, page)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func listVulnerabilities(queryer Queryer, namespaceName string, limit int, page int) ([]database.Vulnerability, error) {
|
|
|
|
|
func (pgSQL *pgSQL) ListVulnerabilities(namespaceName string, limit int, startID int) ([]database.Vulnerability, int, error) {
|
|
|
|
|
defer observeQueryTime("listVulnerabilities", "all", time.Now())
|
|
|
|
|
|
|
|
|
|
// Query.
|
|
|
|
|
query := searchVulnerabilityBase + searchVulnerabilityByNamespace
|
|
|
|
|
rows, err := queryer.Query(query, namespaceName, limit, page*limit)
|
|
|
|
|
rows, err := pgSQL.Query(query, namespaceName, startID, limit+1)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, handleError("searchVulnerabilityByNamespace", err)
|
|
|
|
|
return nil, -1, handleError("searchVulnerabilityByNamespace", err)
|
|
|
|
|
}
|
|
|
|
|
defer rows.Close()
|
|
|
|
|
|
|
|
|
|
var vulns []database.Vulnerability
|
|
|
|
|
nextID := -1
|
|
|
|
|
size := 0
|
|
|
|
|
// Scan query.
|
|
|
|
|
for rows.Next() {
|
|
|
|
|
var vulnerability database.Vulnerability
|
|
|
|
@ -59,17 +57,22 @@ func listVulnerabilities(queryer Queryer, namespaceName string, limit int, page
|
|
|
|
|
&vulnerability.Metadata,
|
|
|
|
|
)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, handleError("searchVulnerabilityByNamespace.Scan()", err)
|
|
|
|
|
return nil, -1, handleError("searchVulnerabilityByNamespace.Scan()", err)
|
|
|
|
|
}
|
|
|
|
|
size++
|
|
|
|
|
if size > limit {
|
|
|
|
|
nextID = vulnerability.ID
|
|
|
|
|
} else {
|
|
|
|
|
vulns = append(vulns, vulnerability)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := rows.Err(); err != nil {
|
|
|
|
|
return nil, handleError("searchVulnerabilityByNamespace.Rows()", err)
|
|
|
|
|
return nil, -1, handleError("searchVulnerabilityByNamespace.Rows()", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return vulns, nil
|
|
|
|
|
fmt.Println(nextID)
|
|
|
|
|
return vulns, nextID, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (pgSQL *pgSQL) FindVulnerability(namespaceName, name string) (database.Vulnerability, error) {
|
|
|
|
|