diff --git a/cve-vulner-manager/conf/app.conf b/cve-vulner-manager/conf/app.conf index 7e68e843b55e9263a683a36bb145cfd540e43dc9..2728bd2145fca3ad33c50e53e17765253e48a6d0 100644 --- a/cve-vulner-manager/conf/app.conf +++ b/cve-vulner-manager/conf/app.conf @@ -144,7 +144,7 @@ path = jasper email = 7844966+zhangjianjun_code@user.noreply.gitee.com redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback owner_openuler= openeuler - +host = https://gitee.com scope = user_info projects pull_requests issues notes keys hook groups gists enterprises emails # Obtain first from the system environment variables, use the default value if it fails **** diff --git a/cve-vulner-manager/conf/product_app.conf b/cve-vulner-manager/conf/product_app.conf index 8609bc6e7c1d31984b2e0c3b232e80811326cae0..6e6767a5560c4a7be2a294257b49ca95a37def78 100644 --- a/cve-vulner-manager/conf/product_app.conf +++ b/cve-vulner-manager/conf/product_app.conf @@ -152,6 +152,7 @@ password = "${GITEE_PASSWORD||****}" git_token = "${GITEE_TOKEN||xxx}" # openeuler owner owner_openuler= openeuler +host = https://gitee.com [hook] @@ -179,7 +180,7 @@ cve_number_t = 2018 # Create an issue's repo whitelist;1: open; 2: close issue_whitelist = 2 # List of affected branches: openEuler-20.03-LTS,openEuler-20.03-LTS-SP1 -affected_branchs = "openEuler-20.03-LTS-SP4,openEuler-22.03-LTS-SP1,openEuler-22.03-LTS-SP3,openEuler-22.03-LTS-SP4,master,openEuler-24.03-LTS,openEuler-24.03-LTS-Next" +affected_branchs = "openEuler-20.03-LTS-SP4,openEuler-22.03-LTS-SP1,openEuler-22.03-LTS-SP3,openEuler-22.03-LTS-SP4,master,openEuler-24.03-LTS,openEuler-24.03-LTS-SP1,openEuler-24.03-LTS-Next" abandoned_branchs = "openEuler-20.03-LTS,openEuler-21.03,openEuler-21.09,openEuler-20.09" # Close the highest privilege of issue:1:open;2:close close_issue_privilege = 2 diff --git a/cve-vulner-manager/main.go b/cve-vulner-manager/main.go index 0c6a1b5fecc46ebc9bd5cde4ca38f8fa33bd0d07..9bff947d6218dfb3aa7635f89eb53d524b3361f0 100644 --- a/cve-vulner-manager/main.go +++ b/cve-vulner-manager/main.go @@ -1,6 +1,8 @@ package main import ( + "time" + "github.com/astaxie/beego" "cvevulner/common" @@ -35,6 +37,7 @@ func main() { } taskhandler.InitReleaseDate() + taskhandler.InitAssignerCache(time.Now().Format("20060102")) // Initialize a scheduled task taskOk := task.InitTask() diff --git a/cve-vulner-manager/taskhandler/assist.go b/cve-vulner-manager/taskhandler/assist.go index 50b8cbacac7474c6237c229c4467c761ea39cffc..b222e32ecf3cbe045716269a9cb87982e4cc992c 100644 --- a/cve-vulner-manager/taskhandler/assist.go +++ b/cve-vulner-manager/taskhandler/assist.go @@ -19,6 +19,12 @@ import ( "cvevulner/util" ) +const ( + keyOfDate = "key_of_date" + retryTimes = 3 + splitLen = 2 +) + var mutex sync.Mutex var assignerOfOpeneulerRepoCache map[string]string @@ -84,33 +90,31 @@ func GetCollaboratorInfo(accessToken string, owner string, path string) (string, func GetAssignerOfOpeneuler(repo string) string { mutex.Lock() defer mutex.Unlock() - keyOfDate := "key_of_date" today := time.Now().Format("20060102") - initCache := func() { - assignerOfOpeneulerRepoCache = make(map[string]string) - assignerOfOpeneulerRepoCache[keyOfDate] = today - initAssignerCache() - } - - if len(assignerOfOpeneulerRepoCache) == 0 { - initCache() - } - date, ok := assignerOfOpeneulerRepoCache[keyOfDate] if !ok || date != today { - initCache() + InitAssignerCache(today) } - if assigner, ok := assignerOfOpeneulerRepoCache[repo]; ok { - return assigner + var ret string + assigner, ok := assignerOfOpeneulerRepoCache[repo] + + if ok { + ret = assigner } - return "" + logs.Error("get assigner of ", repo, " ,result is ", ret) + + return ret } -func initAssignerCache() { - cli := utils.NewHttpClient(3) +// InitAssignerCache initializes the assigner cache with today's date. +func InitAssignerCache(today string) { + assignerOfOpeneulerRepoCache = make(map[string]string) + assignerOfOpeneulerRepoCache[keyOfDate] = today + + cli := utils.NewHttpClient(retryTimes) for _, sig := range getSig() { url := fmt.Sprintf("https://www.openeuler.org/api-dsapi/query/sig/repo/committers?community=openeuler&sig=%s", sig) @@ -149,7 +153,7 @@ func initAssignerCache() { } split := strings.Split(v.Repo, "/") - if len(split) < 2 { + if len(split) < splitLen { continue } @@ -174,7 +178,10 @@ type ResCommitter struct { } func getSig() []string { - url := "https://gitee.com/api/v5/repos/openeuler/community/contents/sig" + url := fmt.Sprintf("%s/api/v5/repos/openeuler/community/contents/sig?access_token=%s", + beego.AppConfig.String("gitee::host"), + beego.AppConfig.String("gitee::git_token"), + ) request, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { logs.Error("new request of sig url error: %s ", err.Error()) diff --git a/cve-vulner-manager/taskhandler/createissue.go b/cve-vulner-manager/taskhandler/createissue.go index 53de98ab0265173a364454dbcc59b7f12ffb100f..f98b6b4d8526f3304897d521f25627f5e93389e7 100644 --- a/cve-vulner-manager/taskhandler/createissue.go +++ b/cve-vulner-manager/taskhandler/createissue.go @@ -160,6 +160,15 @@ func OPenCheckWhetherIssue(cveNumber, repoPath, owner, accessToken string, organ return false, "" } +func brandArrayToString(brandArray []string) string { + var brandArrayTmp []string + for _, brand := range brandArray { + brandArrayTmp = append(brandArrayTmp, brand+":") + } + + return strings.Join(brandArrayTmp, ",") +} + func CreateIssueToGit(accessToken, owner, path, assignee string, cve models.VulnCenter, sc models.Score, brandArray []string) (string, error) { defer common.Catchs() @@ -226,14 +235,7 @@ func CreateIssueToGit(accessToken, owner, path, assignee string, 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 - } + it.AffectedVersion = brandArrayToString(brandArray) } if len(assigneeGite) > 1 { it.Assignee = assigneeGite @@ -305,6 +307,10 @@ func CreateIssueToGit(accessToken, owner, path, assignee string, if its.TemplateId == 0 { its.CreateTime = time.Now() CreateIssueData(&its, cve, sc, issueRsp, path, assignee, issueRsp["issue_type"].(string), "", owner) + brandStr := brandArrayToString(brandArray) + its.AffectedVersion = brandStr + its.AbiVersion = brandStr + its.AnalysisVersion = brandStr // Store issue data issTempID, templateErr := models.InsertIssueTemplate(&its) if issTempID == 0 { @@ -367,11 +373,7 @@ func CreateIssueToGit(accessToken, owner, path, assignee string, issueTemp.TemplateId = issTempID CreateIssueData(&issueTemp, cve, sc, resp, path, assignee, issueType, labels, owner) if len(brandArray) > 0 { - var brandArrayTmp []string - for _, brand := range brandArray { - brandArrayTmp = append(brandArrayTmp, brand+":") - } - brandStr := strings.Join(brandArrayTmp, ",") + brandStr := brandArrayToString(brandArray) issueTemp.AffectedVersion = brandStr issueTemp.AbiVersion = brandStr issueTemp.AnalysisVersion = brandStr