diff --git a/conf/app.conf b/conf/app.conf index ad97d182bc0545128acbf15c975e1234c79413e4..515578663d57f96ae681b036dc2a4fdf81911135 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -46,7 +46,7 @@ maxsize=204800 [crontab] ymalflag = 2 getymal = 00 00 23 * * * -cveflag = 1 +cveflag = 2 getcve = 00 00 01 * * * oricveflag = 2 oricvecheck = 00 00 05 * * * diff --git a/conf/product_app.conf b/conf/product_app.conf index 832c90ec1a3dc7eda120b1274bc7bf5e2dfd4055..72e9d6a0b4ea5aac3d815825576d8bdcd786b992 100644 --- a/conf/product_app.conf +++ b/conf/product_app.conf @@ -43,7 +43,7 @@ maxlines=50000 maxsize=204800 [crontab] -ymalflag = 2 +ymalflag = 1 getymal = 00 00 01 * * 1 cveflag = 1 getcve = 00 00 03 * * * diff --git a/cve-py/controller/timertaskcontroller.py b/cve-py/controller/timertaskcontroller.py index f8259bfd87d4ca9b5bea86e0e6a5be8d49306074..85595907b144d20ed38acf86fae08e9b8b9f3e0f 100644 --- a/cve-py/controller/timertaskcontroller.py +++ b/cve-py/controller/timertaskcontroller.py @@ -35,16 +35,9 @@ def timertask(): scheduler.add_job(taskcontroller.runmappeingtask, 'cron', day_of_week='0-6', hour=7, minute=30) # Download files timing task scheduler.add_job(taskcontroller.rundownloadtask, 'cron', day_of_week='0-6', hour=0, minute=1) - # Delete files timed tasks that are more than one month old + # Delete ,iles timed tasks that are more than one month old scheduler.add_job(taskcontroller.rundelfiletask, 'cron', day_of_week='0-6', hour=9, minute=30) scheduler.start() except SystemExit as err: print("Err:", err) - -def initExce(): - """ - import excel data - :return:None - """ - taskcontroller.runtabletask() \ No newline at end of file diff --git a/cve-py/emailtask/sendingtask.py b/cve-py/emailtask/sendingtask.py index f3fca570bf5b2e1890d65a50c3383383e643c6eb..3cc47f6190dd26f1a61ad51311baa3f3275d5e9a 100644 --- a/cve-py/emailtask/sendingtask.py +++ b/cve-py/emailtask/sendingtask.py @@ -28,7 +28,7 @@ def sending(): mysql.close() print(result) for i in result: - subject = "Form error data feedback" + subject = "Form error data feedback(人工CVE漏洞数据错误反馈)" content = "The submitted CVE data is wrong, please check the format and content, please refer to the attachment" sendemail.send_email("smtp.gmail.com", 587, os.getenv("CVE_EMAIL_SENDADDR"), diff --git a/cve-py/main.py b/cve-py/main.py index b40a4ae9f0811e1ff850db3182cb3d5016ba4311..6b05b88d5e5f3e0026cd8a5afd77b8b290cce30c 100644 --- a/cve-py/main.py +++ b/cve-py/main.py @@ -20,8 +20,7 @@ from controller import timertaskcontroller if __name__ == '__main__': - print("import excel start:") - timertaskcontroller.initExce() + print("The program starts, waiting for the timing task to execute") timertaskcontroller.timertask() diff --git a/cve-py/newexcels/20.03-CVE-10-10.xlsx b/cve-py/newexcels/20.03-CVE-10-10.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..67c3c08c98677dac89f2f5f3e30f53f8679c1f26 Binary files /dev/null and b/cve-py/newexcels/20.03-CVE-10-10.xlsx differ diff --git a/cve-py/problemexcels/error_data_2020-11-02.xls b/cve-py/problemexcels/error_data_2020-11-02.xls new file mode 100644 index 0000000000000000000000000000000000000000..ff5989fe03875f5ed19168ade5e699fd57aad4e3 Binary files /dev/null and b/cve-py/problemexcels/error_data_2020-11-02.xls differ diff --git a/cve-py/tabletask/toexcel.py b/cve-py/tabletask/toexcel.py index 8e790ccf108ac4c9c61c98a7345584d2e9921587..73b8ab9a4e108d55383392b28710701affdc53cf 100644 --- a/cve-py/tabletask/toexcel.py +++ b/cve-py/tabletask/toexcel.py @@ -18,6 +18,7 @@ import os import xlwt from dbConnecttion.MysqlConn import Mysql import time +import shutil def cur_date(): @@ -41,7 +42,7 @@ class MysqlToExcel(object): :return results: list """ mysql = Mysql() - sql = "select * from cve_origin_excel where cve_status = 3 or cve_status=4 or cve_status=5" + sql = "select * from cve_origin_excel where cve_status = 3 or cve_status=4" results = mysql.getMany(sql) print(results) mysql.dispose() @@ -50,8 +51,9 @@ class MysqlToExcel(object): def generate_table(self): """Generate excel sheet, File already exists, delete""" - if os.path.exists(self.file_name): - os.remove(self.file_name) + if os.listdir("./problemexcels"): + shutil.rmtree("./problemexcels") + os.mkdir("./problemexcels") results = self.get_results() if not results: print("The query result is empty, no error data") diff --git a/doc/sql/db_struct.sql b/doc/sql/db_struct.sql index a643cd440224a2d593333cd5aa85290cd4349ce2..420bfe82b5d79ea2d57bfd4e4a23c8a0056d63a5 100644 --- a/doc/sql/db_struct.sql +++ b/doc/sql/db_struct.sql @@ -47,7 +47,7 @@ DROP TABLE IF EXISTS `cve_export_record`; CREATE TABLE `cve_export_record` ( `id` bigint NOT NULL AUTO_INCREMENT, `file_name` varchar(255) NOT NULL DEFAULT '', - `create_time` datetime NOT NULL, + `create_time` bigint NOT NULL, `file_code` varchar(255) NOT NULL DEFAULT '', `state` tinyint NOT NULL DEFAULT '0', PRIMARY KEY (`id`), @@ -391,7 +391,7 @@ CREATE TABLE `cve_issue_template` ( UNIQUE KEY `cve_issue_template_cvn_issnu` (`cve_num`,`issue_num`), KEY `cve_issue_template_cve_id` (`cve_id`), KEY `cve_issue_template_issue_num` (`issue_num`) -) ENGINE=InnoDB AUTO_INCREMENT=619 DEFAULT CHARSET=utf8; +) ENGINE=InnoDB AUTO_INCREMENT=625 DEFAULT CHARSET=utf8; /*Table structure for table `cve_open_euler_s_a` */ diff --git a/models/modeldb.go b/models/modeldb.go index 330d936cc7fc112e29e387041c81ceb778a1f4e6..ff54b79b781a1b6dd0fcd542a1dc529ab0ea1c6d 100644 --- a/models/modeldb.go +++ b/models/modeldb.go @@ -150,7 +150,7 @@ type IssueTemplate struct { IssueId int64 `orm:"column(issue_id)" description:"issue的id"` IssueNum string `orm:"size(64);column(issue_num);index" description:"issue编号"` Assignee string `orm:"size(128);column(issue_assignee)" description:"issue所属责任人"` - Status int8 `orm:"default(0);column(status)" description:"1:待办的;2:进行中;3:已完成;4:已拒绝"` + Status int8 `orm:"default(0);column(status)" description:"1:待办的;2:进行中;3:已完成;4:已拒绝;5: 已挂起"` StatusName string `orm:"size(128);column(status_name)" description:"issue状态名称"` IssueStatus int8 `orm:"default(0);column(issue_status)" description:"1:待分析;2:已正常关闭;3已分析,待修复;4:已修复;5:已发布;6:已异常关闭"` IssueLabel string `orm:"size(256);column(issue_label)" description:"issue标签, cve/Undisclosed, cve/Disclosed"` diff --git a/task/issuetask.go b/task/issuetask.go index 9e789221564e0b080ddfccd4dad6706a18d9e0b3..40d62252477cfaa997dbd120e213bad36016c3ea 100644 --- a/task/issuetask.go +++ b/task/issuetask.go @@ -117,9 +117,9 @@ func CreateIssue() error { cveYears, yearErr := strconv.Atoi(cveNumList[1]) if yearErr == nil { if cveYears <= years { - models.UpdateIssueStatus(issueValue, 2) + //models.UpdateIssueStatus(issueValue, 2) logs.Info("cve: ", issueValue.CveNum, ",需要大于: ", years, ",否则不需要在git上提交issue, cveData: ", issueValue) - continue + //continue } } } diff --git a/taskhandler/common.go b/taskhandler/common.go index f731e293aaeb3b7fad6a2ab281ef869c8e24a433..100cd281b2cadd0f3b47420b80d062587e943ecc 100644 --- a/taskhandler/common.go +++ b/taskhandler/common.go @@ -4,6 +4,7 @@ import ( "cvevulner/common" "cvevulner/models" "fmt" + "github.com/astaxie/beego" "github.com/astaxie/beego/config" "github.com/astaxie/beego/logs" "reflect" @@ -330,12 +331,19 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str } StatusName := "" if its.StatusName != "" && len(its.StatusName) > 1 { - if its.StatusName == "待办的" { + if its.StatusName == "待办的" || its.StatusName == "开启的"{ StatusName = "open" } else if its.StatusName == "进行中" || strings.ToLower(its.StatusName) == "started" { StatusName = "progressing" - } else if its.StatusName == "已完成" || its.StatusName == "已拒绝"{ + } else if its.StatusName == "已完成" { 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" { + StatusName = "suspended" + return "" } else { StatusName = its.StatusName } diff --git a/taskhandler/createissue.go b/taskhandler/createissue.go index 4f1dc7a1c27f7855b59ad825399f3533507d96f2..df656a311fcc96e8b7532b0b8aa27239f09febd4 100644 --- a/taskhandler/createissue.go +++ b/taskhandler/createissue.go @@ -28,24 +28,33 @@ func CreateIssueData(issueTemp *models.IssueTemplate, cve models.VulnCenter, sc issueTemp.IssueNum = resp["number"].(string) issueTemp.Assignee = assignee issueTemp.StatusName = resp["state"].(string) - if strings.ToLower(resp["state"].(string)) == "open" || resp["state"].(string) == "待办的" { + if strings.ToLower(resp["state"].(string)) == "open" || + resp["state"].(string) == "待办的" || + resp["state"].(string) == "开启的" { issueTemp.Status = 1 issueTemp.StatusName = "open" + issueTemp.IssueStatus = 1 } else if strings.ToLower(resp["state"].(string)) == "started" || strings.ToLower(resp["state"].(string)) == "progressing" || strings.ToLower(resp["state"].(string)) == "进行中" { issueTemp.Status = 2 issueTemp.StatusName = "progressing" + issueTemp.IssueStatus = 3 } else if strings.ToLower(resp["state"].(string)) == "closed" || resp["state"].(string) == "已完成" { issueTemp.Status = 3 issueTemp.StatusName = "closed" + issueTemp.IssueStatus = 2 } else { if strings.ToLower(resp["state"].(string)) == "rejected" || resp["state"].(string) == "已拒绝" { issueTemp.StatusName = "rejected" + issueTemp.Status = 4 } - issueTemp.Status = 4 + if strings.ToLower(resp["state"].(string)) == "suspended" || resp["state"].(string) == "已挂起" { + issueTemp.StatusName = "suspended" + issueTemp.Status = 5 + } + issueTemp.IssueStatus = 6 } - issueTemp.IssueStatus = 1 issueTemp.IssueLabel = labels issueTemp.Owner = owner issueTemp.Repo = path @@ -70,42 +79,52 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st its.Assignee = assignee } issueType := its.IssueType - labels := its.IssueLabel + labels := "" + if its.IssueLabel != "" && len(its.IssueLabel) > 1 { + labels = its.IssueLabel + } else { + labels = beego.AppConfig.String("labelUnFix") + } + if accessToken != "" && owner != "" && path != "" { url := "https://gitee.com/api/v5/repos/" + owner + "/issues/" + its.IssueNum score := strconv.FormatFloat(sc.NVDScore, 'f', 1, 64) OpenEulerScore := strconv.FormatFloat(its.OpenEulerScore, 'f', 1, 64) requestBody := CreateIssueBody(accessToken, owner, path, its.Assignee, cve, sc, OpenEulerScore, score, labels, its, 1, its.IssueType, "", brandArray) - logs.Info("isssue_body: ", requestBody) - resp, err := util.HTTPPatch(url, requestBody) - if err != nil { - logs.Error("创建issue失败, cveNum: ", cve.CveNum, "err: ", err) - return "", err - } - if _, ok := resp["id"]; !ok { - logs.Error("创建issue 失败, err: ", ok, "url: ", url) - return "", errors.New("创建issue失败") - } - logs.Info("issue 创建成功,cveNum: ", cve.CveNum, "issueNum: ", resp["number"].(string)) - // Structure data - var issueTemp models.IssueTemplate - CreateIssueData(&issueTemp, cve, sc, resp, path, its.Assignee, issueType, labels, owner) - if len(brandArray) > 0 { - var brandArryTmp []string - for _, brand := range brandArray { - brandArryTmp = append(brandArryTmp, brand+":") + if requestBody != "" && len(requestBody) > 1 { + logs.Info("isssue_body: ", requestBody) + resp, err := util.HTTPPatch(url, requestBody) + if err != nil { + logs.Error("创建issue失败, cveNum: ", cve.CveNum, "err: ", err) + return "", err } - brandStr := strings.Join(brandArryTmp, ",") - issueTemp.AffectedVersion = brandStr - } - // Store issue data - issTempID, err := models.CreateIssueTemplate(&issueTemp) - if err != nil { - logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err) - return "", err + if _, ok := resp["id"]; !ok { + logs.Error("创建issue 失败, err: ", ok, "url: ", url) + return "", errors.New("创建issue失败") + } + logs.Info("issue 创建成功,cveNum: ", cve.CveNum, "issueNum: ", resp["number"].(string)) + // Structure data + var issueTemp models.IssueTemplate + CreateIssueData(&issueTemp, cve, sc, resp, path, its.Assignee, issueType, labels, owner) + if len(brandArray) > 0 { + var brandArryTmp []string + for _, brand := range brandArray { + brandArryTmp = append(brandArryTmp, brand+":") + } + brandStr := strings.Join(brandArryTmp, ",") + issueTemp.AffectedVersion = brandStr + } + // Store issue data + issTempID, err := models.CreateIssueTemplate(&issueTemp) + if err != nil { + logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err) + return "", err + } + logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum) + } else { + logs.Info("不需要更新issue模板及issue状态, its: ", its) } - logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum) // Update issue status models.UpdateIssueStatus(cve, 2) // Update score status @@ -122,60 +141,62 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st requestBody := CreateIssueBody(accessToken, owner, path, assignee, cve, sc, "", score, labels, its, 2, issueType, "", brandArray) logs.Info("isssue_body: ", requestBody) - resp, err := util.HTTPPost(url, requestBody) - if err != nil { - logs.Error("url: ", url, "创建issue失败, cveNum: ", cve.CveNum, "err: ", err) - return "", err - } - if _, ok := resp["id"]; !ok { - logs.Error("创建issue 失败, err: ", ok, "url: ", url) - return "", errors.New("创建issue失败") - } - var issueTemp models.IssueTemplate - CreateIssueData(&issueTemp, cve, sc, resp, path, assignee, issueType, labels, owner) - // Store issue data - issTempID, err := models.CreateIssueTemplate(&issueTemp) - if len(brandArray) > 0 { - var brandArrayTmp []string - for _, brand := range brandArray { - brandArrayTmp = append(brandArrayTmp, brand+":") + if requestBody != "" && len(requestBody) > 1 { + resp, err := util.HTTPPost(url, requestBody) + if err != nil { + logs.Error("url: ", url, "创建issue失败, cveNum: ", cve.CveNum, "err: ", err) + return "", err } - brandStr := strings.Join(brandArrayTmp, ",") - issueTemp.AffectedVersion = brandStr - } - if err != nil { - logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err) - return "", err - } - logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum) - // Create issue comment - affectedVersion := "" - if len(brandArray) > 0 { - for i, brand := range brandArray { - if brand == "" || len(brand) < 2 { - continue + if _, ok := resp["id"]; !ok { + logs.Error("创建issue 失败, err: ", ok, "url: ", url) + return "", errors.New("创建issue失败") + } + var issueTemp models.IssueTemplate + CreateIssueData(&issueTemp, cve, sc, resp, path, assignee, issueType, labels, owner) + // Store issue data + issTempID, err := models.CreateIssueTemplate(&issueTemp) + if len(brandArray) > 0 { + var brandArrayTmp []string + for _, brand := range brandArray { + brandArrayTmp = append(brandArrayTmp, brand+":") } - affectedVersion = affectedVersion + strconv.Itoa(i+1) + "." + brand + ":\n" + brandStr := strings.Join(brandArrayTmp, ",") + issueTemp.AffectedVersion = brandStr } - } else { - affectedVersion = affectedVersion + "\n" - } - errx := CreateIssueComment(accessToken, owner, path, assignee, cve, resp, affectedVersion) - logs.Info("issue评论创建结果, err: ", errx) - issueNum := resp["number"].(string) - issueID := int64(resp["id"].(float64)) - err = CreateDepositHooks(accessToken, owner, path, cve, issueNum, issueID) - if err != nil { - logs.Error("创建hooks 失败, cveNum: ", cve.CveNum, "err: ", err) - return "", err + if err != nil { + logs.Error("创建issue 模板的数据失败, cveNum: ", cve.CveNum, "err: ", err) + return "", err + } + logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum) + // Create issue comment + affectedVersion := "" + if len(brandArray) > 0 { + for i, brand := range brandArray { + if brand == "" || len(brand) < 2 { + continue + } + affectedVersion = affectedVersion + strconv.Itoa(i+1) + "." + brand + ":\n" + } + } else { + affectedVersion = affectedVersion + "\n" + } + errx := CreateIssueComment(accessToken, owner, path, assignee, cve, resp, affectedVersion) + logs.Info("issue评论创建结果, err: ", errx) + issueNum := resp["number"].(string) + issueID := int64(resp["id"].(float64)) + err = CreateDepositHooks(accessToken, owner, path, cve, issueNum, issueID) + if err != nil { + logs.Error("创建hooks 失败, cveNum: ", cve.CveNum, "err: ", err) + return "", err + } + logs.Info("创建hooks 成功, cveNum: ", cve.CveNum) + // Update issue status + models.UpdateIssueStatus(cve, 2) + // Update score status + models.UpdateIssueScore(cve, 2) + // Update score record status + models.UpdateIssueScoreRe(cve, 1) } - logs.Info("创建hooks 成功, cveNum: ", cve.CveNum) - // Update issue status - models.UpdateIssueStatus(cve, 2) - // Update score status - models.UpdateIssueScore(cve, 2) - // Update score record status - models.UpdateIssueScoreRe(cve, 1) } } branchs := "" @@ -204,7 +225,13 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st func UpdateIssueToGit(accessToken string, owner string, path string, cve models.VulnCenter, its models.IssueTemplate) (string, error) { logs.Info("更新模板请求参数: cve: ", cve, ",its: ", its, ", owner: ", owner, ",path: ", path) - labels := its.IssueLabel + //labels := its.IssueLabel + labels := "" + if its.IssueLabel != "" && len(its.IssueLabel) > 1 { + labels = its.IssueLabel + } else { + labels = beego.AppConfig.String("labelUnFix") + } pkgList, err := models.QueryPackageByCveId(its.CveId) pkgLink := "" var brandArray []string @@ -225,24 +252,26 @@ func UpdateIssueToGit(accessToken string, owner string, path string, requestBody := CreateIssueBody(accessToken, owner, path, its.Assignee, cve, sc, OpenEulerScore, score, labels, its, 3, its.IssueType, pkgLink, brandArray) logs.Info("isssue_body: ", requestBody) - resp, err := util.HTTPPatch(url, requestBody) - if err != nil { - logs.Error("更新issue失败, cveNum: ", cve.CveNum, "err: ", err) - return "", err - } - if _, ok := resp["id"]; !ok { - logs.Error("创建issue 失败, err: ", ok, "url: ", url) - return "", errors.New("创建issue失败") - } - // Store security bulletin related information - var sec models.SecurityNotice - CreateSecNoticeData(&sec, cve, path, its.AffectedVersion, its.OpenEulerScore) - secId, err := models.UpdateSecNotice(&sec) - if err != nil { - logs.Error("更新安全信息失败,CveNum: ", cve.CveNum, ",path: ", path, ",err: ", err) - return "", err - } else { - logs.Info("更新安全信息成功, secId: ", secId, ",cveNum: ", cve.CveNum) + if requestBody != "" && len(requestBody) > 1 { + resp, err := util.HTTPPatch(url, requestBody) + if err != nil { + logs.Error("更新issue失败, cveNum: ", cve.CveNum, "err: ", err) + return "", err + } + if _, ok := resp["id"]; !ok { + logs.Error("创建issue 失败, err: ", ok, "url: ", url) + return "", errors.New("创建issue失败") + } + // Store security bulletin related information + var sec models.SecurityNotice + CreateSecNoticeData(&sec, cve, path, its.AffectedVersion, its.OpenEulerScore) + secId, err := models.UpdateSecNotice(&sec) + if err != nil { + logs.Error("更新安全信息失败,CveNum: ", cve.CveNum, ",path: ", path, ",err: ", err) + return "", err + } else { + logs.Info("更新安全信息成功, secId: ", secId, ",cveNum: ", cve.CveNum) + } } } return "", nil @@ -505,7 +534,7 @@ func CreateSecNoticeData(sec *models.SecurityNotice, iss models.VulnCenter, path sec.CveNum = iss.CveNum opScoreLeve := openEulerScoreProc(opScore) sec.Introduction = "An update for " + path + " is now available for " + branchs + "." - sec.Theme = sec.Introduction[:len(sec.Introduction) - 1] + ";\n\n" + "openEuler Security has rated this" + + sec.Theme = sec.Introduction[:len(sec.Introduction)-1] + ";\n\n" + "openEuler Security has rated this" + " update as having a security impact of " + opScoreLeve + ". A Common Vunlnerability" + " Scoring System(CVSS)base score,which gives a detailed severity rating," + " is available for each vulnerability from the CVElink(s) in the References section." diff --git a/taskhandler/cve.go b/taskhandler/cve.go index 17c6a284b414517588284b449bd86a25a9362f1d..19feec8d8f5915fc368b866893db65590a7e22b5 100644 --- a/taskhandler/cve.go +++ b/taskhandler/cve.go @@ -22,7 +22,6 @@ import ( "time" ) - var GetCveDetailUrl = "https://openeuler.org/api-cve/cve-security-notice-server/cvedatabase/getByCveId?cveId=%s" var ( @@ -1057,15 +1056,22 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c issueTemp.IssueId = cveData.IssueId issueTemp.IssueNum = cveData.Number issueTemp.Assignee = cveData.IssueAssignee - if strings.ToLower(cveData.State) == "open" { + if strings.ToLower(cveData.State) == "open" || cveData.State == "待办的" || cveData.State == "开启的" { issueTemp.Status = 1 issueTemp.IssueStatus = 1 - } else if strings.ToLower(cveData.State) == "progressing" { + } else if strings.ToLower(cveData.State) == "progressing" || + strings.ToLower(cveData.State) == "started" || cveData.State == "进行中" { issueTemp.Status = 2 issueTemp.IssueStatus = 3 - } else if strings.ToLower(cveData.State) == "closed" { + } else if strings.ToLower(cveData.State) == "closed" || cveData.State == "已完成" { issueTemp.Status = 3 issueTemp.IssueStatus = 2 + } else if strings.ToLower(cveData.State) == "rejected" || cveData.State == "已拒绝" { + issueTemp.Status = 4 + issueTemp.IssueStatus = 6 + } else if strings.ToLower(cveData.State) == "suspended" || cveData.State == "已挂起" { + issueTemp.Status = 5 + issueTemp.IssueStatus = 6 } else { issueTemp.Status = 4 issueTemp.IssueStatus = 6 @@ -1130,8 +1136,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c opScoreLeve = openEulerScoreProc(opScore) } sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct + "." - sec.Theme = sec.Introduction[:len(sec.Introduction) - 1] + ";\n\n" + "openEuler Security has rated this" + - " update as having a security impact of "+ opScoreLeve + ". A Common Vunlnerability" + + sec.Theme = sec.Introduction[:len(sec.Introduction)-1] + ";\n\n" + "openEuler Security has rated this" + + " update as having a security impact of " + opScoreLeve + ". A Common Vunlnerability" + " Scoring System(CVSS)base score,which gives a detailed severity rating," + " is available for each vulnerability from the CVElink(s) in the References section." sec.AffectProduct = lop.InfProduct @@ -1221,7 +1227,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c score.Oavailability = vectorO.Availability } } - if vul.Status == 0 { + if vul.Status == 0 || vul.Status == 1 { accessToken := os.Getenv("GITEE_TOKEN") hookError := CreateDepositHooks(accessToken, owner, cveData.RepoPath, vul, cveData.Number, cveData.IssueId) logs.Info(hookError) @@ -1300,15 +1306,22 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c issueTemp.IssueId = cveData.IssueId issueTemp.IssueNum = cveData.Number issueTemp.Assignee = cveData.IssueAssignee - if strings.ToLower(cveData.State) == "open" { + if strings.ToLower(cveData.State) == "open" || cveData.State == "待办的" || cveData.State == "开启的" { issueTemp.Status = 1 issueTemp.IssueStatus = 1 - } else if strings.ToLower(cveData.State) == "progressing" { + } else if strings.ToLower(cveData.State) == "progressing" || + strings.ToLower(cveData.State) == "started" || cveData.State == "进行中" { issueTemp.Status = 2 issueTemp.IssueStatus = 3 - } else if strings.ToLower(cveData.State) == "closed" { + } else if strings.ToLower(cveData.State) == "closed" || cveData.State == "已完成" { issueTemp.Status = 3 issueTemp.IssueStatus = 2 + } else if strings.ToLower(cveData.State) == "rejected" || cveData.State == "已拒绝" { + issueTemp.Status = 4 + issueTemp.IssueStatus = 6 + } else if strings.ToLower(cveData.State) == "suspended" || cveData.State == "已挂起" { + issueTemp.Status = 5 + issueTemp.IssueStatus = 6 } else { issueTemp.Status = 4 issueTemp.IssueStatus = 6 @@ -1345,15 +1358,22 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c issueTemp.IssueId = cveData.IssueId issueTemp.IssueNum = cveData.Number issueTemp.Assignee = cveData.IssueAssignee - if strings.ToLower(cveData.State) == "open" { + if strings.ToLower(cveData.State) == "open" || cveData.State == "待办的" || cveData.State == "开启的" { issueTemp.Status = 1 issueTemp.IssueStatus = 1 - } else if strings.ToLower(cveData.State) == "progressing" { + } else if strings.ToLower(cveData.State) == "progressing" || + strings.ToLower(cveData.State) == "started" || cveData.State == "进行中" { issueTemp.Status = 2 issueTemp.IssueStatus = 3 - } else if strings.ToLower(cveData.State) == "closed" { + } else if strings.ToLower(cveData.State) == "closed" || cveData.State == "已完成" { issueTemp.Status = 3 issueTemp.IssueStatus = 2 + } else if strings.ToLower(cveData.State) == "rejected" || cveData.State == "已拒绝" { + issueTemp.Status = 4 + issueTemp.IssueStatus = 6 + } else if strings.ToLower(cveData.State) == "suspended" || cveData.State == "已挂起" { + issueTemp.Status = 5 + issueTemp.IssueStatus = 6 } else { issueTemp.Status = 4 issueTemp.IssueStatus = 6 @@ -1436,10 +1456,20 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler logs.Info("处理issue状态为开启、处理中状态的数据:", cveData) cvd, ok := models.QueryCveByNum(cveData.CveNumber, cveData.RepoPath, hole.Version) if ok && cvd.CveNum != "" { - lock.Lock() - upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 1, goe, cvd, owner) - logs.Info(upOk, upError) - lock.Unlock() + if strings.ToLower(cveData.State) == "open" || cveData.State == "待办的" || + strings.ToLower(cveData.State) == "progressing" || cveData.State == "进行中" || + strings.ToLower(cveData.State) == "started" || cveData.State == "开启的" { + lock.Lock() + upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 1, goe, cvd, owner) + logs.Info(upOk, upError) + lock.Unlock() + } else { + lock.Lock() + upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner) + logs.Info(upOk, upError) + lock.Unlock() + } + } else { lock.Lock() okx, errx := InsertIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, owner) @@ -1517,11 +1547,11 @@ func GetCveSecurityNotice(cveNumber string) bool { } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) - if err != nil || body == nil{ + if err != nil || body == nil { logs.Error(err) return false } - logs.Info("url: ", req.URL.String(),"获取官网数据: ", body) + logs.Info("url: ", req.URL.String(), "获取官网数据: ", body) var detail models.RespCveDetail err = json.Unmarshal(body, &detail) if err != nil { @@ -1574,12 +1604,13 @@ func GenerateExcelTask1() error { if err != nil { return err } - er := models.ExportRecord{FileName: fn,FileCode: common.EncryptMd5(fn),State: 1} + er := models.ExportRecord{FileName: fn, FileCode: common.EncryptMd5(fn), State: 1} err = er.Insert() return err } + //GenerateExcelTrigger generate cve&security notice excel file by pr merge and influence package release. -func GenerateExcelTrigger(fileName, startTime,fileCode string) { +func GenerateExcelTrigger(fileName, startTime, fileCode string) { //FilterCveExported() logs.Error("start。。。。。") dir := beego.AppConfig.DefaultString("fileDir", "download") @@ -1590,12 +1621,12 @@ func GenerateExcelTrigger(fileName, startTime,fileCode string) { fr := models.ExportRecord{FileName: fileName} err = fr.Read("file_name") if err != nil { - logs.Error("sddds",err) + logs.Error("sddds", err) return } fileName = filepath.Join(dir, fileName) du := "http://119.3.219.20:88/mkb/obs_update_info/openEuler-20.03-LTS.csv" - du = beego.AppConfig.DefaultString("rpUrl",du) + du = beego.AppConfig.DefaultString("rpUrl", du) localPath := filepath.Join(dir, "release-package.CSV") err = downloadPackageFile(localPath, du) if err != nil { @@ -1634,7 +1665,7 @@ func downloadPackageFile(localPath, url string) error { defer pkgLock.Unlock() if ex, _ := util.IsExistPath(localPath); ex { err := os.Remove(localPath) - if err != nil{ + if err != nil { logs.Error(err) } }