diff --git a/cve-vulner-manager/controllers/hook.go b/cve-vulner-manager/controllers/hook.go index f9c21d8e92d93d4798ea6ec52aeaa529cd57eff5..8f3d9de6b238c7d4a0959a4dc40d4c4505dfb8c8 100644 --- a/cve-vulner-manager/controllers/hook.go +++ b/cve-vulner-manager/controllers/hook.go @@ -77,6 +77,7 @@ const ( CommentReviewRemindMaintainer = "@%v 经过 cve-manager 解析 openEuler评分 已改变 需要等待安全组成员审核通过以后, 才能进行后续操作." CIssueType = "CVE和安全问题" HasCreateIssue = "@%v 当前CVE:%v 已经创建过对应的ISSUE, 请不要重复创建ISSUE, cve-manager 只会识别之前的ISSUE,不会对当前ISSUE进行处理." + CreateIssueReject = "@%v 当前CVE:%v 已经创建过对应的ISSUE, 请不要重复创建ISSUE, cve-manager 只会识别之前的ISSUE,不会对当前ISSUE进行处理,当前ISSUE稍后会被工具自动设置为已拒绝." CommentCheckVersion = "@%v 请确认分支: %v 受影响/不受影响." // rejected or upend CommentRejectedState = `@%v 当前issue状态为: %v,请先修改issue状态, 否则评论无法被识别.` @@ -3123,15 +3124,29 @@ func AddGitIssue(issueHook *models.IssuePayload, desc, product string) error { } } owner, accessToken := common.GetOwnerAndToken("", organizationID) + tokenList := models.QueryAuthTokenInfo() + tokenMap := make(map[int8]models.AuthTokenInfo, len(tokenList)) + if len(tokenList) > 0 { + for _, tl := range tokenList { + tokenMap[tl.OrganizationID] = tl + } + } for _, cve := range cveList { item.CveNumber = cve // Check whether the current cve has created an issue checkRes := taskhandler.OPenCheckWhetherIssue(item.CveNumber, repoPath, owner, accessToken, organizationID) if checkRes { + if organizationID == 1 { + taskhandler.AddCommentToIssue(fmt.Sprintf(CreateIssueReject, issueHook.Issue.User.UserName, item.CveNumber), + issueNumber, owner, repoPath, accessToken) + authToken := tokenMap[organizationID] + _ = setReject(authToken.EnId, issueHook.Issue.Id, authToken.AccessToken) + } else { + taskhandler.AddCommentToIssue(fmt.Sprintf(HasCreateIssue, issueHook.Issue.User.UserName, item.CveNumber), + issueNumber, owner, repoPath, accessToken) + } logs.Error("Cve has created an issue, please process the previous issue first, ", item.CveNumber, repoPath, ", organizationID: ", organizationID) - taskhandler.AddCommentToIssue(fmt.Sprintf(HasCreateIssue, issueHook.Assignee.UserName, item.CveNumber), - issueNumber, owner, repoPath, accessToken) return errors.New("Ignore the current issue") } //vb := util.TrimString(v.Body) diff --git a/cve-vulner-manager/models/cve_web.go b/cve-vulner-manager/models/cve_web.go index 5c3c228dcab61c27fc82b6d4fd61d3671321023c..98d5f1a7a9ba25591889dd82cf5322be064d33c8 100644 --- a/cve-vulner-manager/models/cve_web.go +++ b/cve-vulner-manager/models/cve_web.go @@ -18,3 +18,12 @@ type RespCveDetail struct { RespCommon Result *CveDetail } +type RespCveProduct struct { + RespCommon + Result []CveProduct `json:"result"` +} + +type CveProduct struct { + Id int64 `json:"id"` + ProductName string `json:"productName"` +} diff --git a/cve-vulner-manager/taskhandler/cve.go b/cve-vulner-manager/taskhandler/cve.go index c1b36da75e0092651daa6a68bb5e00cda8ec5968..6127bac87a0c6d12095b5e2a122f8c736765c464 100644 --- a/cve-vulner-manager/taskhandler/cve.go +++ b/cve-vulner-manager/taskhandler/cve.go @@ -1349,7 +1349,7 @@ func AddExDataToCenter(cveData models.OriginExcel, return true, nil } -func GetCveOriginData(prcnum, days, openeulernum, credibilityLevel int, cveRef string,list []string) (bool, error) { +func GetCveOriginData(prcnum, days, openeulernum, credibilityLevel int, cveRef string, list []string) (bool, error) { defer common.Catchs() count := 0 beforeTime := common.GetBeforeTime(days) @@ -2508,6 +2508,45 @@ func GetCveSecurityNotice(cveNumber, packageName string, flag bool) (bool, model return false, detail } +func GetCveProduct(cveNumber, packageName string, branch string) (bool, models.RespCveProduct) { + var detail models.RespCveProduct + var urlS url.URL + q := urlS.Query() + path := "/api-cve/cve-security-notice-server/cvedatabase/getCVEProductPackageList" + q.Add("cveId", cveNumber) + q.Add("packageName", packageName) + params := q.Encode() + secLinkConfig := beego.AppConfig.String("reflink::openeuler_web") + req, _ := http.NewRequest("GET", secLinkConfig, nil) + req.URL = &url.URL{ + Scheme: req.URL.Scheme, + Host: req.URL.Host, + RawQuery: params, + Path: path, + } + req.URL.EscapedPath() + resp, err := http.Get(req.URL.String()) + if err != nil { + logs.Error("GetCveSecurityNotice, url: ", req.URL.String(), err) + return false, detail + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil || body == nil { + return false, detail + } + err = json.Unmarshal(body, &detail) + if err != nil { + return false, detail + } + for _, v := range detail.Result { + if strings.EqualFold(v.ProductName, branch) { + return true, detail + } + } + return false, detail +} + //FilterCveExported Filter exportable data func FilterCveExported() { logs.Info("Start by removing cve data that has already released SA...") @@ -2595,7 +2634,7 @@ func downloadPackageFile(localPath, url, affectBranch string) error { return err } -func GiteeDownCsv(localPath, branch string) (error) { +func GiteeDownCsv(localPath, branch string) error { accessToken := os.Getenv("GITEE_TOKEN") //replace the new warehouse owner := "openeuler_latest_rpms" diff --git a/cve-vulner-manager/taskhandler/excel.go b/cve-vulner-manager/taskhandler/excel.go index de8bf1ba507966d0d9c139470a1ebf6f92babe11..79738765a8118c74a4242e5cd4ead6114c57d419 100644 --- a/cve-vulner-manager/taskhandler/excel.go +++ b/cve-vulner-manager/taskhandler/excel.go @@ -1281,14 +1281,17 @@ func affectIssueProc(v IssueAndPkg, affectBranch string, cvexml *[]CveXml, // Check whether the cve data has been released sa issueExist, _ := GetCveSecurityNotice(tpl.CveNum, tpl.Repo, true) if issueExist { - var center models.VulnCenter - center.CveId = tpl.CveId - centErr := models.GetVulnCenterByCid(¢er, "cve_id") - if centErr == nil { - center.IsExport = 1 - models.UpdateVulnCenter(¢er, "is_export") + productExist, _ := GetCveProduct(tpl.CveNum, tpl.Repo, affectBranch) + if productExist { + var center models.VulnCenter + center.CveId = tpl.CveId + centErr := models.GetVulnCenterByCid(¢er, "cve_id") + if centErr == nil { + center.IsExport = 1 + models.UpdateVulnCenter(¢er, "is_export") + } + continue } - continue } err = models.ReplacePackageByCveId(pkgList, tpl.CveId, affectBranch) if err != nil {