diff --git a/cve-vulner-manager/common/common.go b/cve-vulner-manager/common/common.go index 2d99ff860952fb21fd11b3461c08626b1bb6cc18..6ea9f3a0a1a9b809928a9fef80da33cc54706f14 100644 --- a/cve-vulner-manager/common/common.go +++ b/cve-vulner-manager/common/common.go @@ -550,7 +550,7 @@ func GetOwnerAndToken(cve string, organizationID int8, flag ...int64) (owner, ac accessToken = beego.AppConfig.String("gitee::git_token") } if len(flag) > 0 { - if organizationID == 1 && (GetCveSource(cve) == 1 || GetCveSourceRecord(cve) == 1) { + if GetCveSource(cve) == 1 || GetCveSourceRecord(cve) == 1 { accessToken = beego.AppConfig.String("majun::token") } } diff --git a/cve-vulner-manager/controllers/cve.go b/cve-vulner-manager/controllers/cve.go index 3042d94f07a56df2746b6a03711acba81ea81052..f6881fbdfb4b0a5eed7b5eab99848ea94a215464 100644 --- a/cve-vulner-manager/controllers/cve.go +++ b/cve-vulner-manager/controllers/cve.go @@ -1,6 +1,7 @@ package controllers import ( + "encoding/json" "fmt" "strings" "time" @@ -154,7 +155,12 @@ func (u *CveAllIssueController) Get() { cves = strings.Split(cve, ",") } if len(cves) > 0 { - u.cveForIssue(cves) + u.cveForIssue(cves, communityFlag) + return + } + conditions := u.GetString("conditions", "") + if len(conditions) != 0 { + u.cvePackForIssue(conditions, communityFlag) return } startTime := u.GetString("startTime", "") @@ -218,9 +224,9 @@ func (u *CveAllIssueController) Get() { } } -func (u *CveAllIssueController) cveForIssue(cves []string) { +func (u *CveAllIssueController) cveForIssue(cves []string, communityFlag int) { resp := make(map[string]interface{}) - issueData, issueErr := models.QueryCveIssue(cves) + issueData, issueErr := models.QueryCveIssue(cves, communityFlag) resp["code"] = errcode.RecodeOk resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) resp["body"] = nil @@ -261,6 +267,41 @@ func (u *CveAllIssueController) cveForIssue(cves []string) { u.RetCveData(resp) } +func (u *CveAllIssueController) cvePackForIssue(conditions string, communityFlag int) { + resp := make(map[string]interface{}) + var req []models.Cve + err := json.Unmarshal([]byte(conditions), &req) + if err != nil { + resp["code"] = -1 + resp["errmsg"] = err.Error() + u.RetCveData(resp) + return + } + issueData, issueErr := models.QueryCvePackIssue(req, communityFlag) + resp["code"] = errcode.RecodeOk + resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk) + resp["body"] = nil + if issueErr != nil { + resp["code"] = errcode.RecodeNodata + resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata) + u.RetCveData(resp) + return + } + var res []CveAllIssueoData + + for _, issues := range issueData { + var irda CveAllIssueoData + irda.CveNum = issues.CveNum + irda.IssueNum = issues.IssueNum + irda.Version = issues.OwnedVersion + irda.Component = issues.OwnedComponent + irda.Create = issues.CreateTime.Format("2006-01-02 15:04:05") + res = append(res, irda) + } + resp["body"] = res + u.RetCveData(resp) +} + type KanbanCveAllIssueController struct { beego.Controller } diff --git a/cve-vulner-manager/controllers/file.go b/cve-vulner-manager/controllers/file.go index 744c2d9da86526283634d8392d9e471e666b169c..9c10a0b52296ee752584f5c5a2430297a42e0783 100644 --- a/cve-vulner-manager/controllers/file.go +++ b/cve-vulner-manager/controllers/file.go @@ -331,7 +331,7 @@ func GenAndUploadCvrf(cvrfFileMap map[string]taskhandler.CvrfSa, cvrfFileName := componentMap[comKey].CvrfFileName cvrfVule := cvrfFileMap[cvrfFileName] md5Ok, tmpOpenEulerSANum := taskhandler.QueryCveMd5(componentMap[comKey].CveNum, componentMap[comKey].OwnedComponent, - componentMap[comKey].OpenEulerSANum, taskhandler.FIXEDFLAGE) + componentMap[comKey].OpenEulerSANum, strings.Join(affectBranchSlice, ","), taskhandler.FIXEDFLAGE) taskhandler.WriteCvrfXml(cvrfFileName, &cvrfVule) writeCvrfSlice = append(writeCvrfSlice, cvrfFileName) if md5Ok { @@ -344,11 +344,11 @@ func GenAndUploadCvrf(cvrfFileMap map[string]taskhandler.CvrfSa, UpdateOpenEulerSaNumStatus(br.OpenEulerSANum) } } else { - for _, br := range comValue.CveNumMap { + for branch, br := range comValue.CveNumMap { cvrfFileName := br.CvrfFileName cvrfVule := cvrfFileMap[br.CvrfFileName] md5Ok, tmpOpenEulerSANum := taskhandler.QueryCveMd5(br.CveNumSlice, componentMap[comKey].OwnedComponent, - br.OpenEulerSANum, taskhandler.FIXEDFLAGE) + br.OpenEulerSANum, branch, taskhandler.FIXEDFLAGE) taskhandler.WriteCvrfXml(cvrfFileName, &cvrfVule) writeCvrfSlice = append(writeCvrfSlice, cvrfFileName) if md5Ok { @@ -364,7 +364,7 @@ func GenAndUploadCvrf(cvrfFileMap map[string]taskhandler.CvrfSa, cvrfFileName := componentMap[comKey].CvrfFileName cvrfVule := cvrfFileMap[cvrfFileName] md5Ok, tmpOpenEulerSANum := taskhandler.QueryCveMd5(componentMap[comKey].CveNum, componentMap[comKey].OwnedComponent, - componentMap[comKey].OpenEulerSANum, taskhandler.FIXEDFLAGE) + componentMap[comKey].OpenEulerSANum, strings.Join(affectBranchSlice, ","), taskhandler.FIXEDFLAGE) taskhandler.WriteCvrfXml(cvrfFileName, &cvrfVule) writeCvrfSlice = append(writeCvrfSlice, cvrfFileName) if md5Ok { diff --git a/cve-vulner-manager/cve-timed-task/db_models/db_operations.go b/cve-vulner-manager/cve-timed-task/db_models/db_operations.go index ba64e87ba841b300448df59b423f26f29a7a4086..54afaceb6738e2a013e37b89b9412a7a6cc724fd 100644 --- a/cve-vulner-manager/cve-timed-task/db_models/db_operations.go +++ b/cve-vulner-manager/cve-timed-task/db_models/db_operations.go @@ -26,16 +26,16 @@ func SelectYamlOriginData(packageName, version string, ORM orm.Ormer) (models.Op // InsertYamlOriginData insert origin data func InsertYamlOriginData(openGussYaml *models.OpenGussYaml, ORM orm.Ormer) error { sqlString := "insert into cve_open_guss_yaml(package_name,version,origin_url, " + - "status, cpe_name,create_time,update_time, mark_bit, repo_name) values(?,?,?,?,?,?,?,?,?)" + "status, cpe_name,create_time,update_time, mark_bit, repo_name, warehouse) values(?,?,?,?,?,?,?,?,?,?)" _, err := ORM.Raw(sqlString, openGussYaml.PackageName, openGussYaml.Version, openGussYaml.OriginUrl, openGussYaml.Status, openGussYaml.CpeName, openGussYaml.CreateTime, - openGussYaml.UpdateTime, openGussYaml.MarkBit, openGussYaml.Repo).Exec() + openGussYaml.UpdateTime, openGussYaml.MarkBit, openGussYaml.Repo, openGussYaml.Warehouse).Exec() return err } // UpdateYamlOriginData Update origin data func UpdateYamlOriginData(openGussYaml *models.OpenGussYaml, ORM orm.Ormer) (int64, error) { - id, err := ORM.Update(openGussYaml, "OriginUrl", "Status", "CpeName", "UpdateTime", "Repo", "MarkBit") + id, err := ORM.Update(openGussYaml, "OriginUrl", "Status", "CpeName", "UpdateTime", "Repo", "MarkBit", "Warehouse") return id, err } diff --git a/cve-vulner-manager/cve-timed-task/tabletask/gauss_yaml.go b/cve-vulner-manager/cve-timed-task/tabletask/gauss_yaml.go index 0cac30424edadcb617df1e1b922e02868e5eb035..381f25cdeca126187bc6a095839413b2b872bced 100644 --- a/cve-vulner-manager/cve-timed-task/tabletask/gauss_yaml.go +++ b/cve-vulner-manager/cve-timed-task/tabletask/gauss_yaml.go @@ -1,21 +1,24 @@ package tabletask import ( + "errors" + "io" + "net/http" + "os" + "strings" + "time" + "cvevulner/cve-timed-task/db_models" "cvevulner/cve-timed-task/util" "cvevulner/models" - "errors" + "github.com/astaxie/beego" "github.com/astaxie/beego/logs" "github.com/astaxie/beego/orm" - "io" - "net/http" - "os" - "time" ) // DownloadGuessYaml Download the yaml file of openGauss on Gitee -func DownloadGuessYaml() (string, error) { +func DownloadGuessYaml(downloadUrl string) (string, error) { filePath := beego.AppConfig.String("timedtask::packageDir") + "gauss_yaml/" fErr := util.MakeDir(filePath) if fErr != nil { @@ -23,7 +26,6 @@ func DownloadGuessYaml() (string, error) { } yamlFileName := filePath + "gauss_yaml.yaml" //download the yaml file - downloadUrl := "https://gitee.com/opengauss/openGauss-third_party/raw/master/Third_Party_Open_Source_Software_List.yaml" resp, gErr := http.Get(downloadUrl) defer resp.Body.Close() if gErr != nil { @@ -34,6 +36,7 @@ func DownloadGuessYaml() (string, error) { logs.Error("get", downloadUrl, resp.Status) return "", errors.New(resp.Status) } + _ = os.Remove(yamlFileName) saveFile, cErr := os.Create(yamlFileName) defer saveFile.Close() if cErr != nil { @@ -48,14 +51,10 @@ func DownloadGuessYaml() (string, error) { return yamlFileName, nil } -func StoreYamlData(yamlData map[string]map[string]string, ormModel orm.Ormer) { +func StoreYamlData(yamlData map[string]map[string]string, ormModel orm.Ormer, warehouse string) { if len(yamlData) > 0 { - err := db_models.UpdateYamlOriginMark(ormModel) - if err != nil { - logs.Error("db_models.UpdateYamlOriginMark error:", err.Error()) - return - } for k, v := range yamlData { + var err error if _, ok := v["version"]; !ok || v["version"] == "" { v["version"] = "" } @@ -81,6 +80,7 @@ func StoreYamlData(yamlData map[string]map[string]string, ormModel orm.Ormer) { UpdateTime: now.Format("2006-01-02 15:04:05"), MarkBit: 1, Repo: "security", + Warehouse: warehouse, } sErr = db_models.InsertYamlOriginData(openGuessYaml, ormModel) if sErr != nil { @@ -110,6 +110,7 @@ func StoreYamlData(yamlData map[string]map[string]string, ormModel orm.Ormer) { UpdateTime: now.Format("2006-01-02 15:04:05"), Repo: "security", MarkBit: 1, + Warehouse: warehouse, } _, err = db_models.UpdateYamlOriginData(openGuessYaml, ormModel) if err != nil { @@ -257,10 +258,6 @@ func StoreYamlData(yamlData map[string]map[string]string, ormModel orm.Ormer) { } logs.Info("Transaction committed successfully", k) } - err = db_models.DeleteYamlOriginMark(ormModel) - if err != nil { - logs.Error("db_models.DeleteYamlOriginMark error:", err.Error()) - } } else { logs.Warning("yamlData Is empty, nothing can be done") } @@ -273,20 +270,39 @@ func StoreYamlData(yamlData map[string]map[string]string, ormModel orm.Ormer) { //4. Save in mysql func ProcGaussYaml() { ormModel := orm.NewOrm() - yamlFileName, err := DownloadGuessYaml() + downloadUrls := []string{ + "https://gitee.com/opengauss/openGauss-third_party/raw/master/Third_Party_Open_Source_Software_List.yaml", + "https://gitee.com/opengauss/DataStudio/raw/master/Third_Party_Open_Source_Software_List.yaml", + "https://gitee.com/opengauss/openGauss-connector-jdbc/raw/master/Third_Party_Open_Source_Software_List.yaml", + "https://gitee.com/opengauss/openGauss-tools-sql-translator/raw/master/Third_Party_Open_Source_Software_List.yaml", + } + err := db_models.UpdateYamlOriginMark(ormModel) if err != nil { - logs.Error("DownloadGuessYaml error:", err.Error()) + logs.Error("db_models.UpdateYamlOriginMark error:", err.Error()) return } - logs.Info("The download yaml file address is:", yamlFileName) + for _, downloadUrl := range downloadUrls { + yamlFileName, err := DownloadGuessYaml(downloadUrl) + if err != nil { + logs.Error("DownloadGuessYaml error:", err.Error()) + return + } + var warehouse string + if len(strings.Split(downloadUrl, "https://gitee.com/opengauss/")) > 1 { + warehouse = strings.Split(strings.Split(downloadUrl, "https://gitee.com/opengauss/")[1], "/")[0] + } + logs.Info("The download yaml file address is:", yamlFileName) - yamlData, err := util.ParseYaml(yamlFileName) + yamlData, err := util.ParseYaml(yamlFileName) + if err != nil { + logs.Error("util.ParseYaml error:", yamlFileName, err) + return + } + StoreYamlData(yamlData, ormModel, warehouse) + } + err = db_models.DeleteYamlOriginMark(ormModel) if err != nil { - logs.Error("util.ParseYaml error:", yamlFileName, err) - return + logs.Error("db_models.DeleteYamlOriginMark error:", err.Error()) } - StoreYamlData(yamlData, ormModel) - DeleteYamlData(ormModel) - } diff --git a/cve-vulner-manager/models/cve.go b/cve-vulner-manager/models/cve.go index 429a247a437d2408e0dd0440ca263bde162d1be2..e3d9febdc755e21e71fba3bc56d109867f03a5b1 100644 --- a/cve-vulner-manager/models/cve.go +++ b/cve-vulner-manager/models/cve.go @@ -3,6 +3,7 @@ package models import ( "errors" "fmt" + "strconv" "strings" "time" @@ -1360,7 +1361,8 @@ func GetCveVulnCenter(cve string) ([]VulnCenter, error) { return res, err } -func QueryCveIssue(cves []string) (res []CveAllIssueData, err error) { +func QueryCveIssue(cves []string, communityFlag int) (res []CveAllIssueData, err error) { + var sql string o := orm.NewOrm() var cve string for _, v := range cves { @@ -1369,9 +1371,50 @@ func QueryCveIssue(cves []string) (res []CveAllIssueData, err error) { if len(cve) > 1 { cve = cve[:len(cve)-1] } - _, err = o.Raw(fmt.Sprintf("SELECT t.cve_num, t.nvd_score, t.openeuler_score, t.issue_num, t.affected_version,t.owned_version,t.owned_component,t.owner,t.repo,"+ - "t.cve_level,t.create_time,v.repair_time,s.sa_release_time,s.rpm_release_time,v.first_per_time, v.first_get_time, v.organizate_id"+ - " 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 and t.cve_num in (%s) order by t.update_time desc", cve)).QueryRows(&res) + if communityFlag != 0 { + sql = fmt.Sprintf("SELECT t.cve_num, t.nvd_score, t.openeuler_score, t.issue_num, t.affected_version,t.owned_version,t.owned_component,t.owner,t.repo,"+ + "t.cve_level,t.create_time,v.repair_time,s.sa_release_time,s.rpm_release_time,v.first_per_time, v.first_get_time, v.organizate_id"+ + " 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 and t.cve_num in (%s) and v.organizate_id = %v order by t.update_time desc", cve, communityFlag) + } else { + sql = fmt.Sprintf("SELECT t.cve_num, t.nvd_score, t.openeuler_score, t.issue_num, t.affected_version,t.owned_version,t.owned_component,t.owner,t.repo,"+ + "t.cve_level,t.create_time,v.repair_time,s.sa_release_time,s.rpm_release_time,v.first_per_time, v.first_get_time, v.organizate_id"+ + " 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 and t.cve_num in (%s) order by t.update_time desc", cve) + } + _, err = o.Raw(sql).QueryRows(&res) return } + +func QueryCvePackIssue(data []Cve, communityFlag int) ([]CveAllIssueData, error) { + var sql string + o := orm.NewOrm() + if communityFlag == 0 { + sql = "SELECT t.cve_num, t.nvd_score, t.openeuler_score, t.issue_num, t.affected_version,t.owned_version,t.owned_component,t.owner,t.repo," + + "t.cve_level,t.create_time,v.repair_time,s.sa_release_time,s.rpm_release_time,v.first_per_time, v.first_get_time, v.organizate_id" + + " 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 and t.cve_num = '%s' and t.owned_component = '%s' order by t.update_time desc" + } else { + sql = "SELECT t.cve_num, t.nvd_score, t.openeuler_score, t.issue_num, t.affected_version,t.owned_version,t.owned_component,t.owner,t.repo," + + "t.cve_level,t.create_time,v.repair_time,s.sa_release_time,s.rpm_release_time,v.first_per_time, v.first_get_time, v.organizate_id" + + " 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 and t.cve_num = '%s' and t.owned_component = '%s' and v.organizate_id = " + strconv.Itoa(communityFlag) + " order by t.update_time desc" + } + + var res = make([]CveAllIssueData, 0) + + for _, v := range data { + var r []CveAllIssueData + o.Raw(fmt.Sprintf(sql, v.CveNum, v.Pack)).QueryRows(&r) + if len(r) == 0 { + continue + } + res = append(res, r...) + } + + if len(res) == 0 { + return nil, errors.New("data not found") + } + + return res, nil +} diff --git a/cve-vulner-manager/models/cve_web.go b/cve-vulner-manager/models/cve_web.go index 98d5f1a7a9ba25591889dd82cf5322be064d33c8..2a3a0ab2cb037d562a9ccb79680706ba3e551a06 100644 --- a/cve-vulner-manager/models/cve_web.go +++ b/cve-vulner-manager/models/cve_web.go @@ -27,3 +27,8 @@ type CveProduct struct { Id int64 `json:"id"` ProductName string `json:"productName"` } + +type Cve struct { + CveNum string `json:"cveNum"` + Pack string `json:"packageName"` +} diff --git a/cve-vulner-manager/models/excel.go b/cve-vulner-manager/models/excel.go index 8b8fbe625786d54ff21c59495f964b70ec835985..a6ebe9766b4406bd41095488489407600ca66d12 100644 --- a/cve-vulner-manager/models/excel.go +++ b/cve-vulner-manager/models/excel.go @@ -2,6 +2,7 @@ package models import ( "fmt" + "github.com/astaxie/beego/logs" "github.com/astaxie/beego/orm" ) @@ -149,10 +150,11 @@ func QueryCvrfFileRecord(afl *SaFileRecord, colName ...string) error { return err } -func GetCvrfSaRecordByCve(cveNum string) (afl []CvrfSaRecord) { +func GetCvrfSaRecordByCve(cveNum, branch string) (afl []CvrfSaRecord) { o := orm.NewOrm() curCveNum := "%" + cveNum + "%" - sql := fmt.Sprintf("SELECT sort_openeuler_sa_num FROM cve_cvrf_sa_record where cve_num like '%v'", curCveNum) + curBranch := "%" + branch + "%" + sql := fmt.Sprintf("SELECT sort_openeuler_sa_num FROM cve_cvrf_sa_record where cve_num like '%v' and branch like '%v'", curCveNum, curBranch) num, err := o.Raw(sql).QueryRows(&afl) if err == nil { logs.Info("cve_cvrf_sa_record nums: ", num) diff --git a/cve-vulner-manager/models/modeldb.go b/cve-vulner-manager/models/modeldb.go index 7cfe010d78d46e0286f313505b430d8cc2f00202..81f84c39d67f79ba5a3bc9557506990608dc19e0 100644 --- a/cve-vulner-manager/models/modeldb.go +++ b/cve-vulner-manager/models/modeldb.go @@ -673,6 +673,7 @@ type OpenGussYaml struct { Status int8 `orm:"default(1);column(status)" description:"1:正常;2:已删除"` CpeName string `orm:"type(text);column(cpe_name)" description:"cpe的名称"` MarkBit int8 `orm:"default(1);column(mark_bit)" description:"1:正常;2:已删除"` + Warehouse string `orm:"size(32);column(warehouse)" description:"仓库"` CreateTime string `orm:"size(32);column(create_time)"` UpdateTime string `orm:"size(32);column(update_time);null"` DeleteTime string `orm:"size(32);column(delete_time);null"` @@ -712,6 +713,7 @@ type CvrfSaRecord struct { IsExport int8 `orm:"default(1);column(is_export);null" description:"1: 未导出; 2: 已导出"` AffectFlag int8 `orm:"default(1);column(affect_flag)" description:"1:受影响标识; 2: 不受影响标识; 3: 其他"` SortOpenEulerSANum string `orm:"size(128);column(sort_openeuler_sa_num);unique" description:"排序后的安全公告"` + Branch string `orm:"size(255);column(branch)" description:"分支"` CreateTime string `orm:"size(32);column(create_time)"` UpdateTime string `orm:"size(32);column(update_time);null"` DeleteTime string `orm:"size(32);column(delete_time);null"` @@ -907,6 +909,7 @@ type OpenGaussSecurityReviewer struct { Id int64 `orm:"pk;auto"` NameSpace string `orm:"unique" description:"码云空间地址"` Status int8 `orm:"default(0);column(status)" description:"0: 全部;1:审核人"` + Warehouse string `orm:"size(32);column(warehouse)" description:"仓库"` } type MindSporeSecurityReviewer struct { diff --git a/cve-vulner-manager/models/reviewer.go b/cve-vulner-manager/models/reviewer.go index 1739545b7e55c1f6fa139dcaac0f6509aab25b5f..d05ef933b36caab2629abd54b057b1c057c66655 100644 --- a/cve-vulner-manager/models/reviewer.go +++ b/cve-vulner-manager/models/reviewer.go @@ -1,6 +1,9 @@ package models import ( + "errors" + "strings" + "github.com/astaxie/beego/logs" "github.com/astaxie/beego/orm" ) @@ -37,6 +40,33 @@ func GetGuassSecurityReviewerList() (list []OpenGaussSecurityReviewer, err error return list, err } +func GetGuassSecurityAssignee(repo, version string) (assignee string, err error) { + o := orm.NewOrm() + versions := strings.Split(version, ",") + var Warehouse string + for _, s := range versions { + var guss OpenGussYaml + err = o.Raw("select * from cve_open_guss_yaml where package_name = ? and version = ?", repo, s).QueryRow(&guss) + if err == nil { + Warehouse = guss.Warehouse + break + } + } + + if len(Warehouse) == 0 { + return "", errors.New("no assignee") + } + + var rev OpenGaussSecurityReviewer + err = o.Raw("select * from cve_open_gauss_security_reviewer where warehouse = ?", Warehouse).QueryRow(&rev) + if err != nil { + return "", err + } + + assignee = rev.NameSpace + return assignee, nil +} + func GetSporeSecurityReviewerList() (list []MindSporeSecurityReviewer, err error) { o := orm.NewOrm() _, err = o.QueryTable("cve_mind_spore_security_reviewer").All(&list) @@ -67,4 +97,4 @@ func (s *OpenLookengSecurityReviewer) Read(filed ...string) (ok bool) { return false } return true -} \ No newline at end of file +} diff --git a/cve-vulner-manager/task/issuetask.go b/cve-vulner-manager/task/issuetask.go index 27d55f28898be386119966872730275628f9c50a..e23ba9afc0ea4fe2257e835fc1961eeb84e82de2 100644 --- a/cve-vulner-manager/task/issuetask.go +++ b/cve-vulner-manager/task/issuetask.go @@ -673,6 +673,10 @@ func GaussIssue(issueValue models.VulnCenter, accessToken, owner, path, assignee } else { logs.Error("GetGuassSecurityReviewerList, rlerr: ", rlerr) } + guassSecurityAssignee, rerr := models.GetGuassSecurityAssignee(issueValue.RepoName, issueValue.CveVersion) + if rerr == nil && len(guassSecurityAssignee) > 0 { + assignee = guassSecurityAssignee + } branchList := make([]string, 0) errBrands := errors.New("") if len(issueValue.PackName) < 2 { diff --git a/cve-vulner-manager/taskhandler/cvrf.go b/cve-vulner-manager/taskhandler/cvrf.go index ae1127ffe2e09ec31f1c208668f1485ae26c4ef7..55d33b0d91cf7c36a33364b29667172ec39ba04c 100644 --- a/cve-vulner-manager/taskhandler/cvrf.go +++ b/cve-vulner-manager/taskhandler/cvrf.go @@ -380,7 +380,7 @@ func WriteCvrfXml(filePath string, cvrfsa *CvrfSa) { } } -func CvrfSaTitle(cvrfsa *CvrfSa){ +func CvrfSaTitle(cvrfsa *CvrfSa) { var title string var branch = make([]string, 0) for _, v := range cvrfsa.ProductTree.OpenEulerBranch { @@ -400,7 +400,7 @@ func CvrfSaTitle(cvrfsa *CvrfSa){ } else if len(branch) == 2 { title = title + strings.Join(branch, " and ") } else { - title = title + strings.Join(branch[:len(branch) - 1], ",") + " and " + branch[len(branch) - 1] + title = title + strings.Join(branch[:len(branch)-1], ",") + " and " + branch[len(branch)-1] } cvrfsa.DocumentTitle.DocumentTitle = title for k := range cvrfsa.DocumentNotes.Note { @@ -1261,7 +1261,7 @@ func BuildCvrfXml(cvrfsa *CvrfSa, v models.ExcelExport, affectBranch string, BuildVulnerabilitySet(cvrfsa, v, affectBranch, componentMap, branchFlag) } -func QueryCveMd5(cveNum []string, OwnedComponent, openEulerSANum string, fixFlag int8) (bool, string) { +func QueryCveMd5(cveNum []string, OwnedComponent, openEulerSANum, branch string, fixFlag int8) (bool, string) { sort.Strings(cveNum) tmpOpenEulerSANum := "" cveStr := strings.Join(cveNum, ",") @@ -1269,7 +1269,8 @@ func QueryCveMd5(cveNum []string, OwnedComponent, openEulerSANum string, fixFlag fileMd5 := common.EncryptMd5(cveStrx) var cfr models.CvrfSaRecord cfr.Md5 = fileMd5 - tbErr := models.GetCvrfRecord(&cfr, "cur_md5") + cfr.Branch = branch + tbErr := models.GetCvrfRecord(&cfr, "cur_md5", "branch") if tbErr == nil { tmpOpenEulerSANum = cfr.OpenEulerSANum cfr.UpdateTime = common.GetCurTime() @@ -1280,8 +1281,9 @@ func QueryCveMd5(cveNum []string, OwnedComponent, openEulerSANum string, fixFlag cfr.CveNum = cveStr cfr.PackName = OwnedComponent cfr.AffectFlag = fixFlag + cfr.Branch = branch updateErr := models.UpdateCvrfRecord(&cfr, "UpdateTime", - "OpenEulerSANum", "Status", "IsExport", "CveNum", "PackName", "AffectFlag") + "OpenEulerSANum", "Status", "IsExport", "CveNum", "PackName", "AffectFlag", "Branch") if updateErr != nil { logs.Error("UpdateCvrfRecord, ", updateErr) } @@ -1295,6 +1297,7 @@ func QueryCveMd5(cveNum []string, OwnedComponent, openEulerSANum string, fixFlag cfr.CveNum = cveStr cfr.PackName = OwnedComponent cfr.AffectFlag = fixFlag + cfr.Branch = branch num, iErr := models.InsertCvrfRecord(&cfr) if iErr != nil || num == 0 { logs.Error("InsertCvrfRecord, ", iErr) diff --git a/cve-vulner-manager/taskhandler/excel.go b/cve-vulner-manager/taskhandler/excel.go index bc21da6168eb6d49227b13ae57401ad0f59cf18c..744466c515d1d95dfc959b25941e8c8db36c1cec 100644 --- a/cve-vulner-manager/taskhandler/excel.go +++ b/cve-vulner-manager/taskhandler/excel.go @@ -1119,6 +1119,9 @@ func getDateByGite(pkgList []models.ExcelPackage, startTime string, c chan<- []I saTimeStampZone = 3600 * 8 } st := util.TimeStrToInt(startTime, "2006-01-02") + if len(cves) != 0 { + st = 0 + } chData := make([]IssueAndPkg, 0) for _, v := range pkgList { //logs.Info("excel, v===>", v) @@ -1131,7 +1134,6 @@ func getDateByGite(pkgList []models.ExcelPackage, startTime string, c chan<- []I } for _, isTemp := range issueTemp { if len(cves) != 0 && !filterDataInSlice(isTemp.CveNum, cves) { - st = 0 continue } //logs.Info("isTemp===>", isTemp) diff --git a/cve-vulner-manager/taskhandler/xml.go b/cve-vulner-manager/taskhandler/xml.go index b24268bfbd9a268989e3e096a759b225ffa95b78..7b848706eabb56afaff323a5418b63b3c30a68dc 100644 --- a/cve-vulner-manager/taskhandler/xml.go +++ b/cve-vulner-manager/taskhandler/xml.go @@ -1,17 +1,19 @@ package taskhandler import ( - "cvevulner/common" - "cvevulner/models" "encoding/xml" "fmt" - "github.com/360EntSecGroup-Skylar/excelize/v2" - "github.com/astaxie/beego/logs" "io/ioutil" "os" "sort" "strings" "time" + + "cvevulner/common" + "cvevulner/models" + + "github.com/360EntSecGroup-Skylar/excelize/v2" + "github.com/astaxie/beego/logs" ) type Updates struct { @@ -160,7 +162,7 @@ func AbiAffectedVersionBool(abiVersion, branch string) bool { return false } -func CreateUpdateExcel(excelPath string) (string) { +func CreateUpdateExcel(excelPath string) string { // File storage directory sheetName := "cve_list" xlsx := excelize.NewFile() @@ -281,7 +283,7 @@ func WriteXml(filePath, excelName, affectBranch string, cveXmlList []CveXml, dpd openEulerScoreSlice = append(openEulerScoreSlice, sec.openEulerScore) rfs.Reference = append(rfs.Reference, rf) if len(openEulerSANum) < 2 { - cfc := models.GetCvrfSaRecordByCve(sec.CveNum) + cfc := models.GetCvrfSaRecordByCve(sec.CveNum, affectBranch) if len(cfc) > 0 { for _, cf := range cfc { if len(cf.SortOpenEulerSANum) > 1 {