diff --git a/server/templates/echo/tags.html b/server/templates/echo/tags.html index 87ab27ee..b3ee9054 100644 --- a/server/templates/echo/tags.html +++ b/server/templates/echo/tags.html @@ -38,7 +38,9 @@ {{ $value.Created.Format "02 Jan, 2006 15:04:05 UTC" }} + {{ $value.VulnerabilityReport.BadVulns }} + {{ end }} diff --git a/server/web.go b/server/web.go index 3074e18b..57c1c469 100644 --- a/server/web.go +++ b/server/web.go @@ -274,5 +274,47 @@ func (rc *registryController) vulnerabilities(c echo.Context) error { if tag == "" { return c.String(http.StatusNotFound, "No tag given") } - return nil + + m1, err := r.ManifestV1(repo, tag) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "repo": repo, + "tag": tag, + }).Warn("getting v1 manifest failed") + } + + for _, h := range m1.History { + var comp v1Compatibility + if err := json.Unmarshal([]byte(h.V1Compatibility), &comp); err != nil { + log.WithFields(log.Fields{ + "error": err, + "repo": repo, + "tag": tag, + }).Warn("unmarshal v1compatibility failed") + return c.String(http.StatusInternalServerError, "unmarshal v1compatibility failed") + } + break + } + + result := clair.VulnerabilityReport{} + + if rc.cl != nil { + result, err = rc.cl.Vulnerabilities(rc.reg, repo, tag, m1) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + "repo": repo, + "tag": tag, + }).Error("error during vulnerability scanning.") + } + } + + err = c.Render(http.StatusOK, "vulns", result) + if err != nil { + log.WithFields(log.Fields{ + "error": err, + }).Error("error during template rendering") + } + return err }