diff --git a/cve-vulner-manager/conf/product_app.conf b/cve-vulner-manager/conf/product_app.conf index ce476b1e2a4388782ab599306361cf81b901f8ab..0a6f62e681619b915bb380cf9ae2ab516169d7b4 100644 --- a/cve-vulner-manager/conf/product_app.conf +++ b/cve-vulner-manager/conf/product_app.conf @@ -319,4 +319,4 @@ PRL = 0.62 PRH = 0.27 [cve-manager-ng] -host = http://cve-manager-ng-service.cve-manager-ng:8080 \ No newline at end of file +host = http://cve-manager-ng.cve-manager-ng:8080 \ No newline at end of file diff --git a/cve-vulner-manager/controllers/cve.go b/cve-vulner-manager/controllers/cve.go index 9b205c8b7eaf03ab11f070c841bbf4bb4003a932..f040f62b8c498ec3dc9f627a65c9e68c9450abb7 100644 --- a/cve-vulner-manager/controllers/cve.go +++ b/cve-vulner-manager/controllers/cve.go @@ -299,6 +299,75 @@ func (u *CveAllIssueController) cvePackForIssue(conditions string, communityFlag u.success(resp) } +// DataForZeroDaySystem resp dta +type DataForZeroDaySystem struct { + models.AllIssueForZeroDay + IssueUrl string `json:"issue_url"` + RpmPublicTime string `json:"rpm_public_time"` + Patches []string `json:"patches"` + Reference []string `json:"reference"` +} + +func (d *DataForZeroDaySystem) issueUrl() string { + return fmt.Sprintf(url, d.Owner, d.Repo, d.IssueNum) +} + +func (d *DataForZeroDaySystem) getRpmPublicTime() string { + var rpmPub string + if len(d.RpmReleaseTime) > 0 { + rpmPub = d.RpmReleaseTime + } else { + rpmPub = d.SaReleaseTime + } + + return rpmPub +} + +// ForZeroDaySystem all issue api for zero day system +func (u *CveAllIssueController) ForZeroDaySystem() { + resp := make(map[string]interface{}) + + currentPage, err := u.GetInt("currentPage", 1) + if err != nil { + u.paramError(resp) + } + + const maxSize = 100 + pageSize, err := u.GetInt("pageSize", maxSize) + if err != nil { + u.paramError(resp) + } + + communityFlag, flagErr := u.GetInt("communityFlag", 0) + if flagErr != nil { + communityFlag = 0 + } + + startTime := u.GetString("startTime", "") + + issueData, err := models.QueryAllIssueForZeroDay(currentPage, pageSize, communityFlag, startTime) + if err != nil { + logs.Error("QueryCveAllIssueData failed: ", err) + resp["errno"] = errcode.RecodeDbErr + resp["errmsg"] = errcode.RecodeText(errcode.RecodeDbErr) + u.response(resp) + } + + data := make([]DataForZeroDaySystem, len(issueData)) + for i := range issueData { + item := DataForZeroDaySystem{AllIssueForZeroDay: issueData[i]} + item.RpmPublicTime = item.getRpmPublicTime() + item.IssueUrl = item.issueUrl() + item.Patches = models.QueryPatches(item.CveNum) + item.Reference = models.QueryReference(item.CveNum) + + data[i] = item + } + + resp["body"] = data + u.success(resp) +} + type KanbanCveAllIssueController struct { BaseController } diff --git a/cve-vulner-manager/cve-ddd/app/coldpatch.go b/cve-vulner-manager/cve-ddd/app/coldpatch.go index b0782af963b96f1e70912429b4336947adf2981e..9f09767ada710a2b6f90d6b90c2749360e88ac9d 100644 --- a/cve-vulner-manager/cve-ddd/app/coldpatch.go +++ b/cve-vulner-manager/cve-ddd/app/coldpatch.go @@ -166,12 +166,10 @@ func (c *coldPatchService) handleAllCollectData() error { result, err1 := c.repo.FindCollectResult(callback.Branch, callback.Date, time.Now().Add(-time.Minute*30)) if err1 != nil { c.log.Errorf("find calback result failed: %v", err1) - continue } if err1 = c.maJun.CollectCallback(callback.CallbackId, result); err1 != nil { c.log.Errorf("collect callback failed: %v", err1) - continue } callback.SetStatusProcessed() diff --git a/cve-vulner-manager/cve-ddd/infrastructure/latestrpmimpl/impl.go b/cve-vulner-manager/cve-ddd/infrastructure/latestrpmimpl/impl.go index 995ee5fc56385344c961ebd687bed1f8f198c695..48a1ac1a2b7c6a519ad2184aa6a02fbf55070095 100644 --- a/cve-vulner-manager/cve-ddd/infrastructure/latestrpmimpl/impl.go +++ b/cve-vulner-manager/cve-ddd/infrastructure/latestrpmimpl/impl.go @@ -7,7 +7,6 @@ import ( "errors" "fmt" "io" - "net/http" "strings" "time" @@ -70,21 +69,6 @@ func (l *latestRpm) InitData(branches []string) error { } func (l *latestRpm) getContent(branch string) ([]byte, error) { - dailyBuildUrl := fmt.Sprintf("%s/repo.openeuler.org/openeuler_latest_rpms/%s.csv", - beego.AppConfig.String("testResult::host"), branch, - ) - req, err := http.NewRequest(http.MethodGet, dailyBuildUrl, nil) - if err != nil { - return nil, err - } - - fileContent, _, err := l.httpClient.Download(req) - if err == nil { - return fileContent, nil - } else { - logrus.Errorf("get latest rpms of %s from dailybuild failed: %s", branch, err.Error()) - } - path := fmt.Sprintf("%s%s.csv", l.rpm.PathPrefix, branch) content, err := l.cli.GetPathContent(l.rpm.Org, l.rpm.Repo, path, l.rpm.Branch) if err != nil { diff --git a/cve-vulner-manager/models/cve.go b/cve-vulner-manager/models/cve.go index 0d2f83eecf201e98cb8e0b29038ae97e65518b1a..9a3630dcf7bbfa8dd09a3c68d36ffe2a284f4702 100644 --- a/cve-vulner-manager/models/cve.go +++ b/cve-vulner-manager/models/cve.go @@ -8,6 +8,8 @@ import ( "strings" "time" + "k8s.io/apimachinery/pkg/util/sets" + "cvevulner/common" "github.com/astaxie/beego/logs" @@ -1266,6 +1268,95 @@ where t.status != 6 and t.cve_id = v.cve_id %s order by t.update_time desc limit return } +// AllIssueForZeroDay model data from database +type AllIssueForZeroDay struct { + Status int8 `orm:"column(status)" json:"status"` + IssueNum string `orm:"column(issue_num)" json:"issue_num"` + CveNum string `orm:"column(cve_num)" json:"cve_num"` + Description string `orm:"column(cve_desc)" json:"description"` + OpeneulerScore float64 `orm:"column(openeuler_score)" json:"openeuler_score"` + NvdScore float64 `orm:"column(nvd_score)" json:"nvd_score"` + NVDVector string `orm:"column(nvd_vector)" json:"nvd_vector"` + AffectedVersion string `orm:"column(affected_version)" json:"affected_version"` + AnalysisVersion string `orm:"column(analysis_version)" json:"analysis_version"` + CveLevel string `orm:"column(cve_level)" json:"cve_level"` + CreateTime string `orm:"column(create_time)" json:"create_time"` + RepairTime string `orm:"column(repair_time)" json:"cve_public_time"` + RpmReleaseTime string `orm:"column(rpm_release_time)" json:"-"` + SaReleaseTime string `orm:"column(sa_release_time)" json:"-"` + OwnedVersion string `orm:"column(owned_version)" json:"owned_version"` + Repo string `orm:"column(repo)" json:"repo"` + Owner string `orm:"column(owner)" json:"owner"` +} + +// QueryAllIssueForZeroDay get issue data from database +func QueryAllIssueForZeroDay(currentPage, pageSize, communityFlag int, startTime string, +) ([]AllIssueForZeroDay, error) { + var res []AllIssueForZeroDay + var err error + + startSize := (currentPage - 1) * pageSize + o := orm.NewOrm() + var sql = `SELECT t.cve_num, t.nvd_score,t.nvd_vector, t.openeuler_score, t.issue_num,t.status, + t.affected_version,t.analysis_version,t.owned_version,t.owner,t.repo,t.cve_level,t.create_time, + v.repair_time,v.cve_desc,s.sa_release_time,s.rpm_release_time +FROM cve_vuln_center v,cve_issue_template t left join cve_issue_template_association s on t.template_id = s.template_id +where t.status != 6 and t.cve_id = v.cve_id %s order by t.update_time desc limit ? offset ?` + if startTime != "" { + if communityFlag > 0 { + _, err = o.Raw(fmt.Sprintf(sql, "and t.create_time >= ? and v.organizate_id = ?"), + startTime, communityFlag, pageSize, startSize, + ).QueryRows(&res) + } else { + _, err = o.Raw(fmt.Sprintf(sql, "and t.create_time >= ?"), startTime, pageSize, startSize).QueryRows(&res) + } + } else { + if communityFlag > 0 { + _, err = o.Raw(fmt.Sprintf(sql, "and v.organizate_id = ?"), communityFlag, pageSize, startSize).QueryRows(&res) + } else { + _, err = o.Raw(fmt.Sprintf(sql, ""), pageSize, startSize).QueryRows(&res) + } + } + + if err != nil { + logs.Error("QueryCveAllIssueData failed, err: ", err) + } + + return res, err +} + +// QueryPatches query patches +func QueryPatches(cveNum string) []string { + info, err := QueryCveOriginPatchInfo(cveNum) + if err != nil { + logs.Error("QueryCveOriginPatchInfo error: ", cveNum, err) + return nil + } + + data := sets.NewString() + for _, v := range info { + data.Insert(v.FixPatch) + } + + return data.List() +} + +// QueryReference query reference +func QueryReference(cveNum string) []string { + info, err := QueryCveOriginReference(cveNum) + if err != nil { + logs.Error("QueryCveOriginPatchInfo error: ", cveNum, err) + return nil + } + + data := sets.NewString() + for _, v := range info { + data.Insert(v.Url) + } + + return data.List() +} + func QueryFirstPatchTime(cveNum string) string { t := OriginUpstreamPatchFirstTime{CveNum: cveNum} orm.NewOrm().Read(&t, "cve_num") diff --git a/cve-vulner-manager/routers/commentsRouter_controllers.go b/cve-vulner-manager/routers/commentsRouter_controllers.go index 198f3ecb13c4fe359210f5e6a5fb7507233d0587..40025d546c14d722f12f3105e0c18fc0f4dc816c 100644 --- a/cve-vulner-manager/routers/commentsRouter_controllers.go +++ b/cve-vulner-manager/routers/commentsRouter_controllers.go @@ -16,6 +16,15 @@ func initComment() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["cvevulner/controllers:CveAllIssueController"] = append(beego.GlobalControllerRouter["cvevulner/controllers:CveAllIssueController"], + beego.ControllerComments{ + Method: "ForZeroDaySystem", + Router: "/zeroDay", + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["cvevulner/controllers:CveDetailController"] = append(beego.GlobalControllerRouter["cvevulner/controllers:CveDetailController"], beego.ControllerComments{ Method: "Get",