diff --git a/conf/app.conf b/conf/app.conf index 1ca49e1120b5cc50df3cb5e90f7704b056f2204f..506104640911fd4172c8494f7e7f18f88da0d7b1 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -52,9 +52,9 @@ getcve = 0 34 11 * * * oricveflag = 2 oricvecheck = 0 16 19 * * * getissueflag = 2 -getissue = 0 20 10 * * * +getissue = 0 40 15 * * * issueflag = 2 -createissue = 0 45 19 * * * +createissue = 0 23 21 * * * test = 0/10 * * * * * gittokenflag = 2 issueoath = * * */20 * * * @@ -68,7 +68,7 @@ unlockflag = 2 unlock = 0 30 19 * * * hookflag = 2 prochook = 0 34 17 * * * -exceptflag = 1 +exceptflag = 2 exceptcve = 0 3 19 * * * diff --git a/controllers/hook.go b/controllers/hook.go index 784aab978b10436488ccedb3f7dd9fbfff24cd81..60b125cb3b1e1ecbeb4c2f87b3e81bac40cf9796 100644 --- a/controllers/hook.go +++ b/controllers/hook.go @@ -70,12 +70,11 @@ const ( CommentPrivateOpenEuler = "%v 仓库的CVE和安全问题的ISSUE, CVE编号: %v, 填写openEuler评分未通过安全组成员审核需要再次在评论区提交评分,通过审核后才能关闭issue." // Review reminder CommentReviewRemindMaintainer = "@%v 经过 cve-manager 解析 openEuler评分 已改变 需要等待安全组成员审核通过以后, 才能进行后续操作." - CIssueType = "CVE和安全问题" + CIssueType = "CVE和安全问题" ) var comLock sync.Mutex - //HookEventControllers gitee hook callback type HookEventControllers struct { beego.Controller @@ -132,7 +131,7 @@ func (c *HookEventControllers) handleNoteDate() { return } hookPwd := beego.AppConfig.String("hook::hookpwd") - if hookNote.Action == "comment" && hookNote.NoteableType == "Issue" && hookNote.Password == hookPwd{ + if hookNote.Action == "comment" && hookNote.NoteableType == "Issue" && hookNote.Password == hookPwd { logs.Info(string(c.Ctx.Input.RequestBody)) //handle issue comment go handleIssueComment(hookNote) @@ -383,8 +382,8 @@ func handleIssueStateChange(issueHook *models.IssuePayload) error { return issueErr } } - cveCenter := models.VulnCenter{CveId: issueTmp.CveId} - cveErr := models.GetVulnCenterByCid(&cveCenter, "cve_id") + cveCenter := models.VulnCenter{CveId: issueTmp.CveId, CveNum: issueTmp.CveNum} + cveErr := models.GetVulnCenterByCid(&cveCenter, "cve_id", "cve_num") if cveErr != nil { return cveErr } @@ -438,13 +437,13 @@ func handleIssueStateChange(issueHook *models.IssuePayload) error { // When the issue status is complete, verify whether the pr is associated func VerifyIssueAsPr(issueTmp *models.IssueTemplate, cveCenter models.VulnCenter, effectFlag bool, assignee, prSend string) bool { - sn := models.SecurityNotice{CveId: issueTmp.CveId} - secErr := sn.Read("cve_id") + sn := models.SecurityNotice{CveId: issueTmp.CveId, CveNum: issueTmp.CveNum} + secErr := sn.Read("cve_id", "cve_num") if secErr != nil { logs.Error("no data has been found, issueTmp: ", issueTmp) return true } - affectBranchsxList := []string{} + affectBranchsxList := make([]string, 0) affectedBranchs := beego.AppConfig.String("cve::affected_branchs") if affectedBranchs != "" && len(affectedBranchs) > 0 { affectBranchsxList = strings.Split(affectedBranchs, ",") @@ -582,7 +581,7 @@ func paraAffectBrands(affectedVersion string) (unaffectedBranchList []string) { } func paraAffectBrandBool(affectedVersion string) bool { - unaffectedBranchList := []string{} + unaffectedBranchList := make([]string, 0) brandsGroup := strings.Split(affectedVersion, ",") if len(brandsGroup) > 0 { for _, brand := range brandsGroup { @@ -769,8 +768,8 @@ func isNormalCloseIssue(cveID int64, issueState int8) bool { func updateTempAndCenter(issueTmp models.IssueTemplate, cveCenter models.VulnCenter, token, owner string) bool { appearErr := 0 uNaffected := beego.AppConfig.String("labeUnaffected") - sn := models.SecurityNotice{CveId: issueTmp.CveId} - snErr := sn.Read("cve_id") + sn := models.SecurityNotice{CveId: issueTmp.CveId, CveNum: issueTmp.CveNum} + snErr := sn.Read("cve_id", "cve_num") if snErr != nil { logs.Error("err: ", snErr) } else { @@ -878,8 +877,8 @@ func maintainerApprove(issueTmp *models.IssueTemplate, cuAccount, owner, token, logs.Error(err) return } - cveCenter := models.VulnCenter{CveId: issueTmp.CveId} - err = models.GetVulnCenterByCid(&cveCenter, "cve_id") + cveCenter := models.VulnCenter{CveId: issueTmp.CveId, CveNum: issueTmp.CveNum} + err = models.GetVulnCenterByCid(&cveCenter, "cve_id", "cve_num") if err != nil { return } @@ -931,8 +930,8 @@ func securityApprove(issueTmp *models.IssueTemplate, cuAccount, owner, token, fi cuAccount), issueTmp.IssueNum, owner, issueTmp.Repo, token) return } - cveCenter := models.VulnCenter{CveId: issueTmp.CveId} - err := models.GetVulnCenterByCid(&cveCenter, "cve_id") + cveCenter := models.VulnCenter{CveId: issueTmp.CveId, CveNum: issueTmp.CveNum} + err := models.GetVulnCenterByCid(&cveCenter, "cve_id", "cve_num") if err != nil { return } diff --git a/models/giteeissue.go b/models/giteeissue.go index 39a0d0d84356e06dfb0e4a20f56bd1ea705f819d..395ee3f4583e7b188bc9f852b9435f2c939cc7c3 100644 --- a/models/giteeissue.go +++ b/models/giteeissue.go @@ -73,7 +73,7 @@ func (g *GiteOriginIssue) InsertOrUpdate() error { if err == nil && ex.Id > 0 { g.Id = ex.Id } - logs.Info("正在处理repo: ", g.RepoPath, g.Number, g.CveNumber) + logs.Info("processing, repo: ", g.RepoPath, g.Number, g.CveNumber) _, err = o.InsertOrUpdate(g) return err } diff --git a/models/hookevent.go b/models/hookevent.go index dccb85377ce3f64c324002ec60c42b7709653501..51d760b0c7000a1cd519b50473aa34eb847ce2a6 100644 --- a/models/hookevent.go +++ b/models/hookevent.go @@ -35,6 +35,7 @@ type HookIssue struct { FinishedAt time.Time `json:"finished_at"` IssueType string `json:"issue_type"` SecurityHole bool `json:"security_hole"` + IssueState string `json:"issue_state"` } //IssueLabel issue label diff --git a/models/issue.go b/models/issue.go index 72c467727d1b4338bbe8e215aaa3172c4ff85b5f..337e392462d5caf5aca1eb1b6921990543ea003d 100644 --- a/models/issue.go +++ b/models/issue.go @@ -100,12 +100,12 @@ func GetVulnCenterByCVEID(vc *VulnCenter, cveId int64, fields ...string) error { } //QueryIssueSecurity 查找安全公告 -func QueryIssueSecurity(cveId int64) (SecurityNotice, error) { +func QueryIssueSecurity(cveId int64, cveNum string) (SecurityNotice, error) { o := orm.NewOrm() var sn SecurityNotice err := o.Raw("select sec_id, cve_id,cve_num,openeuler_id,introduction,summary,theme,"+ "description,influence_component,affect_product,reference_link"+ - " from cve_security_notice where cve_id = ?", cveId).QueryRow(&sn) + " from cve_security_notice where cve_id = ? and cve_num = ?", cveId, cveNum).QueryRow(&sn) if err == nil { logs.Info("cve_security_notice 查询结果:", sn) } else { diff --git a/models/modeldb.go b/models/modeldb.go index 154fc247462698c6fb333525fcd353de32cb05a9..f155a45029b81f4c9461de3404a5db95d7418b51 100644 --- a/models/modeldb.go +++ b/models/modeldb.go @@ -38,7 +38,7 @@ type VulnCenter struct { CveNum string `orm:"size(256);column(cve_num);index" description:"cve编号"` Description string `orm:"size(8192);column(cve_desc)" description:"cve描述"` CveLevel string `orm:"size(32);column(cve_level)" description:"致命(Critical);严重(High);中等(Medium);一般(Low);其他"` - Status int8 `orm:"default(0);column(cve_status)" description:"0:cve新增;1:数据已变化;2:已创建issue; 3: 数据创建失败; 4:不符合创建issue条件数据(cve年份不符合要求);5:issue已经创建过,不符合要求,不处理"` + Status int8 `orm:"default(0);column(cve_status)" description:"0:cve新增;1:数据已变化;2:已创建issue; 3: 数据创建失败; 4:不符合创建issue条件数据(cve年份不符合要求);5:issue已经创建过,不符合要求,不处理;6:字段为空(评分,描述等)"` CveVersion string `orm:"size(128);column(cve_version)" description:"cve归属版本"` RepairTime string `orm:"size(32);column(repair_time)" description:"cve修复时间"` PackName string `orm:"size(512);column(pack_name)" description:"cve对应得包名称"` @@ -484,6 +484,7 @@ type GiteOriginIssue struct { GrabTime time.Time `json:"grab_time" orm:"auto_now;type(datetime)" description:"记录当前issue抓取的时间"` InfProduct string `json:"inf_product" orm:"null" description:"受影响的产品"` //受影响的产品 RepoDesc string `json:"repo_desc" orm:"null;size(2048)" description:"cve 对组件的描述"` + IssueState string `orm:"size(50);column(issue_state)" description:"issue 中文状态"` } type OriginExcel struct { diff --git a/models/securitynotice.go b/models/securitynotice.go index 1aff8c2a1bb96f35b80d866c64a64fea68e35e84..b1bdaf19e639dd69c7d4a8f913aa7fb25c71d436 100644 --- a/models/securitynotice.go +++ b/models/securitynotice.go @@ -3,9 +3,9 @@ package models import "github.com/astaxie/beego/orm" //Read get security notice by colName -func (sn *SecurityNotice) Read(colName string) error { +func (sn *SecurityNotice) Read(colName ...string) error { o := orm.NewOrm() - return o.Read(sn, colName) + return o.Read(sn, colName...) } //Update update security notice by column names func (sn *SecurityNotice)Update(colName ...string) error { diff --git a/task/issuetask.go b/task/issuetask.go index 249eed40a948deea57809363002117175a44e51d..a0d7b135ae4e470f4a6af653da7293f88bfb1aa3 100644 --- a/task/issuetask.go +++ b/task/issuetask.go @@ -116,7 +116,7 @@ func addUnlimitedIssue(beforeTime string, prcnum int, years, toolYears, manYears goi, oks := models.QueryIssueCveByNum(issueValue.CveNum, issueValue.PackName) if oks { if strings.ToLower(goi.State) == "closed" || strings.ToLower(goi.State) == "rejected" || - goi.State == "已完成" || goi.State == "已拒绝" { + goi.State == "已完成" || goi.State == "已拒绝" || goi.IssueState == "已挂起" { models.UpdateIssueStatus(issueValue, 2) logs.Info("The cve data has already been submitted to the issue, no need to submit repeatedly, cveData: ", issueValue) continue @@ -243,7 +243,7 @@ func addLimitedIssue(beforeTime string, prcnum int, years, toolYears, manYears i goi, oks := models.QueryIssueCveByNum(issueValue.CveNum, issueValue.PackName) if oks { if strings.ToLower(goi.State) == "closed" || strings.ToLower(goi.State) == "rejected" || - goi.State == "已完成" || goi.State == "已拒绝" { + goi.State == "已完成" || goi.State == "已拒绝" || goi.IssueState == "已挂起" { models.UpdateIssueStatus(issueValue, 2) logs.Info("cve数据已经已经提交过issue,不需要重复提交, cveData: ", issueValue) continue @@ -396,7 +396,8 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri it.CveNum = issueValue.CveNum it.OwnedVersion = issueValue.CveVersion it.OwnedComponent = issueValue.PackName - templateErr := models.GetIssueTemplateByColName(&it, "CveNum", "OwnedVersion", "OwnedComponent") + it.CveId = issueValue.CveId + templateErr := models.GetIssueTemplateByColName(&it, "CveNum", "OwnedVersion", "OwnedComponent", "CveId") if templateErr == nil && it.TemplateId > 0 { it.NVDScore = sr.NVDScore it.NVDVector = sr.NvectorVule @@ -417,6 +418,16 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri it.Assignee = repoMainTainer } } + // Judgment of necessary fields + if it.NVDScore <= 0 || len(issueValue.Description) < 2 || len(issueValue.CveNum) < 2 || + len(issueValue.PackName) < 2 || len(issueValue.CveVersion) < 1 { + logs.Error("Field is empty: NVDScore: ", it.NVDScore,",Description: ", + issueValue.Description, ",CveNum:", issueValue.CveNum, ",PackName: ", + issueValue.PackName, ",CveVersion: ", issueValue.CveVersion) + // Update issue status + models.UpdateIssueStatus(issueValue, 6) + return errors.New("Field is empty") + } path = it.Repo _, err := taskhandler.UpdateIssueToGit(accessToken, owner, path, issueValue, it) @@ -445,7 +456,7 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) error { assignee := "" brandArry := []string{} - sn, err := models.QueryIssueSecurity(issueValue.CveId) + sn, err := models.QueryIssueSecurity(issueValue.CveId, issueValue.CveNum) if err == nil && len(sn.CveNum) > 0 { path = issueValue.PackName logs.Info("查询安全信息:sn: ", sn) @@ -483,6 +494,16 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er brandArry = append(brandArry, branch) } } + // Judgment of necessary fields + if sc.NVDScore <= 0 || len(issueValue.Description) < 2 || len(issueValue.CveNum) < 2 || + len(issueValue.PackName) < 2 || len(issueValue.CveVersion) < 1 { + logs.Error("Field is empty: NVDScore: ", sc.NVDScore,",Description: ", + issueValue.Description, ",CveNum:", issueValue.CveNum, ",PackName: ", + issueValue.PackName, ",CveVersion: ", issueValue.CveVersion) + // Update issue status + models.UpdateIssueStatus(issueValue, 6) + return errors.New("Field is empty") + } resp, err := taskhandler.CreateIssueToGit(accessToken, owner, path, assignee, issueValue, sc, brandArry) if err != nil && err.Error() != "Recreate issue" { logs.Error("创建issue失败, err: ", err, "resp: ", resp, "cveId: ", issueValue.CveId) diff --git a/taskhandler/common.go b/taskhandler/common.go index 104bbdefa8703f89744118b068b3ae1c7b4ebc3b..451e81fc9fd074d43d20eda8ccba2c84a6ca30ad 100644 --- a/taskhandler/common.go +++ b/taskhandler/common.go @@ -14,7 +14,6 @@ import ( "strings" ) - const ( //GiteOrgInfoURL get gitee org info url GiteOrgInfoURL = `https://gitee.com/api/v5/orgs/%v?access_token=%v` @@ -405,21 +404,23 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str } StatusName := "" if its.StatusName != "" && len(its.StatusName) > 1 { - if its.StatusName == "待办的" || its.StatusName == "开启的"{ + if its.StatusName == "待办的" || its.StatusName == "开启的" || strings.ToLower(its.StatusName) == "open" { StatusName = "open" - } else if its.StatusName == "进行中" || strings.ToLower(its.StatusName) == "started" { + } else if its.StatusName == "进行中" || strings.ToLower(its.StatusName) == "started" || + strings.ToLower(its.StatusName) == "progressing" { StatusName = "progressing" - } else if its.StatusName == "已完成" { + } else if its.StatusName == "已完成" || strings.ToLower(its.StatusName) == "closed" { StatusName = "closed" labels = beego.AppConfig.String("labelFixed") } else if its.StatusName == "已拒绝" || strings.ToLower(its.StatusName) == "rejected" { StatusName = "rejected" return "" - }else if its.StatusName == "已挂起" || strings.ToLower(its.StatusName) == "suspended" { + } else if its.StatusName == "已挂起" || strings.ToLower(its.StatusName) == "suspended" { StatusName = "suspended" return "" } else { StatusName = its.StatusName + return "" } } if flag == 1 { @@ -551,7 +552,7 @@ func RemoveSubstring(s string, subList []string) string { func deleteTailBlank(str string) string { spaceNum := 0 - for i := len(str)-1; i >= 0; i-- { // 去除字符串尾部的所有空格 + for i := len(str) - 1; i >= 0; i-- { // 去除字符串尾部的所有空格 if str[i] == ' ' { spaceNum++ } else { @@ -561,7 +562,7 @@ func deleteTailBlank(str string) string { return str[:len(str)-spaceNum] } -func openEulerScoreProc(openEulerScore float64) (CveLevel string){ +func openEulerScoreProc(openEulerScore float64) (CveLevel string) { if openEulerScore >= 9.0 { CveLevel = "Critical" } else if openEulerScore >= 7.0 && openEulerScore <= 8.9 { @@ -588,4 +589,4 @@ func PathExists(path string) (bool, error) { func baseStdEncode(srcBtye []byte) string { encoding := base64.StdEncoding.EncodeToString(srcBtye) return encoding -} \ No newline at end of file +} diff --git a/taskhandler/createissue.go b/taskhandler/createissue.go index 88c71beb3dcd4d348cc0fb9209f65a2cbfa15030..13f4509c88d86be50c155833a70223ed9c17188f 100644 --- a/taskhandler/createissue.go +++ b/taskhandler/createissue.go @@ -18,7 +18,7 @@ import ( var updateLock sync.Mutex func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc models.Score, resp map[string]interface{}, - path, assignee, issueType, labels, owner string) *models.IssueTemplate { + path, assignee, issueType, labels, owner string) { issueTemp.CveId = cve.CveId issueTemp.CveNum = cve.CveNum issueTemp.OwnedComponent = path @@ -86,12 +86,11 @@ func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc issueTemp.Program = "" issueTemp.SecurityHole = 0 logs.Info("组装issue,模板数据存入db: ", issueTemp) - return issueTemp } func GetIssueNum(accessToken, owner, path, issueNum string) error { url := fmt.Sprintf("https://gitee.com/api/v5/repos/%v/%v/issues/%v?access_token=%v", owner, path, issueNum, accessToken) - if accessToken != "" && owner != "" && path != "" && issueNum != ""{ + if accessToken != "" && owner != "" && path != "" && issueNum != "" { issueInfo, err := util.HTTPGetCom(url) var respBody map[string]interface{} if err == nil && issueInfo != nil { @@ -100,7 +99,7 @@ func GetIssueNum(accessToken, owner, path, issueNum string) error { logs.Error(err) return err } - if respBody !=nil && respBody["number"] != nil && respBody["number"].(string) == issueNum { + if respBody != nil && respBody["number"] != nil && respBody["number"].(string) == issueNum { return nil } } else { @@ -116,7 +115,8 @@ func CreateIssueToGit(accessToken, owner, path, assignee string, defer common.Catchs() var it models.IssueTemplate it.CveId = cve.CveId - templateErr := models.GetIssueTemplateByColName(&it, "cve_id") + it.CveNum = cve.CveNum + templateErr := models.GetIssueTemplateByColName(&it, "cve_id", "cve_num") sia := models.SpecIssueAssigness{PackageName: cve.PackName, Status: 1} specError := models.GetSpecIssueAssignee(&sia, "package_name", "status") if specError == nil && sia.Id > 0 { @@ -146,10 +146,29 @@ func CreateIssueToGit(accessToken, owner, path, assignee string, url := "https://gitee.com/api/v5/repos/" + owner + "/issues/" + it.IssueNum score := strconv.FormatFloat(sc.NVDScore, 'f', 1, 64) OpenEulerScore := strconv.FormatFloat(it.OpenEulerScore, 'f', 1, 64) + if len(it.AffectedVersion) > 1 { + brandArryTmp := strings.Split(it.AffectedVersion, ",") + for _, brand := range brandArray { + if !strings.Contains(it.AffectedVersion, brand) { + brandArryTmp = append(brandArryTmp, brand+":") + } + } + brandStr := strings.Join(brandArryTmp, ",") + it.AffectedVersion = brandStr + } else { + if len(brandArray) > 0 { + var brandArryTmp []string + for _, brand := range brandArray { + brandArryTmp = append(brandArryTmp, brand+":") + } + brandStr := strings.Join(brandArryTmp, ",") + it.AffectedVersion = brandStr + } + } requestBody := CreateIssueBody(accessToken, owner, path, it.Assignee, cve, sc, OpenEulerScore, score, labels, it, 1, it.IssueType, "", brandArray) if requestBody != "" && len(requestBody) > 1 { - logs.Info("isssue_body: ", requestBody) + logs.Info("Template data before issue creation: ", requestBody) updateLock.Lock() resp, err := util.HTTPPatch(url, requestBody) updateLock.Unlock() @@ -165,14 +184,6 @@ func CreateIssueToGit(accessToken, owner, path, assignee string, // Structure data //var issueTemp models.IssueTemplate CreateIssueData(&it, cve, sc, resp, path, it.Assignee, issueType, labels, owner) - if len(brandArray) > 0 { - var brandArryTmp []string - for _, brand := range brandArray { - brandArryTmp = append(brandArryTmp, brand+":") - } - brandStr := strings.Join(brandArryTmp, ",") - it.AffectedVersion = brandStr - } // Store issue data issTempID, err := models.CreateIssueTemplate(&it) if err != nil { @@ -434,7 +445,7 @@ func CreateDepositHooks(accessToken string, owner string, path string, for _, wh := range ihs { if wh.HookUrl == hookurl { hookExist = true - hookId := strconv.FormatInt(wh.HookId,10) + hookId := strconv.FormatInt(wh.HookId, 10) if accessToken != "" && owner != "" && path != "" { url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/hooks/" + hookId push_events := "true" diff --git a/taskhandler/cve.go b/taskhandler/cve.go index e3a81caf893bf45b8714c2f4809d700dde0c4911..182f1d398857e35e71954f9c5bec166e2d77073b 100644 --- a/taskhandler/cve.go +++ b/taskhandler/cve.go @@ -751,7 +751,9 @@ func GenCveVuler(cveData models.OriginUpstream, cveRef string, openeulernum int) pkList := strings.Split(pk, "==") if len(pkList) == 2 { if _, ok := packNameMap[pkList[0]]; ok { - packNameMap[pkList[0]] += "," + pkList[1] + if !strings.Contains(packNameMap[pkList[0]], pkList[1]) { + packNameMap[pkList[0]] += "," + pkList[1] + } } else { packNameMap[pkList[0]] = pkList[1] } @@ -882,7 +884,6 @@ func GetCveOriginData(prcnum, days, openeulernum int, cveRef string) (bool, erro "curtime: ", common.GetCurTime()) break } - logs.Info("总共有: ", num, "条的数据需要处理, ", osx) ch := make(chan int, len(osx)) for i, cveOrg := range osx { count = count + 1 @@ -1098,7 +1099,8 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c } var issueTemp models.IssueTemplate issueTemp.CveId = cveid - err := models.GetIssueTemplateByColName(&issueTemp, "cve_id") + issueTemp.CveNum = vul.CveNum + err := models.GetIssueTemplateByColName(&issueTemp, "cve_id", "cve_num") if err != nil { logs.Info("no issueTemp: ", err) } @@ -1206,7 +1208,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c sec.ReferenceLink = vul.CveUrl var issueTemps models.IssueTemplate issueTemps.CveId = vul.CveId - models.GetIssueTemplateByColName(&issueTemps, "cve_id") + issueTemps.CveNum = vul.CveNum + models.GetIssueTemplateByColName(&issueTemps, "cve_id", "cve_num") opScoreLeve := "" opScore := float64(0) if issueTemps.OpenEulerScore > 0 { @@ -1443,7 +1446,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c } var issueTemp models.IssueTemplate issueTemp.CveId = vul.CveId - templateErr := models.GetIssueTemplateByColName(&issueTemp, "cve_id") + issueTemp.CveNum = vul.CveNum + templateErr := models.GetIssueTemplateByColName(&issueTemp, "cve_id", "cve_num") if templateErr == nil && issueTemp.TemplateId > 0 { //issueTemp.CveNum = cveData.CveNumber issueTemp.OwnedComponent = cveData.RepoPath diff --git a/taskhandler/grabissue.go b/taskhandler/grabissue.go index 778318911d29e7190b238c6f71cbe36eb6afa931..be7423d9626b24f36ef80d0311066789e86010d7 100644 --- a/taskhandler/grabissue.go +++ b/taskhandler/grabissue.go @@ -152,8 +152,8 @@ func handleIssueList(list []models.HookIssue, product, desc string) { issueType := util.TrimString(v.IssueType) issueNumber := util.TrimString(v.Number) issueState := util.TrimString(v.State) + issueZhState := util.TrimString(v.IssueState) repoPath := util.TrimString(v.Repository.Path) - //logs.Info("issue_type: ", v.IssueType, ",title: ", v.Title, ", \n issue_state: ", v.State, ",number: ", v.Number, ",body: ", v.Body) if issueType == CIssueType || strings.HasPrefix(issueTitle, "CVE") { item := models.GiteOriginIssue{IssueId: v.Id, Url: v.HtmlUrl, Number: issueNumber, State: issueState, Title: issueTitle, @@ -161,7 +161,8 @@ func handleIssueList(list []models.HookIssue, product, desc string) { IssueCreateAt: v.CreateAt, IssueUpdateAt: v.UpdateAt, IssueFinishAt: v.FinishedAt, IssueCreate: v.User.Login, IssueAssignee: v.Assignee.Login, RepoPath: repoPath, - RepoUrl: v.Repository.Url, InfProduct: product, RepoDesc: desc} + RepoUrl: v.Repository.Url, InfProduct: product, + RepoDesc: desc, IssueState:issueZhState} //vt := util.TrimString(v.Title) if strings.HasPrefix(issueTitle, "CVE") { item.CveNumber = issueTitle @@ -240,11 +241,12 @@ func GetIssueList(accToken, owner, repo, state string, page int) (issueList []mo logs.Error("ReadAll, GiteRepoIssuesURL: ", giteUrl, ", repo: ", repo, ", err: ", err) return issueList, err } - //logs.Info("issue list: ", string(body)) + //logs.Info("-----------issue list: ", string(body)) err = json.Unmarshal(body, &issueList) if err != nil { logs.Error("Unmarshal, GiteRepoIssuesURL: ", giteUrl, ", repo: ", repo, ", err: ", err) } + //logs.Info("++++++++++issueList: ", issueList) return }