From 0bb837d49af543331c95e5ee1edfa138ca6fce2a Mon Sep 17 00:00:00 2001
From: zhangjianjun_code <7844966+zhangjianjun_code@user.noreply.gitee.com>
Date: Fri, 16 Oct 2020 14:13:47 +0800
Subject: [PATCH] 1. Modify English comments; 2. Delete code comments; 3. Fix
existing bugs;
---
Dockerfile | 8 +-
common/aes.go | 98 +-
common/common.go | 221 ++--
conf/app.conf | 33 +-
conf/product_app.conf | 25 +-
controllers/cvedetail.go | 35 +-
controllers/file.go | 1 +
controllers/hook.go | 189 ++-
controllers/issue.go | 46 +-
controllers/login.go | 32 +-
controllers/packages.go | 124 +-
controllers/upload.go | 79 +-
controllers/user.go | 1 -
doc/md/manual.md | 9 +-
doc/sql/db_data.sql | 2520 ++++++++++++++++++++++++++++++++++++
doc/sql/db_struct.sql | 21 +-
main.go | 14 +-
models/cve.go | 2 -
models/cvedetail.go | 2 +-
models/excel.go | 2 +-
models/giteeissue.go | 8 +-
models/hookevent.go | 117 +-
models/initdb.go | 11 +-
models/issue.go | 35 +-
models/login.go | 7 +-
models/modeldb.go | 30 +-
models/oricvecheck.go | 12 +-
models/packages.go | 20 +-
models/securitynotice.go | 15 +
models/uploadcve.go | 154 +--
models/user.go | 3 +-
models/ymal.go | 33 +-
routers/router.go | 4 +-
task/cve.go | 28 +-
task/inittask.go | 57 +-
task/issuetask.go | 36 +-
task/oricvecheck.go | 8 +-
task/printlog.go | 14 +-
task/yaml.go | 8 +-
taskhandler/assist.go | 22 +-
taskhandler/comment.go | 38 +-
taskhandler/common.go | 19 -
taskhandler/createissue.go | 72 +-
taskhandler/cve.go | 34 +-
taskhandler/excel.go | 23 +-
taskhandler/grabissue.go | 24 +-
taskhandler/oricvecheck.go | 6 +-
taskhandler/yaml.go | 82 +-
util/http.go | 10 +-
util/parsepayload.go | 33 +-
50 files changed, 3397 insertions(+), 1028 deletions(-)
create mode 100644 models/securitynotice.go
diff --git a/Dockerfile b/Dockerfile
index a242adb..84cf3a9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -24,9 +24,9 @@ EXPOSE 80
# copy binary config and utils
FROM golang:latest
-RUN mkdir -p /opt/cve-manager/conf
-COPY ./conf/product_app.conf /opt/cve-manager/app.conf
+RUN mkdir -p /opt/cve-manager && mkdir -p /opt/cve-manager/conf
+COPY ./conf/product_app.conf /opt/cve-manager/conf/app.conf
COPY ./cve-manager/cve-manager /opt/cve-manager
-WORKDIR /opt/app/
-ENTRYPOINT ["/opt/app/cve-manager"]
\ No newline at end of file
+WORKDIR /opt/cve-manager/
+ENTRYPOINT ["/opt/cve-manager/cve-manager"]
\ No newline at end of file
diff --git a/common/aes.go b/common/aes.go
index fe6f79e..a1e530e 100644
--- a/common/aes.go
+++ b/common/aes.go
@@ -14,62 +14,52 @@ import (
"time"
)
-//PKCS7Padding PKCS7 填充模式
+//PKCS7Padding PKCS7 padding mode
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
- //Repeat()函数的功能是把切片[]byte{byte(padding)}复制padding个,然后合并成新的字节切片返回
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
-//PKCS7UnPadding 填充的反向操作,删除填充字符串
+// PKCS7UnPadding reverse operation of padding, delete padding string
func PKCS7UnPadding(origData []byte) ([]byte, error) {
- //获取数据长度
length := len(origData)
if length == 0 {
return nil, errors.New("加密字符串错误!")
}
- //获取填充字符串长度
+ // Get the length of the padding string
unPadding := int(origData[length-1])
- //截取切片,删除填充字节,并且返回明文
+ // Intercept the slice, delete the padding bytes, and return the plaintext
return origData[:(length - unPadding)], nil
}
-//AesEcrypt 实现加密
+//AesEcrypt Implement encryption
func AesEcrypt(origData []byte, key []byte) ([]byte, error) {
- //创建加密算法实例
+ // Create an instance of an encryption algorithm
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
- //获取块的大小
blockSize := block.BlockSize()
- //对数据进行填充,让数据长度满足需求
origData = PKCS7Padding(origData, blockSize)
- //采用AES加密方法中CBC加密模式
blocMode := cipher.NewCBCEncrypter(block, key[:blockSize])
crypted := make([]byte, len(origData))
- //执行加密
blocMode.CryptBlocks(crypted, origData)
return crypted, nil
}
-//AesDeCrypt 实现解密
+//AesDeCrypt Realize decryption
func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
- //创建加密算法实例
+ //Create an instance of an encryption algorithm
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
- //获取块大小
blockSize := block.BlockSize()
- //创建加密客户端实例
blockMode := cipher.NewCBCDecrypter(block, key[:blockSize])
origData := make([]byte, len(cypted))
- //这个函数也可以用来解密
blockMode.CryptBlocks(origData, cypted)
- //去除填充字符串
origData, err = PKCS7UnPadding(origData)
if err != nil {
return nil, err
@@ -77,7 +67,7 @@ func AesDeCrypt(cypted []byte, key []byte) ([]byte, error) {
return origData, err
}
-//EnPwdCode 加密base64
+//EnPwdCode Encrypted base64
func EnPwdCode(pwd []byte, key []byte) (string, error) {
result, err := AesEcrypt(pwd, key)
if err != nil {
@@ -86,25 +76,17 @@ func EnPwdCode(pwd []byte, key []byte) (string, error) {
return base64.StdEncoding.EncodeToString(result), err
}
-//DePwdCode 解密
+//DePwdCode decryption
func DePwdCode(pwd string, key []byte) ([]byte, error) {
- //解密base64字符串
+ //Decrypt base64 string
pwdByte, err := base64.StdEncoding.DecodeString(pwd)
if err != nil {
return nil, err
}
- //执行AES解密
return AesDeCrypt(pwdByte, key)
}
-//func main() {
-// str := []byte("12fff我是ww.topgoer.com的站长枯藤")
-// pwd, _ := EnPwdCode(str)
-// bytes, _ := DePwdCode(pwd)
-// fmt.Println(string(bytes))
-//}
-
var (
length int
charset string
@@ -116,54 +98,27 @@ const (
SpecStr = "+=-@#~,.[]()!%^*$"
)
-//解析参数
func parseArgs(lens int) {
- //需要接受指针,就传递地址,&
- //flag.IntVar(&length, "l", 16, "-l 生成密码的长度")
- //flag.StringVar(&charset, "t", "num",
- // //反引号以原样输出
- // `-t 制定密码生成的字符集,
- // num:只使用数字[0-9],
- // char:只使用英文字母[a-zA-Z],
- // mix:使用数字和字母,
- // advance:使用数字、字母以及特殊字符`)
length = lens
charset = "advance"
flag.Parse()
}
-//检测字符串中的空格
-func test1() {
- for i := 0; i < len(CharStr); i++ {
- if CharStr[i] != ' ' {
- fmt.Printf("%c", CharStr[i])
- }
- }
-}
-
func generatePasswd() string {
- //初始化密码切片
var passwd []byte = make([]byte, length, length)
- //源字符串
var sourceStr string
- //判断字符类型,如果是数字
if charset == "num" {
sourceStr = NUmStr
- //如果选的是字符
} else if charset == "char" {
sourceStr = charset
- //如果选的是混合模式
} else if charset == "mix" {
sourceStr = fmt.Sprintf("%s%s", NUmStr, CharStr)
- //如果选的是高级模式
} else if charset == "advance" {
sourceStr = fmt.Sprintf("%s%s%s", NUmStr, CharStr, SpecStr)
} else {
sourceStr = NUmStr
}
fmt.Println("source:", sourceStr)
-
- //遍历,生成一个随机index索引,
for i := 0; i < length; i++ {
index := rand.Intn(len(sourceStr))
passwd[i] = sourceStr[index]
@@ -171,13 +126,10 @@ func generatePasswd() string {
return string(passwd)
}
-//GenPrivKey 生成私有key
+//GenPrivKey Generate private key
func GenPrivKey(lens int) string {
- //随机种子
rand.Seed(time.Now().UnixNano())
parseArgs(lens)
- //fmt.Printf("length:%d charset:%s\n", length, charset)
- //test1()
passwd := generatePasswd()
fmt.Println(passwd)
fmt.Printf("length:%d charset:%s\n", length, charset)
@@ -196,14 +148,13 @@ func setting(jwtkey []byte, username, password string) (string, error) {
username: username,
password: password,
StandardClaims: jwt.StandardClaims{
- ExpiresAt: expireTime.Unix(), //过期时间
+ ExpiresAt: expireTime.Unix(), //expire date
IssuedAt: time.Now().Unix(),
- Issuer: "127.0.0.1", // 签名颁发者
- Subject: "user token", //签名主题
+ Issuer: "127.0.0.1", // Signature issuer
+ Subject: "user token", //Signature subject
},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
- // fmt.Println(token)
tokenString, err := token.SignedString(jwtkey)
if err != nil {
logs.Error(err)
@@ -212,27 +163,10 @@ func setting(jwtkey []byte, username, password string) (string, error) {
return tokenString, nil
}
-//GenToken 生成Token
+//GenToken Generate Token
func GenToken(username, password string) (string, error) {
pKey := GenPrivKey(16)
var jwtkey = []byte(pKey)
tokens, err := setting(jwtkey, username, password)
return tokens, err
}
-
-////解析token
-//func getting(tokenString string) (string, struct{}){
-// token, claims, err := ParseToken(tokenString)
-// if err != nil || !token.Valid {
-// return "", struct{}{}
-// }
-// return token,
-//}
-//
-//func ParseToken(tokenString string) (*jwt.Token, *Claims, error) {
-// Claims := &Claims{}
-// token, err := jwt.ParseWithClaims(tokenString, Claims, func(token *jwt.Token) (i interface{}, err error) {
-// return jwtkey, nil
-// })
-// return token, Claims, err
-//}
diff --git a/common/common.go b/common/common.go
index e5238e1..741cfbe 100644
--- a/common/common.go
+++ b/common/common.go
@@ -21,7 +21,6 @@ func DesString(dbpwd string) (strs string) {
return strs
}
-
func GetTokenExpirTime() (token_expir_time int) {
token_expir_time, err := beego.AppConfig.Int("token_expir_time")
if err == nil {
@@ -30,9 +29,8 @@ func GetTokenExpirTime() (token_expir_time int) {
return 3
}
-
-func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
- if Vector != "" || len(Vector) != 0{
+func VectorParams(Vector string, VectorMap map[string]string) map[string]string {
+ if Vector != "" || len(Vector) != 0 {
VertorList := strings.Split(Vector, "/")
if VertorList != nil && len(VertorList) > 0 {
for _, vule := range VertorList {
@@ -51,7 +49,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
case "AC":
if verVule == "L" {
VectorMap["NattackComplexity"] = "Low"
- } else if verVule == "H"{
+ } else if verVule == "H" {
VectorMap["NattackComplexity"] = "High"
} else {
VectorMap["NattackComplexity"] = "None"
@@ -59,7 +57,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
case "PR":
if verVule == "L" {
VectorMap["NprivilegeRequired"] = "Low"
- } else if verVule == "H"{
+ } else if verVule == "H" {
VectorMap["NprivilegeRequired"] = "High"
} else {
VectorMap["NprivilegeRequired"] = "None"
@@ -67,7 +65,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
case "UI":
if verVule == "L" {
VectorMap["NuserInteraction"] = "Low"
- } else if verVule == "H"{
+ } else if verVule == "H" {
VectorMap["NuserInteraction"] = "High"
} else {
VectorMap["NuserInteraction"] = "None"
@@ -81,7 +79,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
case "C":
if verVule == "L" {
VectorMap["Nconfidentiality"] = "Low"
- } else if verVule == "H"{
+ } else if verVule == "H" {
VectorMap["Nconfidentiality"] = "High"
} else {
VectorMap["Nconfidentiality"] = "None"
@@ -89,7 +87,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
case "I":
if verVule == "L" {
VectorMap["Nintegrity"] = "Low"
- } else if verVule == "H"{
+ } else if verVule == "H" {
VectorMap["Nintegrity"] = "High"
} else {
VectorMap["Nintegrity"] = "None"
@@ -97,7 +95,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
case "A":
if verVule == "L" {
VectorMap["Navailability"] = "Low"
- } else if verVule == "H"{
+ } else if verVule == "H" {
VectorMap["Navailability"] = "High"
} else {
VectorMap["Navailability"] = "None"
@@ -113,7 +111,7 @@ func VectorParams(Vector string, VectorMap map[string]string) map[string]string{
return VectorMap
}
-func GetCurTime() string{
+func GetCurTime() string {
return time.Now().Format("2006-01-02 15:04:05")
}
@@ -123,17 +121,9 @@ func GetCurDate() string {
func GetBeforeTime(days int) string {
nowTime := time.Now()
- getTime := nowTime.AddDate(0, 0, days) //年,月,日 获取一天前的时间
- resTime := getTime.Format("2006-01-02 15:04:05") //获取的时间的格式
+ getTime := nowTime.AddDate(0, 0, days)
+ resTime := getTime.Format("2006-01-02 15:04:05") // The format of the obtained time
logs.Info("获取:", days, "前的时间:", resTime)
-
- //getTime = nowTime.AddDate(0, -1, 0) //年,月,日 获取一个月前的时间
- //resTime = getTime.Format("2006-01-02 15:04:05") //获取的时间的格式
- //fmt.Println(resTime)
- //
- //getTime = nowTime.AddDate(-2, 0, 0) //年,月,日 获取两年前的时间
- //resTime = getTime.Format("20060102") //获取的时间的格式
- //fmt.Println(resTime)
return resTime
}
@@ -143,7 +133,6 @@ func Catchs() {
}
}
-
func DeletePreAndSufSpace(str string) string {
strList := []byte(str)
spaceCount, count := 0, len(strList)
@@ -172,14 +161,14 @@ type CveDescription struct {
}
type NodeCpe struct {
- Cpe23Uri string `json:"cpe23Uri"`
+ Cpe23Uri string `json:"cpe23Uri"`
CpeMatchString string `json:"cpeMatchString"`
- Vulnerable string `json:"vulnerable"`
+ Vulnerable string `json:"vulnerable"`
}
type ConfNodes struct {
- Operator string `json:"operator"`
- Cpe []NodeCpe `json:"cpe"`
+ Operator string `json:"operator"`
+ Cpe []NodeCpe `json:"cpe"`
}
type CveConfigurations struct {
@@ -187,48 +176,48 @@ type CveConfigurations struct {
}
type BmCvssV3 struct {
- VectorString string `json:"vectorString"`
- AttackComplexity string `json:"attackComplexity"`
- AttackVector string `json:"attackVector"`
- AvailabilityImpact string `json:"availabilityImpact"`
- BaseSeverity string `json:"baseSeverity"`
- UserInteraction string `json:"userInteraction"`
- BaseScore float64 `json:"baseScore"`
- PrivilegesRequired string `json:"privilegesRequired"`
- Version string `json:"version"`
- ConfidentialityImpact string `json:"confidentialityImpact"`
- IntegrityImpact string `json:"integrityImpact"`
- Scope string `json:"scope"`
+ VectorString string `json:"vectorString"`
+ AttackComplexity string `json:"attackComplexity"`
+ AttackVector string `json:"attackVector"`
+ AvailabilityImpact string `json:"availabilityImpact"`
+ BaseSeverity string `json:"baseSeverity"`
+ UserInteraction string `json:"userInteraction"`
+ BaseScore float64 `json:"baseScore"`
+ PrivilegesRequired string `json:"privilegesRequired"`
+ Version string `json:"version"`
+ ConfidentialityImpact string `json:"confidentialityImpact"`
+ IntegrityImpact string `json:"integrityImpact"`
+ Scope string `json:"scope"`
}
type ImBaseMetricV3 struct {
- CvssV3 BmCvssV3 `json:"cvssV3"`
- ImpactScore float64 `json:"impactScore"`
- ExploitabilityScore float64 `json:"exploitabilityScore"`
+ CvssV3 BmCvssV3 `json:"cvssV3"`
+ ImpactScore float64 `json:"impactScore"`
+ ExploitabilityScore float64 `json:"exploitabilityScore"`
}
type BmCvssV2 struct {
- VectorString string `json:"vectorString"`
- AccessComplexity string `json:"accessComplexity"`
- AvailabilityImpact string `json:"availabilityImpact"`
- Authentication string `json:"authentication"`
- Version string `json:"version"`
- BaseScore float64 `json:"baseScore"`
- IntegrityImpact string `json:"integrityImpact"`
- ConfidentialityImpact string `json:"confidentialityImpact"`
- AccessVector string `json:"accessVector"`
+ VectorString string `json:"vectorString"`
+ AccessComplexity string `json:"accessComplexity"`
+ AvailabilityImpact string `json:"availabilityImpact"`
+ Authentication string `json:"authentication"`
+ Version string `json:"version"`
+ BaseScore float64 `json:"baseScore"`
+ IntegrityImpact string `json:"integrityImpact"`
+ ConfidentialityImpact string `json:"confidentialityImpact"`
+ AccessVector string `json:"accessVector"`
}
type ImBaseMetricV2 struct {
- AcInsufInfo string `json:"acInsufInfo"`
- CvssV2 BmCvssV2 `json:"cvssV2"`
- UserInteractionRequired string `json:"userInteractionRequired"`
- Severity string `json:"severity"`
- ObtainUserPrivilege string `json:"obtainUserPrivilege"`
- ObtainAllPrivilege string `json:"obtainAllPrivilege"`
- ImpactScore float64 `json:"impactScore"`
- ExploitabilityScore float64 `json:"exploitabilityScore"`
- ObtainOtherPrivilege string `json:"obtainOtherPrivilege"`
+ AcInsufInfo string `json:"acInsufInfo"`
+ CvssV2 BmCvssV2 `json:"cvssV2"`
+ UserInteractionRequired string `json:"userInteractionRequired"`
+ Severity string `json:"severity"`
+ ObtainUserPrivilege string `json:"obtainUserPrivilege"`
+ ObtainAllPrivilege string `json:"obtainAllPrivilege"`
+ ImpactScore float64 `json:"impactScore"`
+ ExploitabilityScore float64 `json:"exploitabilityScore"`
+ ObtainOtherPrivilege string `json:"obtainOtherPrivilege"`
}
type CveImpact struct {
@@ -237,95 +226,95 @@ type CveImpact struct {
}
type CvePoc struct {
- Source string `json:"source"`
- Date string `json:"date"`
- Path string `json:"path"`
+ Source string `json:"source"`
+ Date string `json:"date"`
+ Path string `json:"path"`
Dbindex string `json:"dbindex"`
- Url string `json:"url"`
- Desc string `json:"desc"`
+ Url string `json:"url"`
+ Desc string `json:"desc"`
}
type CveEvent struct {
- Title string `json:"title"`
- Date string `json:"date"`
+ Title string `json:"title"`
+ Date string `json:"date"`
Description string `json:"description"`
- Url string `json:"url"`
+ Url string `json:"url"`
}
type CveReferenceData struct {
- Url string `json:"url"`
- Name string `json:"name"`
- Refsource string `json:"refsource"`
- Tags []string `json:"tags"`
+ Url string `json:"url"`
+ Name string `json:"name"`
+ Refsource string `json:"refsource"`
+ Tags []string `json:"tags"`
}
type CveVulType struct {
Cwe string `json:"cwe"`
- En string `json:"en"`
- Zh string `json:"zh"`
+ En string `json:"en"`
+ Zh string `json:"zh"`
}
type FixReferences struct {
- Url string `json:"url"`
- Refsource string `json:"refsource"`
- Name string `json:"name"`
- Tags []string `json:"tags"`
+ Url string `json:"url"`
+ Refsource string `json:"refsource"`
+ Name string `json:"name"`
+ Tags []string `json:"tags"`
}
type CveFixSuggest struct {
- Detail string `jsong:"detail"`
+ Detail string `jsong:"detail"`
References []FixReferences `jsong:"references"`
}
type CveOriginData struct {
- Ids string `json:"ids"`
- CveNum string `json:"cveNum"`
- UpdateType string `json:"updateType"`
- CvePackName []string `json:"cvePackName"`
- PackName []string `json:"packName"`
- Description CveDescription `json:"description"`
- Title string `json:"title"`
- AffectProduct []string `json:"affectProduct"`
- Configurations CveConfigurations `json:"configurations"`
- CnnvdID string `json:"cnnvdID"`
- CnvdID string `json:"cnvdID"`
- PublishedDate string `json:"publishedDate"`
- Impact CveImpact `json:"impact"`
- VulStatus string `json:"vulStatus"`
- Poc CvePoc `json:"poc"`
- Event CveEvent `json:"event"`
- ReferenceData []CveReferenceData `json:"referenceData"`
- VulType CveVulType `json:"vulType"`
- FixSuggest CveFixSuggest `json:"fixSuggest"`
- Version string `json:"version"`
+ Ids string `json:"ids"`
+ CveNum string `json:"cveNum"`
+ UpdateType string `json:"updateType"`
+ CvePackName []string `json:"cvePackName"`
+ PackName []string `json:"packName"`
+ Description CveDescription `json:"description"`
+ Title string `json:"title"`
+ AffectProduct []string `json:"affectProduct"`
+ Configurations CveConfigurations `json:"configurations"`
+ CnnvdID string `json:"cnnvdID"`
+ CnvdID string `json:"cnvdID"`
+ PublishedDate string `json:"publishedDate"`
+ Impact CveImpact `json:"impact"`
+ VulStatus string `json:"vulStatus"`
+ Poc CvePoc `json:"poc"`
+ Event CveEvent `json:"event"`
+ ReferenceData []CveReferenceData `json:"referenceData"`
+ VulType CveVulType `json:"vulType"`
+ FixSuggest CveFixSuggest `json:"fixSuggest"`
+ Version string `json:"version"`
}
type UploadData struct {
- Token string `json:"Token"`
+ Token string `json:"Token"`
CveData []CveOriginData
}
type CveOriginDetailData struct {
- CveNum string `json:"cveNum"`
- CvePackName string `json:"cvePackName"`
- Description CveDescription `json:"description"`
- Title string `json:"title"`
- Configurations CveConfigurations `json:"configurations"`
- CnnvdID string `json:"cnnvdID"`
- CnvdID string `json:"cnvdID"`
- PublishedDate string `json:"publishedDate"`
- Impact CveImpact `json:"impact"`
- VulStatus string `json:"vulStatus"`
- Poc CvePoc `json:"poc"`
- Event CveEvent `json:"event"`
- ReferenceData []CveReferenceData `json:"referenceData"`
- VulType CveVulType `json:"vulType"`
- FixSuggest CveFixSuggest `json:"fixSuggest"`
+ CveNum string `json:"cveNum"`
+ CvePackName string `json:"cvePackName"`
+ Description CveDescription `json:"description"`
+ Title string `json:"title"`
+ Configurations CveConfigurations `json:"configurations"`
+ CnnvdID string `json:"cnnvdID"`
+ CnvdID string `json:"cnvdID"`
+ PublishedDate string `json:"publishedDate"`
+ Impact CveImpact `json:"impact"`
+ VulStatus string `json:"vulStatus"`
+ Poc CvePoc `json:"poc"`
+ Event CveEvent `json:"event"`
+ ReferenceData []CveReferenceData `json:"referenceData"`
+ VulType CveVulType `json:"vulType"`
+ FixSuggest CveFixSuggest `json:"fixSuggest"`
}
func GetRepoOrg() (string, error) {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return "", err
}
@@ -335,4 +324,4 @@ func GetRepoOrg() (string, error) {
return "", errors.New("value is nil")
}
return owner, nil
-}
\ No newline at end of file
+}
diff --git a/conf/app.conf b/conf/app.conf
index 93cf1bc..d60770f 100644
--- a/conf/app.conf
+++ b/conf/app.conf
@@ -1,33 +1,32 @@
appname = cvevulner
-#appname = cve_manager
httpport = 80
runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
sqlconn =
-# 登录双方约定的key
+# Login key agreed by both parties
key = "${AES_KEY||djS*@+8K9{J!ymk6}"
initdb = 1
-# 登录key
+# Login key
loginkey = "{${LOGIN_KEY||djS*@+8K9{-!yo%64}"
-# token 有效期,单位:天
+# Token validity period, unit: day
token_expir_time=3
-#分析指令
+# Analysis instructions
analysisCmd = "/analysis"
endCmd = "/done"
rejectCmd = "/reject"
approveCmd = "/approve"
+closeCmd = "/close"
+labelFixed = "CVE/FIXED"
+labelUnFix = "CVE/UNFIX"
[mysql]
dbhost = 192.168.1.95
-#dbhost = 159.138.2.2
dbport = 3306
-#dbuser = "${DB_USER||root}"
dbuser = "${DB_USER||cve}"
dbpwd = "${DB_PWD||***}"
-#dbpwd = "+KAOKtEnEn7gRlDEIjeh59lutAMw2688YOqKVJQ2+Lo="
dbname = cvevulner
dbprefix = cve_
maxidle = 30
@@ -37,13 +36,12 @@ maxconn = 3000
[log]
log_level = 7
log_dir = ./logs
-#log_path = C:\GoPject\src\cvevulner\logs\cve.log
log_path = logs/cve.log
-maxlines=200000
-maxsize=1024000
+maxlines=50000
+maxsize=304800
[crontab]
-ymalflag = 2
+ymalflag = 2git
getymal = 00 00 23 * * *
cveflag = 2
getcve = 00 00 01 * * *
@@ -60,23 +58,18 @@ genexcelflag = 2
genexcel = 00 00 04 * * *
days = -30
prcnum = 100
-printlogflag = 1
+printlogflag = 2
printlog = 0 */10 * * * *
[gitee]
-#owner = xwzQmxx
-#path = test
-#email = 1499273991@qq.com
-#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback
-# -------jianjun gitee 配置 --------
owner = cve-test
path = jasper
email = 7844966+zhangjianjun_code@user.noreply.gitee.com
redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback
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 ****
client_id = "${GITEE_CLIENT_ID||****}"
client_secret = "${GITEE_CLIENT_SECRET||****}"
password = "${GITEE_PASSWORD||****}"
@@ -87,7 +80,7 @@ git_token = "${GITEE_TOKEN||xxx}"
[hook]
hookpwd = "${HOOK_PWD||***}"
hookurl = http://159.138.2.2:80/v1/issue/hook/event
-#hookurl = http://119.8.126.102:80/v1/issue/hook/event
+
[yaml]
diff --git a/conf/product_app.conf b/conf/product_app.conf
index 0697ea9..7bcd783 100644
--- a/conf/product_app.conf
+++ b/conf/product_app.conf
@@ -1,4 +1,3 @@
-#appname = cvevulner
appname = cve_manager
httpport = 80
runmode = dev
@@ -6,25 +5,24 @@ autorender = false
copyrequestbody = true
EnableDocs = true
sqlconn =
-# 登录双方约定的key
+# **** Login key agreed by both parties ****
key = "${AES_KEY||djS*@+8K9{J!ymk6}"
initdb = 1
-# 登录key
+# **** Login key****
loginkey = "{${LOGIN_KEY||djS*@+8K9{-!yo%64}"
-# token 有效期,单位:天
+# **** Token validity period, unit: day****
token_expir_time=3
-#分析指令
+# **** Analysis instructions****
analysisCmd = "/analysis"
endCmd = "/done"
rejectCmd = "/reject"
approveCmd = "/approve"
+closeCmd = "/close"
[mysql]
-#dbhost = 127.0.0.1
dbhost = fafd55e8084b402d9998539b072eef7fin01.internal.ap-southeast-1.mysql.rds.myhuaweicloud.com
dbport = 3306
-#dbuser = "${DB_USER||root}"
dbuser = "${DB_USER||cve}"
dbpwd = "${DB_PWD||***}"
dbname = cvevulner
@@ -35,7 +33,6 @@ maxconn = 3000
[log]
log_level = 7
-#log_path = C:\GoPject\src\cvevulner\logs\cve.log
log_path = logs/cve.log
maxlines=200000
maxsize=1024000
@@ -61,29 +58,23 @@ prcnum = 100
[gitee]
-#owner = xwzQmxx
-#path = test
-#email = 1499273991@qq.com
-#redirect_uri = http://119.8.126.102:80/v1/issue/oauth/callback
-# -------jianjun gitee 配置 --------
-owner = src-openeuler
+owner = cve-test
path = jasper
email = 7844966+zhangjianjun_code@user.noreply.gitee.com
redirect_uri = http://159.138.2.2:80/v1/issue/oauth/callback
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 ****
client_id = "${GITEE_CLIENT_ID||****}"
client_secret = "${GITEE_CLIENT_SECRET||****}"
password = "${GITEE_PASSWORD||****}"
-# git token
+# **** git token****
git_token = "${GITEE_TOKEN||xxx}"
[hook]
hookpwd = "${HOOK_PWD||***}"
hookurl = http://159.138.2.2:80/v1/issue/hook/event
-#hookurl = http://119.8.126.102:80/v1/issue/hook/event
[yaml]
diff --git a/controllers/cvedetail.go b/controllers/cvedetail.go
index 9dea1e4..cf14c2b 100644
--- a/controllers/cvedetail.go
+++ b/controllers/cvedetail.go
@@ -15,11 +15,10 @@ type CveDetailController struct {
}
func (c *CveDetailController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
-
// @Title Get cvedetail
// @Description get cvedetail
// @Param cvenumber type string true
@@ -29,34 +28,34 @@ func (c *CveDetailController) RetData(resp map[string]interface{}) {
func (u *CveDetailController) Get() {
req := u.Ctx.Request
addr := req.RemoteAddr
- logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
+ logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
resp := make(map[string]interface{})
var cod common.CveOriginDetailData
- resp["errno"]=errcode.RecodeUnknowErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["errno"] = errcode.RecodeUnknowErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = cod
defer u.RetData(resp)
cveNum := u.GetString("cveNum")
if cveNum == "" {
logs.Error("cveNum, 参数错误")
- resp["errno"]=errcode.RecodeParamErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ resp["errno"] = errcode.RecodeParamErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr)
return
}
cveType, typeError := u.GetInt("cveType")
if typeError != nil || cveType == 0 {
logs.Error("cveType, 参数错误")
- resp["errno"]=errcode.RecodeParamErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ resp["errno"] = errcode.RecodeParamErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr)
return
}
- // 原始数据来源于中科院展示
+ // The original data comes from the display of the Chinese Academy of Sciences
if cveType == 1 {
var ou models.OriginUpstream
ouErr := models.GetOriginUpstream(cveNum, &ou)
- if ouErr != nil || ou.CveId == 0{
- resp["errno"]=errcode.RecodeNodata
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ if ouErr != nil || ou.CveId == 0 {
+ resp["errno"] = errcode.RecodeNodata
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata)
return
}
cod.CveNum = ou.CveNum
@@ -102,7 +101,7 @@ func (u *CveDetailController) Get() {
cveImpact, ok := models.QueryCveImpact(ou.CveId)
if ok && cveImpact.ImpactId > 0 {
cveScore, ok := models.QueryCveScore(cveImpact.ImpactId, "v3")
- if ok && cveScore.ScoreId > 0{
+ if ok && cveScore.ScoreId > 0 {
cveScV3, ok := models.QueryCveCvssV3(cveScore.ScoreId)
if ok && cveScV3.V3Id > 0 {
logs.Info(cveScV3)
@@ -207,13 +206,13 @@ func (u *CveDetailController) Get() {
}
cod.FixSuggest.Detail = ouf.Detail
}
- resp["errno"]=errcode.RecodeOk
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["errno"] = errcode.RecodeOk
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk)
resp["body"] = cod
return
} else {
- resp["errno"]=errcode.RecodeNodata
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ resp["errno"] = errcode.RecodeNodata
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata)
return
}
diff --git a/controllers/file.go b/controllers/file.go
index 54bb97c..8d17494 100644
--- a/controllers/file.go
+++ b/controllers/file.go
@@ -4,6 +4,7 @@ import (
"cvevulner/models"
"github.com/astaxie/beego"
)
+
//FileController file operation routing processing
type FileController struct {
beego.Controller
diff --git a/controllers/hook.go b/controllers/hook.go
index b15be03..a5c0bbe 100644
--- a/controllers/hook.go
+++ b/controllers/hook.go
@@ -1,6 +1,7 @@
package controllers
import (
+ "bytes"
"cvevulner/models"
"cvevulner/taskhandler"
"cvevulner/util"
@@ -9,6 +10,7 @@ import (
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/logs"
+ "net/http"
"os"
"strconv"
"strings"
@@ -129,7 +131,7 @@ func (c *HookEventControllers) handleIssue() {
return
}
if issueHook.Action == "assign" {
- //更新issue 模板负责人
+ //Update the person in charge of the issue template
issueTmp := models.IssueTemplate{IssueNum: issueHook.Iid}
err := models.GetIssueTemplateByColName(&issueTmp, "issue_num")
if err != nil {
@@ -152,6 +154,8 @@ func (c *HookEventControllers) handleIssue() {
}
func handleIssueStateChange(issueHook *models.IssuePayload) error {
+ unFix := beego.AppConfig.String("labelUnFix")
+ fixed := beego.AppConfig.String("labelFixed")
issueTmp := models.IssueTemplate{IssueNum: issueHook.Iid}
err := models.GetIssueTemplateByColName(&issueTmp, "issue_num")
if err != nil {
@@ -166,36 +170,80 @@ func handleIssueStateChange(issueHook *models.IssuePayload) error {
case IssueOpenState:
issueTmp.Status = 1
cveCenter.IsExport = 0
+ _, _, ok := checkIssueAnalysisComplete(&issueTmp)
+ if ok {
+ issueTmp.IssueStatus = 3
+ } else {
+ issueTmp.IssueStatus = 1
+ }
+ issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix)
+ //issueTmp.IssueStatus = 1
case IssueProgressState:
issueTmp.Status = 2
cveCenter.IsExport = 0
+ _, _, ok := checkIssueAnalysisComplete(&issueTmp)
+ if ok {
+ issueTmp.IssueStatus = 3
+ } else {
+ issueTmp.IssueStatus = 1
+ }
+ issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix)
case IssueCloseState:
issueTmp.Status = 3
if isNormalCloseIssue(issueTmp.CveId, issueTmp.IssueStatus) {
issueTmp.IssueStatus = 2
cveCenter.IsExport = 3
+ issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(unFix, fixed)
} else {
issueTmp.IssueStatus = 6
cveCenter.IsExport = 2
+ issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix)
}
case IssueRejectState:
issueTmp.Status = 4
issueTmp.IssueStatus = 6
cveCenter.IsExport = 2
- /*if isNormalCloseIssue(issueTmp.CveId, issueTmp.IssueStatus) {
- issueTmp.IssueStatus = 2
- } else {
- issueTmp.IssueStatus = 6
- }*/
+ issueTmp.IssueLabel = issueHook.Issue.ReplaceLabelToStr(fixed, unFix)
}
issueTmp.StatusName = issueHook.Issue.StateName
- err = models.UpdateIssueTemplate(&issueTmp, "status", "issue_status", "status_name")
+ appearErr := 0
+ err = models.UpdateIssueTemplate(&issueTmp, "status", "issue_status", "status_name", "issue_label")
+ if err != nil {
+ logs.Error(err)
+ appearErr += 1
+ }
update := models.UpdateVulnCenter(&cveCenter, "is_export")
+ if !update {
+ logs.Error("update vulnCenter fail ")
+ appearErr += 1
+ }
+ token := beego.AppConfig.String("gitee::git_token")
+ owner := beego.AppConfig.String("gitee::owner")
+ update = ChangeIssueLabel(token, issueTmp.Repo, issueHook.Issue.Number, owner, issueTmp.IssueLabel)
+ if !update {
+ logs.Error("update gitee issue label fail ")
+ appearErr++
+ }
+ sn := models.SecurityNotice{CveId: issueTmp.CveId}
+ err = sn.Read("cve_id")
if err != nil {
return err
}
- if update != true {
- return errors.New("update vulnCenter fail ")
+ switch issueTmp.IssueStatus {
+ case 2:
+ sn.AffectStatus = "Fixed"
+ case 6:
+ sn.AffectStatus = "UnAffected"
+ default:
+ sn.AffectStatus = "UnFixed"
+ }
+ err = sn.Update("affect_status")
+ if err != nil {
+ appearErr++
+ logs.Error(err)
+ }
+ if appearErr > 0 {
+ return errors.New("handle issue state hook appear error maybe some step fail")
}
return nil
}
@@ -222,16 +270,17 @@ func handleIssueComment(payload models.CommentPayload) {
if payload.Comment.User == nil {
return
}
- issueNum := payload.Issue.Number //issue 编号
- cBody := payload.Comment.Body //评论主体
- cuAccount := payload.Comment.User.UserName //gitee 域地址
+ issueNum := payload.Issue.Number //issue number
+ cBody := payload.Comment.Body //Comment subject
+ cuAccount := payload.Comment.User.UserName //gitee domain address
cmdRej := beego.AppConfig.DefaultString("rejectCmd", "/reject")
cmdApe := beego.AppConfig.DefaultString("approveCmd", "/approve")
+ cmdClose := beego.AppConfig.DefaultString("closeCmd", "/close")
if issueNum == "" || cuAccount == "" || cBody == "" {
return
}
if strings.HasPrefix(cBody, cmdRej) {
- //审核拒绝 添加评论 @分析人
+ //Review rejected Add comment @Analyst
if !isReviewer(cuAccount) {
return
}
@@ -251,7 +300,7 @@ func handleIssueComment(payload models.CommentPayload) {
path := issueTmp.Repo
taskhandler.AddCommentToIssue(fmt.Sprintf(ReviewRejectScore, issueTmp.Assignee, cuAccount), issueTmp.IssueNum, owner, path, accessToken)
} else if strings.HasPrefix(cBody, cmdApe) {
- //审核通过 修改评分状态
+ //Approved to modify the rating status
if !isReviewer(cuAccount) {
return
}
@@ -272,6 +321,30 @@ func handleIssueComment(payload models.CommentPayload) {
taskhandler.AddCommentToIssue(fmt.Sprintf(ReviewApproveScore, issueTmp.Assignee, cuAccount), issueTmp.IssueNum, owner, path, accessToken)
}
+ } else if strings.HasPrefix(cBody, cmdClose) {
+ //close issue
+ issueTmp := models.IssueTemplate{IssueNum: issueNum}
+ err := models.GetIssueTemplateByColName(&issueTmp, "issue_num")
+ if err != nil {
+ logs.Error(err)
+ return
+ }
+ if cuAccount == issueTmp.Assignee {
+ //call the gitee api to change issue status
+ c := strings.Trim(cBody, cmdClose)
+ issueTmp.ErrorDescription = c
+ token := beego.AppConfig.String("gitee::git_token")
+ owner := beego.AppConfig.String("gitee::owner")
+ success := CloseIssue(token, issueTmp.Repo, issueNum, owner)
+ if success {
+ //update issue tpl
+ err = models.UpdateIssueTemplate(&issueTmp, "error_description")
+ if err != nil {
+ logs.Error(err)
+ return
+ }
+ }
+ }
} else {
cBody = strings.ReplaceAll(cBody, ":", ":")
analysisComment(issueNum, cuAccount, cBody, &payload)
@@ -285,8 +358,6 @@ func isReviewer(path string) bool {
}
func analysisComment(issueNum string, cuAccount string, cBody string, payload *models.CommentPayload) {
- //cmdAys := beego.AppConfig.DefaultString("analysisCmd", "//不需要分析指令
- //cmdEnd := beego.AppConfig.DefaultString("endCmd", "/done") //不需要结束指令
issueTmp := models.IssueTemplate{IssueNum: issueNum}
err := models.GetIssueTemplateByColName(&issueTmp, "issue_num")
if err != nil {
@@ -294,7 +365,6 @@ func analysisComment(issueNum string, cuAccount string, cBody string, payload *m
return
}
canVerfy := false
- //if cuAccount == issueTmp.Assignee && strings.Contains(cBody, cmdAys) {
if cuAccount == issueTmp.Assignee {
//is Analyst comment and content start with '/analysis'
vMap := util.ExtractCommentAnalysisAllValue(cBody)
@@ -367,12 +437,10 @@ func analysisComment(issueNum string, cuAccount string, cBody string, payload *m
}
}
- //if cuAccount == issueTmp.Assignee && strings.Contains(cBody, cmdEnd) {
if cuAccount == issueTmp.Assignee && canVerfy {
//Check whether the data is legal
accessToken := os.Getenv("GITEE_TOKEN")
owner := beego.AppConfig.String("gitee::owner")
- //path := beego.AppConfig.String("gitee::path")
path := issueTmp.Repo
if msg, tb, ok := checkIssueAnalysisComplete(&issueTmp); !ok {
//send comment to issue
@@ -480,12 +548,6 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
tbContent[3] = "已分析"
tbContent[4] = "影响性分析说明"
tbContent[5] = util.TrimStringNR(i.CveAnalysis)
- //新模板没有该值
- /*if i.PrincipleAnalysis == "" {
- msg = fmt.Sprintf("原理分析:%v",i.PrincipleAnalysis)
- ok = false
- return
- }*/
if i.OpenEulerVector == "" {
msg = fmt.Sprintf("openEulerVector没有填写:%v", i.OpenEulerVector)
ok = false
@@ -532,25 +594,6 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
tbContent[10] = "受影响版本排查"
tbContent[11] = ""
}
- //非必填字段
- /*if i.AffectedVersion == "" {
- msg = fmt.Sprintf("受影响的包:%v",i.OpenEulerVector)
- ok = false
- return
- }*/
- //新模板没有该值
- /*if i.Solution == ""{
- msg = fmt.Sprintf("规避方案或消减措施:%v",i.OpenEulerVector)
- ok = false
- return
- }
- pkg, err := models.QueryPackageByCveId(i.CveId)
- if err != nil {
- return "受影响的包:",false
- }
- if len(pkg) == 0 {
- return "受影响的包",false
- }*/
tbStr = fmt.Sprintf(tb, tbContent...)
return
}
@@ -558,7 +601,6 @@ func checkIssueAnalysisComplete(i *models.IssueTemplate) (msg, tbStr string, ok
func commentUpdateIssue(issueTmp models.IssueTemplate) {
accessToken := os.Getenv("GITEE_TOKEN")
owner := beego.AppConfig.String("gitee::owner")
- //path := beego.AppConfig.String("gitee::path")
path := issueTmp.Repo
if accessToken != "" && owner != "" && path != "" {
cvlnCenter := models.VulnCenter{}
@@ -665,7 +707,7 @@ func saveVectorData(vct string, cveID int64) error {
}
}
if len(upFields) > 0 {
- //执行更新
+ //Perform update
err = models.UpdateScore(&score, upFields...)
if err != nil {
return err
@@ -682,3 +724,58 @@ func handleCommentPackage(packageStr string, cveID int64) error {
}
return nil
}
+
+//CloseIssue close gitee issue
+func CloseIssue(token, repo, issueNum, owner string) bool {
+ url := fmt.Sprintf("https://gitee.com/api/v5/repos/%s/issues/%s", owner, issueNum)
+ param := struct {
+ AccessToken string `json:"access_token"`
+ Repo string `json:"repo"`
+ State string `json:"state"`
+ }{token, repo, "closed"}
+ pj, err := json.Marshal(¶m)
+ if err != nil {
+ logs.Error(err)
+ return false
+ }
+ return UpdateGiteIssue(url, pj)
+}
+
+//ChangeIssueLabel update issue label
+func ChangeIssueLabel(token, repo, issueNum, owner, label string) bool {
+ url := fmt.Sprintf("https://gitee.com/api/v5/repos/%s/issues/%s", owner, issueNum)
+ param := struct {
+ AccessToken string `json:"access_token"`
+ Repo string `json:"repo"`
+ Label string `json:"labels"`
+ }{token, repo, label}
+ pj, err := json.Marshal(¶m)
+ if err != nil {
+ logs.Error(err)
+ return false
+ }
+ return UpdateGiteIssue(url, pj)
+}
+
+//UpdateGiteIssue update gitee issue
+func UpdateGiteIssue(url string, param []byte) bool {
+ read := bytes.NewReader(param)
+ req, err := http.NewRequest(http.MethodPatch, url, read)
+ if err != nil {
+ logs.Error(err)
+ return false
+ }
+ defer req.Body.Close()
+ req.Header.Set("Content-Type", "application/json;charset=UTF-8")
+ client := http.Client{}
+ resp, err := client.Do(req)
+ if err != nil {
+ logs.Error(err)
+ return false
+ }
+ defer resp.Body.Close()
+ if resp.StatusCode == 200 {
+ return true
+ }
+ return false
+}
diff --git a/controllers/issue.go b/controllers/issue.go
index bb5ef08..2d47c21 100644
--- a/controllers/issue.go
+++ b/controllers/issue.go
@@ -11,9 +11,8 @@ type IssueOathCallbackController struct {
beego.Controller
}
-
func (c *IssueOathCallbackController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
@@ -26,48 +25,11 @@ func (c *IssueOathCallbackController) RetData(resp map[string]interface{}) {
func (c *IssueOathCallbackController) Post() {
req := make(map[string]interface{})
resp := make(map[string]interface{})
- resp["errno"]=errcode.RecodeLoginErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeLoginErr)
+ resp["errno"] = errcode.RecodeLoginErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeLoginErr)
resp["body"] = Result{}
defer c.RetData(resp)
- json.Unmarshal(c.Ctx.Input.RequestBody,&req)
+ json.Unmarshal(c.Ctx.Input.RequestBody, &req)
logs.Info("登录请求参数:", &req)
- //判断是否合法
- //if req["UserName"] == nil || req["PassWord"] ==nil{
- // resp["errno"]=errcode.RECODE_DATAERR
- // resp["errmsg"]=errcode.RecodeText(errcode.RECODE_DATAERR)
- // resp["body"] = Result{}
- // logs.Error("数据错误")
- // return
- //}
- //password := fmt.Sprintf("%s", req["PassWord"])
- //// 加密先注释
- ////password = common.DesString(password)
- //if password == "" || len(password) == 0{
- // resp["errno"]=errcode.RECODE_PWDERR
- // resp["errmsg"]=errcode.RecodeText(errcode.RECODE_PWDERR)
- // logs.Error("密码解析错误", password)
- // resp["body"] = Result{}
- // return
- //}
- //var strc Result
- //username := fmt.Sprintf("%s", req["UserName"])
- //resp_model, err := models.GetCveUserByUser(username, password)
- //logs.Info(resp_model)
- //if resp_model!= nil && err == nil {
- // token,terr := common.GenToken(username, password)
- // if terr == nil {
- // strc.Key = token
- // logs.Info(resp_model[0]["user_id"])
- // user_id := resp_model[0]["user_id"]
- // strc.UserId = user_id
- // resp["body"] = strc
- // resp["errno"]=errcode.RECODE_OK
- // resp["errmsg"]=errcode.RecodeText(errcode.RECODE_OK)
- // models.UpdateToken(resp_model[0]["user_id"], token)
- // return
- // }
- //}
return
}
-
diff --git a/controllers/login.go b/controllers/login.go
index f9c31d2..ae3757a 100644
--- a/controllers/login.go
+++ b/controllers/login.go
@@ -16,12 +16,12 @@ type UserLoginController struct {
}
type Result struct {
- Key string `json:"Token"`
+ Key string `json:"Token"`
UserId interface{} `json:"UserId"`
}
func (c *UserLoginController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
@@ -34,30 +34,30 @@ func (c *UserLoginController) RetData(resp map[string]interface{}) {
func (u *UserLoginController) Post() {
req := make(map[string]interface{})
resp := make(map[string]interface{})
- resp["errno"]=errcode.RecodeLoginErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeLoginErr)
+ resp["errno"] = errcode.RecodeLoginErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeLoginErr)
resp["body"] = Result{}
defer u.RetData(resp)
err := json.Unmarshal(u.Ctx.Input.RequestBody, &req)
- if err != nil{
+ if err != nil {
logs.Error(err)
return
}
logs.Info("登录请求参数:", &req)
- //判断是否合法
- if req["userName"] == nil || req["passWord"] == nil{
- resp["errno"]=errcode.RecodeDataErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeDataErr)
+ //Judge whether it is legal
+ if req["userName"] == nil || req["passWord"] == nil {
+ resp["errno"] = errcode.RecodeDataErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeDataErr)
resp["body"] = Result{}
logs.Error("数据错误")
return
}
password := fmt.Sprintf("%s", req["passWord"])
- // 加密先注释
+ // Encryption first comment
//password = common.DesString(password)
- if password == "" || len(password) == 0{
- resp["errno"]=errcode.RecodePwdErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodePwdErr)
+ if password == "" || len(password) == 0 {
+ resp["errno"] = errcode.RecodePwdErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodePwdErr)
logs.Error("密码解析错误", password)
resp["body"] = Result{}
return
@@ -66,7 +66,7 @@ func (u *UserLoginController) Post() {
username := fmt.Sprintf("%s", req["userName"])
resp_model, err := models.GetCveUserByUser(username, password)
logs.Info(resp_model)
- if resp_model!= nil && err == nil {
+ if resp_model != nil && err == nil {
token, terr := common.GenToken(username, password)
if terr == nil {
strc.Key = token
@@ -74,8 +74,8 @@ func (u *UserLoginController) Post() {
user_id := resp_model[0]["user_id"]
strc.UserId = user_id
resp["body"] = strc
- resp["errno"]=errcode.RecodeOk
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["errno"] = errcode.RecodeOk
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk)
expirTime := common.GetTokenExpirTime()
newTime := time.Now().AddDate(0, 0, expirTime)
models.UpdateToken(resp_model[0]["user_id"], token, newTime)
diff --git a/controllers/packages.go b/controllers/packages.go
index 444fff0..692091f 100644
--- a/controllers/packages.go
+++ b/controllers/packages.go
@@ -14,7 +14,7 @@ type PackagesController struct {
}
func (c *PackagesController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
@@ -23,48 +23,48 @@ type PackagesInfoController struct {
}
func (c *PackagesInfoController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
type PackageData struct {
- Id int64 `json:"id"`
- Name string `json:"name"`
- Version string `json:"version"`
- Release string `json:"release"`
- OriginUrl string `json:"url"`
- CpeName string `json:"cpeName"`
- ReleaseTime string `json:"releaseTime"`
- LatestVersion string `json:"latestVersion"`
+ Id int64 `json:"id"`
+ Name string `json:"name"`
+ Version string `json:"version"`
+ Release string `json:"release"`
+ OriginUrl string `json:"url"`
+ CpeName string `json:"cpeName"`
+ ReleaseTime string `json:"releaseTime"`
+ LatestVersion string `json:"latestVersion"`
LatestVersionTime string `json:"latestVersionTime"`
}
type Provide struct {
- Name string `json:"name"`
+ Name string `json:"name"`
Requiredby []string `json:"requiredby"`
}
type Require struct {
- Name string `json:"name"`
+ Name string `json:"name"`
Providedby []string `json:"providedby"`
}
type SubPack struct {
- Name string `json:"name"`
+ Name string `json:"name"`
Provides []Provide `json:"provides"`
Requires []Require `json:"requires"`
}
type PackageInfoData struct {
- PkgName string `json:"pkgName"`
- Version string `json:"version"`
- Release string `json:"release"`
- OriginUrl string `json:"url"`
- GiteeUrl string `json:"giteeUrl"`
- Summary string `json:"summary"`
- Description string `json:"description"`
- BuildRequired []string `json:"buildRequired"`
- Subpack []SubPack `json:"subpack"`
+ PkgName string `json:"pkgName"`
+ Version string `json:"version"`
+ Release string `json:"release"`
+ OriginUrl string `json:"url"`
+ GiteeUrl string `json:"giteeUrl"`
+ Summary string `json:"summary"`
+ Description string `json:"description"`
+ BuildRequired []string `json:"buildRequired"`
+ Subpack []SubPack `json:"subpack"`
}
// @Title Get packages
@@ -76,11 +76,11 @@ type PackageInfoData struct {
func (u *PackagesController) Get() {
req := u.Ctx.Request
addr := req.RemoteAddr
- logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
+ logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
resp := make(map[string]interface{})
var pd []PackageData
- resp["errno"]=errcode.RecodeUnknowErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["errno"] = errcode.RecodeUnknowErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = []PackageData{}
resp["totalCount"] = 0
resp["totalPage"] = 0
@@ -90,40 +90,40 @@ func (u *PackagesController) Get() {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
token := u.GetString("token")
if token == "" {
- resp["errno"]=errcode.RecodeSessionErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
+ resp["errno"] = errcode.RecodeSessionErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr)
return
} else {
ok := models.CheckToken(token)
if !ok {
- resp["errno"]=errcode.RecodeRoleErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr)
+ resp["errno"] = errcode.RecodeRoleErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeRoleErr)
return
}
}
PageNum, err := u.GetInt64("pageNum")
if err != nil {
logs.Error("pageNum, err: ", err)
- resp["errno"]=errcode.RecodeParamErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ resp["errno"] = errcode.RecodeParamErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr)
return
}
PageSize, err := u.GetInt64("pageSize")
if err != nil {
logs.Error("PageSize, err: ", err)
- resp["errno"]=errcode.RecodeParamErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ resp["errno"] = errcode.RecodeParamErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr)
return
}
QueryPkgName := u.GetString("queryPkgName")
@@ -136,7 +136,7 @@ func (u *PackagesController) Get() {
if PageSize >= totalNum {
resp["totalPage"] = 1
} else {
- if totalNum % PageSize == 0 {
+ if totalNum%PageSize == 0 {
resp["totalPage"] = totalNum / PageSize
} else {
totalPage := totalNum / PageSize
@@ -146,9 +146,8 @@ func (u *PackagesController) Get() {
}
resp["totalCount"] = totalNum
ge, num, err := models.GetPackageList(PageSize, PageNum, QueryPkgName)
- if num >0 && err == nil {
+ if num > 0 && err == nil {
for _, g := range ge {
- //logs.Info("添加第:", i, "条数据")
var pg PackageData
pg.Id = g.GitId
pg.Release = g.Release
@@ -162,17 +161,16 @@ func (u *PackagesController) Get() {
pd = append(pd, pg)
}
resp["body"] = pd
- resp["errno"]=errcode.RecodeOk
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["errno"] = errcode.RecodeOk
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk)
}
} else {
- resp["errno"]=errcode.RecodeNodata
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ resp["errno"] = errcode.RecodeNodata
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata)
return
}
}
-
// @Title Get packagesinfo
// @Description get packagesinfo
// @Param pkgName token string true
@@ -182,11 +180,11 @@ func (u *PackagesController) Get() {
func (u *PackagesInfoController) Get() {
req := u.Ctx.Request
addr := req.RemoteAddr
- logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
+ logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
resp := make(map[string]interface{})
var pd PackageInfoData
- resp["errno"]=errcode.RecodeUnknowErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["errno"] = errcode.RecodeUnknowErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = PackageInfoData{}
defer u.RetData(resp)
var iw models.IpWhite
@@ -194,40 +192,40 @@ func (u *PackagesInfoController) Get() {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
token := u.GetString("token")
if token == "" {
- resp["errno"]=errcode.RecodeSessionErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
+ resp["errno"] = errcode.RecodeSessionErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr)
return
} else {
ok := models.CheckToken(token)
if !ok {
- resp["errno"]=errcode.RecodeRoleErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr)
+ resp["errno"] = errcode.RecodeRoleErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeRoleErr)
return
}
}
pkgName := u.GetString("pkgName")
if pkgName == "" {
logs.Error("pkgName, 参数错误")
- resp["errno"]=errcode.RecodeParamErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeParamErr)
+ resp["errno"] = errcode.RecodeParamErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeParamErr)
return
}
var gi models.GitPackageInfo
err := models.GetPackageInfo(pkgName, &gi)
if err != nil {
- resp["errno"]=errcode.RecodeNodata
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ resp["errno"] = errcode.RecodeNodata
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata)
return
}
pd.OriginUrl = gi.OriginUrl
@@ -287,8 +285,8 @@ func (u *PackagesInfoController) Get() {
} else {
pd.Subpack = []SubPack{}
}
- resp["errno"]=errcode.RecodeOk
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["errno"] = errcode.RecodeOk
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk)
resp["body"] = pd
return
-}
\ No newline at end of file
+}
diff --git a/controllers/upload.go b/controllers/upload.go
index 54c1e4a..74f3264 100644
--- a/controllers/upload.go
+++ b/controllers/upload.go
@@ -16,16 +16,16 @@ type UserUploadController struct {
type ResultData struct {
CveNum string `json:"CveNum"`
- Status int `json:"Status"`
+ Status int `json:"Status"`
}
func (c *UserUploadController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
func (c *CveErrorFeedBackController) RetData(resp map[string]interface{}) {
- c.Data["json"] =resp
+ c.Data["json"] = resp
c.ServeJSON()
}
@@ -34,8 +34,8 @@ type CveErrorFeedBackController struct {
}
type CveErrorData struct {
- CveNum string `json:"cveNum"`
- ErrorDesc string `json:"errorDesc"`
+ CveNum string `json:"cveNum"`
+ ErrorDesc string `json:"errorDesc"`
CveUploadTime string `json:"cveUploadTime"`
}
@@ -48,11 +48,11 @@ type CveErrorData struct {
func (u *CveErrorFeedBackController) Get() {
req := u.Ctx.Request
addr := req.RemoteAddr
- logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
+ logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header, "body: ", req.Body)
resp := make(map[string]interface{})
var ced []CveErrorData
- resp["errno"]=errcode.RecodeUnknowErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["errno"] = errcode.RecodeUnknowErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = []CveErrorData{}
defer u.RetData(resp)
var iw models.IpWhite
@@ -60,25 +60,25 @@ func (u *CveErrorFeedBackController) Get() {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
token := u.GetString("token")
if token == "" {
- resp["errno"]=errcode.RecodeSessionErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
+ resp["errno"] = errcode.RecodeSessionErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr)
return
} else {
ok := models.CheckToken(token)
if !ok {
- resp["errno"]=errcode.RecodeRoleErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeRoleErr)
+ resp["errno"] = errcode.RecodeRoleErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeRoleErr)
return
}
}
@@ -105,11 +105,11 @@ func (u *CveErrorFeedBackController) Get() {
ced = append(ced, ved)
}
resp["body"] = ced
- resp["errno"]=errcode.RecodeOk
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["errno"] = errcode.RecodeOk
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk)
} else {
- resp["errno"]=errcode.RecodeNodata
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ resp["errno"] = errcode.RecodeNodata
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata)
return
}
}
@@ -125,54 +125,53 @@ func (u *UserUploadController) Post() {
var ResDataList []ResultData
req := u.Ctx.Request
addr := req.RemoteAddr
- logs.Info("Method: ",req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header)
+ logs.Info("Method: ", req.Method, "客户端请求的:addr: ", addr, "Header: ", req.Header)
resp := make(map[string]interface{})
- resp["errno"]=errcode.RecodeUnknowErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeUnknowErr)
+ resp["errno"] = errcode.RecodeUnknowErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeUnknowErr)
resp["body"] = []ResultData{}
defer u.RetData(resp)
- json.Unmarshal(u.Ctx.Input.RequestBody,&uploaddata)
+ json.Unmarshal(u.Ctx.Input.RequestBody, &uploaddata)
logs.Info("Cve上传请求参数:", &uploaddata)
var iw models.IpWhite
if addr != "" {
addrIp := strings.Split(addr, ":")
err := models.GetIpWhite(addrIp[0], &iw)
if err != nil {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
} else {
- resp["errno"]=errcode.RecodeIpErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeIpErr)
+ resp["errno"] = errcode.RecodeIpErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeIpErr)
return
}
- //判断是否合法
+ //Judge whether it is legal
if uploaddata.Token == "" {
- resp["errno"]=errcode.RecodeSessionErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
+ resp["errno"] = errcode.RecodeSessionErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr)
resp["body"] = []ResultData{}
logs.Error("token 校验失败")
return
} else {
- // 校验token
+ // Check token
ok := models.CheckToken(uploaddata.Token)
if !ok {
- resp["errno"]=errcode.RecodeSessionErr
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeSessionErr)
+ resp["errno"] = errcode.RecodeSessionErr
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeSessionErr)
resp["body"] = []ResultData{}
logs.Error("token 校验失败")
return
}
}
- if uploaddata.CveData == nil || len(uploaddata.CveData) == 0{
- resp["errno"]=errcode.RecodeNodata
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeNodata)
+ if uploaddata.CveData == nil || len(uploaddata.CveData) == 0 {
+ resp["errno"] = errcode.RecodeNodata
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeNodata)
resp["body"] = []ResultData{}
logs.Error("数据为空")
return
}
- //logs.Info(uploaddata.CveData, uploaddata.Token)
for _, CveDataDict := range uploaddata.CveData {
defer common.Catchs()
logs.Info("每一条请求参数: ", CveDataDict)
@@ -316,8 +315,8 @@ func (u *UserUploadController) Post() {
ResDataList = append(ResDataList, ResData)
}
}
- resp["errno"]=errcode.RecodeOk
- resp["errmsg"]=errcode.RecodeText(errcode.RecodeOk)
+ resp["errno"] = errcode.RecodeOk
+ resp["errmsg"] = errcode.RecodeText(errcode.RecodeOk)
resp["body"] = ResDataList
return
}
diff --git a/controllers/user.go b/controllers/user.go
index 2a7b360..3691759 100644
--- a/controllers/user.go
+++ b/controllers/user.go
@@ -116,4 +116,3 @@ func (u *UserController) Logout() {
u.Data["json"] = "logout success"
u.ServeJSON()
}
-
diff --git a/doc/md/manual.md b/doc/md/manual.md
index 027b9b7..e857b0e 100644
--- a/doc/md/manual.md
+++ b/doc/md/manual.md
@@ -11,8 +11,6 @@ issue分析注意事项
```batch
影响性分析说明:
openEuler评分: (评分和向量)
- openEulerScore:
- openEulerVector:
受影响版本排查(受影响/不受影响):
1.openEuler-20.03-LTS:
2.openEuler-20.09:
@@ -60,6 +58,7 @@ issue分析注意事项
| ------ | ------- | ------- |
| /approve | 审核通过 | security-committee-sig组成员 |
| /reject | 审核拒绝 | security-committee-sig组成员 |
+ | /close | 关闭issue | issue 负责人 |
- 注意事项
```batch
@@ -67,6 +66,12 @@ issue分析注意事项
2.以最后一位审核员评论审核的指令为最终指令
3.审核评论成功 cve-manage 会新增一条@责任人的评论
(若没有新增评论,可主动刷新页面,多次刷新后没有回复则没有审核评论成功)
+ 4.对于‘/close’ 指令有两种含义
+ 4.1 正常关闭issue 所有流程走完要关闭issue(如分析流程没走完系统将默认为异常关闭),可以使用该指令也可以使用gitee提供的操作界面修改issue状态。
+ 4.2 异常关闭issue 如发现该issue因某种原因不需要分析,则可以使用该指令关闭issue并可携带关闭原因。
+ 例:/close 该CVE内容不符合事实
+ (ps 关闭原因cvemanage将记录到数据库并作为反馈给cve提供方,异常原因可选不影响issue的关闭。
+ 异常关闭建议最好加上异常关闭原因同时建议使用指令而不是使用giee界面操作。)
```
### 分析导出
diff --git a/doc/sql/db_data.sql b/doc/sql/db_data.sql
index 484272d..79bbf1d 100644
--- a/doc/sql/db_data.sql
+++ b/doc/sql/db_data.sql
@@ -28,6 +28,16 @@ CREATE TABLE `cve_email_list` (
KEY `cve_email_list_email_type` (`email_type`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
+/*Data for the table `cve_email_list` */
+
+insert into `cve_email_list`(`id`,`email_name`,`email_type`) values
+(1,'jjzhangcm@isoftstone.com',1),
+(2,'yanxiaobing@huawei.com',1),
+(3,'guoxiaoqi2@huawei.com',1),
+(4,'yanglijin@huawei.com',1),
+(5,'zhujianwei7@huawei.com',1),
+(6,'liujingang09@huawei.com',1);
+
/*Table structure for table `cve_ip_white` */
DROP TABLE IF EXISTS `cve_ip_white`;
@@ -41,6 +51,14 @@ CREATE TABLE `cve_ip_white` (
KEY `cve_ip_white_machine_ip` (`machine_ip`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+/*Data for the table `cve_ip_white` */
+
+insert into `cve_ip_white`(`ip_id`,`machine_name`,`machine_ip`,`access_count`) values
+(1,'root','127.0.0.1',0),
+(2,'guest','124.192.225.141',0),
+(3,'guest','124.202.179.122',0),
+(4,'root','159.138.2.2',0);
+
/*Table structure for table `cve_other_user` */
DROP TABLE IF EXISTS `cve_other_user`;
@@ -57,6 +75,2499 @@ CREATE TABLE `cve_other_user` (
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+/*Data for the table `cve_other_user` */
+
+insert into `cve_other_user`(`user_id`,`user_name`,`pass_word`,`aes_key`,`expiration_time`,`create_time`,`update_time`,`delete_time`) values
+(1,'test','123','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDMyNjk3OTQsImlhdCI6MTYwMjY2NDk5NCwiaXNzIjoiMTI3LjAuMC4xIiwic3ViIjoidXNlciB0b2tlbiJ9.IROeQHVDkPwUgaBioCLDLKU0mjA5OTSBEgYu2cK6Ndw','2020-10-17 16:43:14','2020-08-27 17:22:48','2020-10-14 16:43:14',NULL);
+
+/*Table structure for table `cve_package_cpe` */
+
+DROP TABLE IF EXISTS `cve_package_cpe`;
+
+CREATE TABLE `cve_package_cpe` (
+ `id` bigint NOT NULL AUTO_INCREMENT,
+ `packname` varchar(512) DEFAULT NULL,
+ `cpe_packname` varchar(512) DEFAULT NULL,
+ `create_time` varchar(32) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `cve_package_cpe_packname` (`packname`)
+) ENGINE=InnoDB AUTO_INCREMENT=2472 DEFAULT CHARSET=utf8;
+
+/*Data for the table `cve_package_cpe` */
+
+insert into `cve_package_cpe`(`id`,`packname`,`cpe_packname`,`create_time`) values
+(1,'389-ds-base','389-ds-base,389 Directory Server','2020-10-15 15:15:24'),
+(2,'CUnit','CUnit','2020-10-15 15:15:24'),
+(3,'CreateImage','CreateImage','2020-10-15 15:15:25'),
+(4,'Cython','Cython','2020-10-15 15:15:25'),
+(5,'GConf2','GConf2','2020-10-15 15:15:25'),
+(6,'GeoIP','GeoIP','2020-10-15 15:15:25'),
+(7,'GeoIP-GeoLite-data','GeoIP-GeoLite-data','2020-10-15 15:15:25'),
+(8,'GraphicsMagick','GraphicsMagick','2020-10-15 15:15:25'),
+(9,'Judy','Judy','2020-10-15 15:15:25'),
+(10,'LibRaw','LibRaw','2020-10-15 15:15:25'),
+(11,'ModemManager','ModemManager','2020-10-15 15:15:25'),
+(12,'NetworkManager','NetworkManager','2020-10-15 15:15:25'),
+(13,'NetworkManager-libreswan','NetworkManager-libreswan','2020-10-15 15:15:25'),
+(14,'ORBit2','ORBit2','2020-10-15 15:15:25'),
+(15,'OpenEXR','OpenEXR','2020-10-15 15:15:25'),
+(16,'OpenIPMI','OpenIPMI','2020-10-15 15:15:25'),
+(17,'PackageKit','PackageKit','2020-10-15 15:15:25'),
+(18,'PyYAML','pyyaml','2020-10-15 15:15:25'),
+(19,'Resource-Manager-for-Docker','Resource-Manager-for-Docker','2020-10-15 15:15:25'),
+(20,'SDL','SDL,libsdl','2020-10-15 15:15:25'),
+(21,'SDL2','SDL2','2020-10-15 15:15:25'),
+(22,'SPDK','SPDK','2020-10-15 15:15:25'),
+(23,'TeXamator','TeXamator','2020-10-15 15:15:25'),
+(24,'Xaw3d','Xaw3d','2020-10-15 15:15:25'),
+(25,'a52dec','a52dec','2020-10-15 15:15:25'),
+(26,'aajohan-comfortaa-fonts','aajohan-comfortaa-fonts','2020-10-15 15:15:25'),
+(27,'abattis-cantarell-fonts','abattis-cantarell-fonts','2020-10-15 15:15:25'),
+(28,'abrt','abrt','2020-10-15 15:15:25'),
+(29,'abrt-java-connector','abrt-java-connector','2020-10-15 15:15:25'),
+(30,'accountsservice','accountsservice','2020-10-15 15:15:25'),
+(31,'acl','acl','2020-10-15 15:15:25'),
+(32,'acpica-tools','acpica-tools','2020-10-15 15:15:25'),
+(33,'acpid','acpid','2020-10-15 15:15:25'),
+(34,'adcli','adcli','2020-10-15 15:15:25'),
+(35,'adobe-mappings-cmap','adobe-mappings-cmap','2020-10-15 15:15:25'),
+(36,'adobe-mappings-pdf','adobe-mappings-pdf','2020-10-15 15:15:25'),
+(37,'adwaita-icon-theme','adwaita-icon-theme','2020-10-15 15:15:25'),
+(38,'agetty_query','agetty_query','2020-10-15 15:15:25'),
+(39,'agg','agg','2020-10-15 15:15:25'),
+(40,'aic94xx-firmware','aic94xx-firmware','2020-10-15 15:15:25'),
+(41,'aide','aide','2020-10-15 15:15:25'),
+(42,'akonadi','akonadi','2020-10-15 15:15:25'),
+(43,'alacarte','alacarte','2020-10-15 15:15:25'),
+(44,'alsa-firmware','alsa-firmware','2020-10-15 15:15:25'),
+(45,'alsa-lib','alsa-lib','2020-10-15 15:15:25'),
+(46,'alsa-plugins','alsa-plugins','2020-10-15 15:15:25'),
+(47,'alsa-tools','alsa-tools','2020-10-15 15:15:25'),
+(48,'alsa-utils','alsa-utils','2020-10-15 15:15:25'),
+(49,'amanda','amanda','2020-10-15 15:15:25'),
+(50,'anaconda','anaconda','2020-10-15 15:15:25'),
+(51,'anaconda-user-help','anaconda-user-help','2020-10-15 15:15:25'),
+(52,'ant','ant','2020-10-15 15:15:25'),
+(53,'antlr','antlr','2020-10-15 15:15:25'),
+(54,'apache-commons-cli','apache-commons-cli','2020-10-15 15:15:25'),
+(55,'apache-commons-codec','apache-commons-codec','2020-10-15 15:15:25'),
+(56,'apache-commons-collections','apache-commons-collections','2020-10-15 15:15:25'),
+(57,'apache-commons-daemon','apache-commons-daemon','2020-10-15 15:15:25'),
+(58,'apache-commons-dbcp','apache-commons-dbcp','2020-10-15 15:15:25'),
+(59,'apache-commons-io','apache-commons-io','2020-10-15 15:15:25'),
+(60,'apache-commons-lang','apache-commons-lang','2020-10-15 15:15:25'),
+(61,'apache-commons-logging','apache-commons-logging','2020-10-15 15:15:25'),
+(62,'apache-commons-pool','apache-commons-pool','2020-10-15 15:15:25'),
+(63,'appict','appict','2020-10-15 15:15:25'),
+(64,'apr','apr','2020-10-15 15:15:25'),
+(65,'apr-util','apr-util','2020-10-15 15:15:25'),
+(66,'argon2','argon2','2020-10-15 15:15:25'),
+(67,'args4j','args4j','2020-10-15 15:15:25'),
+(68,'arm-trusted-firmware','arm-trusted-firmware','2020-10-15 15:15:25'),
+(69,'arptables','arptables','2020-10-15 15:15:25'),
+(70,'arpwatch','arpwatch','2020-10-15 15:15:25'),
+(71,'asciidoc','asciidoc','2020-10-15 15:15:25'),
+(72,'aspell','aspell','2020-10-15 15:15:25'),
+(73,'at','at','2020-10-15 15:15:25'),
+(74,'at-spi2-atk','at-spi2-atk','2020-10-15 15:15:25'),
+(75,'at-spi2-core','at-spi2-core','2020-10-15 15:15:25'),
+(76,'atf','atf','2020-10-15 15:15:25'),
+(77,'atk','atk','2020-10-15 15:15:25'),
+(78,'atkmm','atkmm','2020-10-15 15:15:25'),
+(79,'atlas','atlas','2020-10-15 15:15:25'),
+(80,'atmel-firmware','atmel-firmware','2020-10-15 15:15:25'),
+(81,'attica','attica','2020-10-15 15:15:25'),
+(82,'attr','attr','2020-10-15 15:15:25'),
+(83,'audiofile','audiofile','2020-10-15 15:15:25'),
+(84,'audit','audit','2020-10-15 15:15:25'),
+(85,'augeas','augeas','2020-10-15 15:15:25'),
+(86,'authconfig','authconfig','2020-10-15 15:15:25'),
+(87,'authd','authd','2020-10-15 15:15:25'),
+(88,'authselect','authselect','2020-10-15 15:15:25'),
+(89,'authz','authz','2020-10-15 15:15:25'),
+(90,'autoconf','autoconf','2020-10-15 15:15:25'),
+(91,'autoconf-archive','autoconf-archive','2020-10-15 15:15:25'),
+(92,'autoconf213','autoconf213','2020-10-15 15:15:25'),
+(93,'autofs','autofs','2020-10-15 15:15:25'),
+(94,'autogen','autogen','2020-10-15 15:15:25'),
+(95,'automake','automake','2020-10-15 15:15:25'),
+(96,'automoc','automoc','2020-10-15 15:15:25'),
+(97,'avahi','avahi','2020-10-15 15:15:25'),
+(98,'avalon-framework','avalon-framework','2020-10-15 15:15:25'),
+(99,'avalon-logkit','avalon-logkit','2020-10-15 15:15:25'),
+(100,'b43-openfwwf','b43-openfwwf','2020-10-15 15:15:25'),
+(101,'b43-tools','b43-tools','2020-10-15 15:15:25'),
+(102,'babel','babel','2020-10-15 15:15:25'),
+(103,'babeltrace','babeltrace','2020-10-15 15:15:25'),
+(104,'babl','babl','2020-10-15 15:15:25'),
+(105,'bacula','bacula','2020-10-15 15:15:25'),
+(106,'baobab','baobab','2020-10-15 15:15:25'),
+(107,'basesystem','basesystem','2020-10-15 15:15:25'),
+(108,'bash','bash','2020-10-15 15:15:25'),
+(109,'bash-completion','bash-completion','2020-10-15 15:15:25'),
+(110,'bc','bc','2020-10-15 15:15:25'),
+(111,'bcel','bcel','2020-10-15 15:15:25'),
+(112,'bcm283x-firmware','bcm283x-firmware','2020-10-15 15:15:25'),
+(113,'bea-stax','bea-stax','2020-10-15 15:15:26'),
+(114,'bep-env','bep-env','2020-10-15 15:15:26'),
+(115,'bind','bind','2020-10-15 15:15:26'),
+(116,'bind-dyndb-ldap','bind-dyndb-ldap','2020-10-15 15:15:26'),
+(117,'binutils','binutils','2020-10-15 15:15:26'),
+(118,'biosdevname','biosdevname','2020-10-15 15:15:26'),
+(119,'bison','bison','2020-10-15 15:15:26'),
+(120,'bitmap-fonts','bitmap-fonts','2020-10-15 15:15:26'),
+(121,'blivet-gui','blivet-gui','2020-10-15 15:15:26'),
+(122,'blktrace','blktrace','2020-10-15 15:15:26'),
+(123,'bltk','bltk','2020-10-15 15:15:26'),
+(124,'bluez','bluez','2020-10-15 15:15:26'),
+(125,'bolt','bolt','2020-10-15 15:15:26'),
+(126,'boom-boot','boom-boot','2020-10-15 15:15:26'),
+(127,'boost','boost','2020-10-15 15:15:26'),
+(128,'bpg-fonts','bpg-fonts','2020-10-15 15:15:26'),
+(129,'bridge-utils','bridge-utils','2020-10-15 15:15:26'),
+(130,'brltty','brltty','2020-10-15 15:15:26'),
+(131,'brotli','brotli','2020-10-15 15:15:26'),
+(132,'bsp_mce_print','bsp_mce_print','2020-10-15 15:15:26'),
+(133,'btrfs-progs','btrfs-progs','2020-10-15 15:15:26'),
+(134,'bubblewrap','bubblewrap','2020-10-15 15:15:26'),
+(135,'busybox','busybox','2020-10-15 15:15:26'),
+(136,'byacc','byacc','2020-10-15 15:15:26'),
+(137,'bzip2','bzip2','2020-10-15 15:15:26'),
+(138,'c-ares','c-ares','2020-10-15 15:15:26'),
+(139,'ca-certificates','ca-certificates','2020-10-15 15:15:26'),
+(140,'cachefilesd','cachefilesd','2020-10-15 15:15:26'),
+(141,'cairo','cairo','2020-10-15 15:15:26'),
+(142,'cairomm','cairomm','2020-10-15 15:15:26'),
+(143,'cal10n','cal10n','2020-10-15 15:15:26'),
+(144,'capstone','capstone','2020-10-15 15:15:26'),
+(145,'caribou','caribou','2020-10-15 15:15:26'),
+(146,'ccid','ccid','2020-10-15 15:15:26'),
+(147,'cdparanoia','cdparanoia','2020-10-15 15:15:26'),
+(148,'cdrkit','cdrkit','2020-10-15 15:15:26'),
+(149,'celt051','celt051','2020-10-15 15:15:26'),
+(150,'centos-kernel','centos-kernel','2020-10-15 15:15:26'),
+(151,'ceph','ceph','2020-10-15 15:15:26'),
+(152,'ceph-common','ceph-common','2020-10-15 15:15:26'),
+(153,'certmonger','certmonger','2020-10-15 15:15:26'),
+(154,'cgdcbxd','cgdcbxd','2020-10-15 15:15:26'),
+(155,'check','check','2020-10-15 15:15:26'),
+(156,'checkpolicy','checkpolicy','2020-10-15 15:15:26'),
+(157,'cheese','cheese','2020-10-15 15:15:26'),
+(158,'chkconfig','chkconfig','2020-10-15 15:15:26'),
+(159,'chrony','chrony','2020-10-15 15:15:26'),
+(160,'chrpath','chrpath','2020-10-15 15:15:26'),
+(161,'cifs-utils','cifs-utils','2020-10-15 15:15:26'),
+(162,'cim-schema','cim-schema','2020-10-15 15:15:26'),
+(163,'cjkuni-ukai-fonts','cjkuni-ukai-fonts','2020-10-15 15:15:26'),
+(164,'cjkuni-uming-fonts','cjkuni-uming-fonts','2020-10-15 15:15:26'),
+(165,'clang','clang','2020-10-15 15:15:26'),
+(166,'cldr-emoji-annotation','cldr-emoji-annotation','2020-10-15 15:15:26'),
+(167,'clevis','clevis','2020-10-15 15:15:26'),
+(168,'clibcni','clibcni','2020-10-15 15:15:26'),
+(169,'cloud-init','cloud-init','2020-10-15 15:15:26'),
+(170,'cloud-utils','cloud-utils','2020-10-15 15:15:26'),
+(171,'clucene','clucene','2020-10-15 15:15:26'),
+(172,'clutter','clutter','2020-10-15 15:15:26'),
+(173,'clutter-gst2','clutter-gst2','2020-10-15 15:15:26'),
+(174,'clutter-gst3','clutter-gst3','2020-10-15 15:15:26'),
+(175,'clutter-gtk','clutter-gtk','2020-10-15 15:15:26'),
+(176,'cmake','cmake','2020-10-15 15:15:26'),
+(177,'cmocka','cmocka','2020-10-15 15:15:26'),
+(178,'cmpi-bindings','cmpi-bindings','2020-10-15 15:15:26'),
+(179,'cockpit','cockpit','2020-10-15 15:15:26'),
+(180,'codemodel','codemodel','2020-10-15 15:15:26'),
+(181,'cogl','cogl','2020-10-15 15:15:26'),
+(182,'color-filesystem','color-filesystem','2020-10-15 15:15:26'),
+(183,'colord','colord','2020-10-15 15:15:26'),
+(184,'colord-gtk','colord-gtk','2020-10-15 15:15:26'),
+(185,'compat-PackageKit08','compat-PackageKit08','2020-10-15 15:15:26'),
+(186,'compat-cogl114','compat-cogl114','2020-10-15 15:15:26'),
+(187,'compat-colord10','compat-colord10','2020-10-15 15:15:26'),
+(188,'compat-dapl','compat-dapl','2020-10-15 15:15:26'),
+(189,'compat-db','compat-db','2020-10-15 15:15:26'),
+(190,'compat-gcc-44','compat-gcc-44','2020-10-15 15:15:26'),
+(191,'compat-glibc','compat-glibc','2020-10-15 15:15:26'),
+(192,'compat-gnome-bluetooth38','compat-gnome-bluetooth38','2020-10-15 15:15:26'),
+(193,'compat-gnome-desktop38','compat-gnome-desktop38','2020-10-15 15:15:26'),
+(194,'compat-libcap1','compat-libcap1','2020-10-15 15:15:26'),
+(195,'compat-libgdata013','compat-libgdata013','2020-10-15 15:15:26'),
+(196,'compat-libgfortran-41','compat-libgfortran-41','2020-10-15 15:15:26'),
+(197,'compat-libgweather3','compat-libgweather3','2020-10-15 15:15:26'),
+(198,'compat-libtiff3','compat-libtiff3','2020-10-15 15:15:26'),
+(199,'compat-openldap','compat-openldap','2020-10-15 15:15:26'),
+(200,'compat-opensm-libs','compat-opensm-libs','2020-10-15 15:15:26'),
+(201,'compat-openssl10','compat-openssl10','2020-10-15 15:15:26'),
+(202,'compat-upower09','compat-upower09','2020-10-15 15:15:26'),
+(203,'comps-extras','comps-extras','2020-10-15 15:15:26'),
+(204,'config-minios','config-minios','2020-10-15 15:15:26'),
+(205,'config-os-cloudedge','config-os-cloudedge','2020-10-15 15:15:26'),
+(206,'config-os-euler','config-os-euler','2020-10-15 15:15:26'),
+(207,'config-os-pangea','config-os-pangea','2020-10-15 15:15:26'),
+(208,'conman','conman','2020-10-15 15:15:26'),
+(209,'conntrack-tools','conntrack-tools','2020-10-15 15:15:26'),
+(210,'console-setup','console-setup','2020-10-15 15:15:26'),
+(211,'container-resourced','container-resourced','2020-10-15 15:15:26'),
+(212,'container-selinux','container-selinux','2020-10-15 15:15:26'),
+(213,'containerd','containerd','2020-10-15 15:15:26'),
+(214,'control-center','control-center','2020-10-15 15:15:26'),
+(215,'convmv','convmv','2020-10-15 15:15:26'),
+(216,'coolkey','coolkey','2020-10-15 15:15:26'),
+(217,'copy-jdk-configs','copy-jdk-configs','2020-10-15 15:15:26'),
+(218,'coreutils','coreutils','2020-10-15 15:15:26'),
+(219,'cpio','cpio','2020-10-15 15:15:26'),
+(220,'cppcheck','cppcheck','2020-10-15 15:15:26'),
+(221,'cppunit','cppunit','2020-10-15 15:15:26'),
+(222,'cracklib','cracklib','2020-10-15 15:15:27'),
+(223,'crash','crash','2020-10-15 15:15:27'),
+(224,'crash-gcore-command','crash-gcore-command','2020-10-15 15:15:27'),
+(225,'crash-trace-command','crash-trace-command','2020-10-15 15:15:27'),
+(226,'crda','crda','2020-10-15 15:15:27'),
+(227,'createrepo','createrepo','2020-10-15 15:15:27'),
+(228,'createrepo_c','createrepo_c','2020-10-15 15:15:27'),
+(229,'crid','crid,kubernetes','2020-10-15 15:15:27'),
+(230,'criu','criu','2020-10-15 15:15:27'),
+(231,'cronie','cronie','2020-10-15 15:15:27'),
+(232,'crontabs','crontabs','2020-10-15 15:15:27'),
+(233,'crypto-policies','crypto-policies','2020-10-15 15:15:27'),
+(234,'crypto-utils','crypto-utils','2020-10-15 15:15:27'),
+(235,'cryptsetup','cryptsetup','2020-10-15 15:15:27'),
+(236,'cscope','cscope','2020-10-15 15:15:27'),
+(237,'ctags','ctags','2020-10-15 15:15:27'),
+(238,'culmus-fonts','culmus-fonts','2020-10-15 15:15:27'),
+(239,'cups','cups','2020-10-15 15:15:27'),
+(240,'cups-filters','cups-filters','2020-10-15 15:15:27'),
+(241,'cups-pk-helper','cups-pk-helper','2020-10-15 15:15:27'),
+(242,'curl','curl','2020-10-15 15:15:27'),
+(243,'custodia','custodia','2020-10-15 15:15:27'),
+(244,'custom_build_tool','custom_build_tool','2020-10-15 15:15:27'),
+(245,'cvs','cvs','2020-10-15 15:15:27'),
+(246,'cyrus-sasl','cyrus-sasl','2020-10-15 15:15:27'),
+(247,'dapl','dapl','2020-10-15 15:15:27'),
+(248,'dblatex','dblatex','2020-10-15 15:15:27'),
+(249,'dbus','dbus','2020-10-15 15:15:27'),
+(250,'dbus-glib','dbus-glib','2020-10-15 15:15:27'),
+(251,'dbus-python','dbus-python','2020-10-15 15:15:27'),
+(252,'dbusmenu-qt','dbusmenu-qt','2020-10-15 15:15:27'),
+(253,'dbxtool','dbxtool','2020-10-15 15:15:27'),
+(254,'dconf','dconf','2020-10-15 15:15:27'),
+(255,'dconf-editor','dconf-editor','2020-10-15 15:15:27'),
+(256,'dejagnu','dejagnu','2020-10-15 15:15:27'),
+(257,'dejavu-fonts','dejavu-fonts','2020-10-15 15:15:27'),
+(258,'deltarpm','deltarpm','2020-10-15 15:15:27'),
+(259,'desktop-file-utils','desktop-file-utils','2020-10-15 15:15:27'),
+(260,'device-mapper-multipath','device-mapper-multipath','2020-10-15 15:15:27'),
+(261,'device-mapper-persistent-data','device-mapper-persistent-data','2020-10-15 15:15:27'),
+(262,'devtoolset-6','devtoolset-6','2020-10-15 15:15:27'),
+(263,'dhcp','dhcp','2020-10-15 15:15:27'),
+(264,'dialog','dialog','2020-10-15 15:15:27'),
+(265,'diffstat','diffstat','2020-10-15 15:15:27'),
+(266,'diffutils','diffutils','2020-10-15 15:15:27'),
+(267,'digest-list-tools','digest-list-tools','2020-10-15 15:15:27'),
+(268,'ding-libs','ding-libs','2020-10-15 15:15:27'),
+(269,'disk-partition','disk-partition','2020-10-15 15:15:27'),
+(270,'dleyna-connector-dbus','dleyna-connector-dbus','2020-10-15 15:15:27'),
+(271,'dleyna-core','dleyna-core','2020-10-15 15:15:27'),
+(272,'dleyna-server','dleyna-server','2020-10-15 15:15:27'),
+(273,'dliso-config','dliso-config','2020-10-15 15:15:27'),
+(274,'dlm','dlm','2020-10-15 15:15:27'),
+(275,'dmidecode','dmidecode','2020-10-15 15:15:27'),
+(276,'dmraid','dmraid','2020-10-15 15:15:27'),
+(277,'dnf','dnf','2020-10-15 15:15:27'),
+(278,'dnf-plugins-core','dnf-plugins-core','2020-10-15 15:15:27'),
+(279,'dnsmasq','dnsmasq','2020-10-15 15:15:27'),
+(280,'dnssec-trigger','dnssec-trigger','2020-10-15 15:15:27'),
+(281,'docbook-dtds','docbook-dtds','2020-10-15 15:15:27'),
+(282,'docbook-simple','docbook-simple','2020-10-15 15:15:27'),
+(283,'docbook-slides','docbook-slides','2020-10-15 15:15:27'),
+(284,'docbook-style-dsssl','docbook-style-dsssl','2020-10-15 15:15:27'),
+(285,'docbook-style-xsl','docbook-style-xsl','2020-10-15 15:15:27'),
+(286,'docbook-utils','docbook-utils','2020-10-15 15:15:27'),
+(287,'docbook2X','docbook2X','2020-10-15 15:15:27'),
+(288,'docbook5-schemas','docbook5-schemas','2020-10-15 15:15:27'),
+(289,'docbook5-style-xsl','docbook5-style-xsl','2020-10-15 15:15:27'),
+(290,'docker','docker','2020-10-15 15:15:27'),
+(291,'docker-anaconda-addon','docker-anaconda-addon','2020-10-15 15:15:27'),
+(292,'docker-engine','docker-engine,engine','2020-10-15 15:15:27'),
+(293,'docker-engine-selinux','docker-engine-selinux','2020-10-15 15:15:27'),
+(294,'docker-lxcfs-toolkit','docker-lxcfs-toolkit','2020-10-15 15:15:27'),
+(295,'docker-monitor','docker-monitor','2020-10-15 15:15:27'),
+(296,'docker-runc','docker-runc','2020-10-15 15:15:27'),
+(297,'docker-toolkit','docker-toolkit','2020-10-15 15:15:27'),
+(298,'docker-tools','docker-tools','2020-10-15 15:15:27'),
+(299,'dom4j','dom4j','2020-10-15 15:15:27'),
+(300,'dos2unix','dos2unix','2020-10-15 15:15:27'),
+(301,'dosfstools','dosfstools','2020-10-15 15:15:27'),
+(302,'dotconf','dotconf','2020-10-15 15:15:27'),
+(303,'doxygen','doxygen','2020-10-15 15:15:27'),
+(304,'dpdk','DPDK,data_plane_development_kit','2020-10-15 15:15:27'),
+(305,'dracut','dracut','2020-10-15 15:15:27'),
+(306,'dropwatch','dropwatch','2020-10-15 15:15:27'),
+(307,'drpm','drpm','2020-10-15 15:15:27'),
+(308,'dstat','dstat','2020-10-15 15:15:27'),
+(309,'dtc','dtc','2020-10-15 15:15:27'),
+(310,'dump','dump','2020-10-15 15:15:27'),
+(311,'dump_mem_tool','dump_mem_tool','2020-10-15 15:15:27'),
+(312,'dumpet','dumpet','2020-10-15 15:15:27'),
+(313,'dvgrab','dvgrab','2020-10-15 15:15:27'),
+(314,'dwz','dwz','2020-10-15 15:15:27'),
+(315,'dyninst','dyninst','2020-10-15 15:15:27'),
+(316,'e2fsprogs','e2fsprogs','2020-10-15 15:15:27'),
+(317,'easymock2','easymock2','2020-10-15 15:15:27'),
+(318,'ebtables','ebtables','2020-10-15 15:15:27'),
+(319,'ecj','ecj','2020-10-15 15:15:27'),
+(320,'ed','ed','2020-10-15 15:15:27'),
+(321,'edac-utils','edac-utils','2020-10-15 15:15:27'),
+(322,'edk2','edk2','2020-10-15 15:15:27'),
+(323,'efi-rpm-macros','efi-rpm-macros','2020-10-15 15:15:27'),
+(324,'efibootmgr','efibootmgr','2020-10-15 15:15:27'),
+(325,'efivar','efivar','2020-10-15 15:15:27'),
+(326,'egl-wayland','egl-wayland','2020-10-15 15:15:27'),
+(327,'eglexternalplatform','eglexternalplatform','2020-10-15 15:15:27'),
+(328,'elara','elara,etcd','2020-10-15 15:15:27'),
+(329,'elfutils','elfutils','2020-10-15 15:15:27'),
+(330,'elinks','elinks','2020-10-15 15:15:27'),
+(331,'emacs','emacs','2020-10-15 15:15:27'),
+(332,'emacs-auctex','emacs-auctex','2020-10-15 15:15:27'),
+(333,'empathy','empathy','2020-10-15 15:15:27'),
+(334,'enchant','enchant','2020-10-15 15:15:27'),
+(335,'enscript','enscript','2020-10-15 15:15:27'),
+(336,'environment-modules','environment-modules','2020-10-15 15:15:27'),
+(337,'eog','eog','2020-10-15 15:15:27'),
+(338,'epydoc','epydoc','2020-10-15 15:15:27'),
+(339,'esc','esc','2020-10-15 15:15:27'),
+(340,'espeak','espeak','2020-10-15 15:15:27'),
+(341,'esyslog','esyslog','2020-10-15 15:15:27'),
+(342,'etcd','etcd','2020-10-15 15:15:28'),
+(343,'ethtool','ethtool','2020-10-15 15:15:28'),
+(344,'euca2ools','euca2ools','2020-10-15 15:15:28'),
+(345,'euler-discv6','euler-discv6','2020-10-15 15:15:28'),
+(346,'euler-tpm2-la','euler-tpm2-la','2020-10-15 15:15:28'),
+(347,'euler-tpm2-tools','euler-tpm2-tools','2020-10-15 15:15:28'),
+(348,'euleros-32bit','euleros-32bit','2020-10-15 15:15:28'),
+(349,'euleros-certdb','euleros-certdb','2020-10-15 15:15:28'),
+(350,'euleros-config','euleros-config','2020-10-15 15:15:28'),
+(351,'euleros-config-9032','euleros-config-9032','2020-10-15 15:15:28'),
+(352,'euleros-hwcompat','euleros-hwcompat','2020-10-15 15:15:28'),
+(353,'euleros-indexhtml','euleros-indexhtml','2020-10-15 15:15:28'),
+(354,'euleros-klp-template','euleros-klp-template','2020-10-15 15:15:28'),
+(355,'euleros-latest-release','euleros-latest-release','2020-10-15 15:15:28'),
+(356,'euleros-logos','euleros-logos','2020-10-15 15:15:28'),
+(357,'euleros-logrotate','euleros-logrotate','2020-10-15 15:15:28'),
+(358,'euleros-lsb','euleros-lsb','2020-10-15 15:15:28'),
+(359,'euleros-release','euleros-release','2020-10-15 15:15:28'),
+(360,'euleros-repos','euleros-repos','2020-10-15 15:15:28'),
+(361,'euleros-toolkit','euleros-toolkit','2020-10-15 15:15:28'),
+(362,'euleros-upgrade','euleros-upgrade','2020-10-15 15:15:28'),
+(363,'euleros_chroot','euleros_chroot','2020-10-15 15:15:28'),
+(364,'evince','evince','2020-10-15 15:15:28'),
+(365,'evolution','evolution','2020-10-15 15:15:28'),
+(366,'evolution-data-server','evolution-data-server','2020-10-15 15:15:28'),
+(367,'exempi','exempi','2020-10-15 15:15:28'),
+(368,'exiv2','exiv2','2020-10-15 15:15:28'),
+(369,'expat','expat','2020-10-15 15:15:28'),
+(370,'expect','expect','2020-10-15 15:15:28'),
+(371,'fabtests','fabtests','2020-10-15 15:15:28'),
+(372,'fakechroot','fakechroot','2020-10-15 15:15:28'),
+(373,'fakeroot','fakeroot','2020-10-15 15:15:28'),
+(374,'farstream','farstream','2020-10-15 15:15:28'),
+(375,'farstream02','farstream02','2020-10-15 15:15:28'),
+(376,'fcoe-utils','fcoe-utils','2020-10-15 15:15:28'),
+(377,'fdupes','fdupes','2020-10-15 15:15:28'),
+(378,'fence-agents','fence-agents','2020-10-15 15:15:28'),
+(379,'fence-virt','fence-virt','2020-10-15 15:15:28'),
+(380,'festival','festival','2020-10-15 15:15:28'),
+(381,'festival-freebsoft-utils','festival-freebsoft-utils','2020-10-15 15:15:28'),
+(382,'fetchmail','fetchmail','2020-10-15 15:15:28'),
+(383,'fftw','fftw','2020-10-15 15:15:28'),
+(384,'file','file','2020-10-15 15:15:28'),
+(385,'file-roller','file-roller','2020-10-15 15:15:28'),
+(386,'filebench','filebench','2020-10-15 15:15:28'),
+(387,'filesystem','filesystem','2020-10-15 15:15:28'),
+(388,'findutils','findutils','2020-10-15 15:15:28'),
+(389,'finger','finger','2020-10-15 15:15:28'),
+(390,'fipscheck','fipscheck','2020-10-15 15:15:28'),
+(391,'firebird','firebird','2020-10-15 15:15:28'),
+(392,'firewalld','firewalld','2020-10-15 15:15:28'),
+(393,'firstboot','firstboot','2020-10-15 15:15:28'),
+(394,'flac','flac','2020-10-15 15:15:28'),
+(395,'flatpak','flatpak','2020-10-15 15:15:28'),
+(396,'flex','flex','2020-10-15 15:15:28'),
+(397,'flite','flite','2020-10-15 15:15:28'),
+(398,'fltk','fltk','2020-10-15 15:15:28'),
+(399,'folks','folks','2020-10-15 15:15:28'),
+(400,'fontawesome-fonts','fontawesome-fonts','2020-10-15 15:15:28'),
+(401,'fontconfig','fontconfig','2020-10-15 15:15:28'),
+(402,'fontforge','fontforge','2020-10-15 15:15:28'),
+(403,'fontpackages','fontpackages','2020-10-15 15:15:28'),
+(404,'fonts-rpm-macros','fonts-rpm-macros','2020-10-15 15:15:28'),
+(405,'fonts-tweak-tool','fonts-tweak-tool','2020-10-15 15:15:28'),
+(406,'foomatic','foomatic','2020-10-15 15:15:28'),
+(407,'foomatic-db','foomatic-db','2020-10-15 15:15:28'),
+(408,'fpaste','fpaste','2020-10-15 15:15:28'),
+(409,'fpc-srpm-macros','fpc-srpm-macros','2020-10-15 15:15:28'),
+(410,'fprintd','fprintd','2020-10-15 15:15:28'),
+(411,'freeglut','freeglut','2020-10-15 15:15:28'),
+(412,'freeipmi','freeipmi','2020-10-15 15:15:28'),
+(413,'freeradius','freeradius','2020-10-15 15:15:28'),
+(414,'freerdp','freerdp','2020-10-15 15:15:28'),
+(415,'freetds','freetds','2020-10-15 15:15:28'),
+(416,'freetype','freetype','2020-10-15 15:15:28'),
+(417,'frei0r-plugins','frei0r-plugins','2020-10-15 15:15:28'),
+(418,'fribidi','fribidi','2020-10-15 15:15:28'),
+(419,'fros','fros','2020-10-15 15:15:28'),
+(420,'fsync','fsync','2020-10-15 15:15:28'),
+(421,'ftp','ftp','2020-10-15 15:15:28'),
+(422,'fuse','fuse','2020-10-15 15:15:28'),
+(423,'fuseiso','fuseiso','2020-10-15 15:15:28'),
+(424,'future','future','2020-10-15 15:15:28'),
+(425,'fwupd','fwupd','2020-10-15 15:15:28'),
+(426,'fwupdate','fwupdate','2020-10-15 15:15:28'),
+(427,'fxload','fxload','2020-10-15 15:15:28'),
+(428,'fxload-2008_10_13-14','fxload-2008_10_13-14','2020-10-15 15:15:28'),
+(429,'gamin','gamin','2020-10-15 15:15:28'),
+(430,'gavl','gavl','2020-10-15 15:15:28'),
+(431,'gawk','gawk','2020-10-15 15:15:28'),
+(432,'gazelle','gazelle','2020-10-15 15:15:28'),
+(433,'gc','gc','2020-10-15 15:15:28'),
+(434,'gcab','gcab','2020-10-15 15:15:28'),
+(435,'gcc','gcc','2020-10-15 15:15:28'),
+(436,'gcc-libraries','gcc-libraries','2020-10-15 15:15:28'),
+(437,'gcc_secure','gcc_secure','2020-10-15 15:15:28'),
+(438,'gconf-editor','gconf-editor','2020-10-15 15:15:28'),
+(439,'gcr','gcr','2020-10-15 15:15:28'),
+(440,'gd','gd,GD Graphics Library (LibGD),libgd','2020-10-15 15:15:28'),
+(441,'gdb','gdb','2020-10-15 15:15:28'),
+(442,'gdbm','gdbm','2020-10-15 15:15:28'),
+(443,'gdisk','gdisk','2020-10-15 15:15:28'),
+(444,'gdk-pixbuf2','gdk-pixbuf2','2020-10-15 15:15:28'),
+(445,'gdm','gdm','2020-10-15 15:15:28'),
+(446,'gedit','gedit','2020-10-15 15:15:28'),
+(447,'gedit-plugins','gedit-plugins','2020-10-15 15:15:28'),
+(448,'gegl','gegl','2020-10-15 15:15:28'),
+(449,'gegl04','gegl04','2020-10-15 15:15:28'),
+(450,'gengetopt','gengetopt','2020-10-15 15:15:28'),
+(451,'geoclue','geoclue','2020-10-15 15:15:28'),
+(452,'geoclue2','geoclue2','2020-10-15 15:15:28'),
+(453,'geocode-glib','geocode-glib','2020-10-15 15:15:28'),
+(454,'geolite2','geolite2','2020-10-15 15:15:28'),
+(455,'geronimo-annotation','geronimo-annotation','2020-10-15 15:15:28'),
+(456,'geronimo-jms','geronimo-jms','2020-10-15 15:15:28'),
+(457,'geronimo-jta','geronimo-jta','2020-10-15 15:15:28'),
+(458,'getcpuusage','getcpuusage','2020-10-15 15:15:28'),
+(459,'gettext','gettext','2020-10-15 15:15:28'),
+(460,'gflags','gflags','2020-10-15 15:15:28'),
+(461,'gfs2-utils','gfs2-utils','2020-10-15 15:15:28'),
+(462,'ghc-srpm-macros','ghc-srpm-macros','2020-10-15 15:15:28'),
+(463,'ghostscript','ghostscript,ghostscript_ghostxps','2020-10-15 15:15:29'),
+(464,'ghostscript-chinese','ghostscript-chinese','2020-10-15 15:15:29'),
+(465,'ghostscript-fonts','ghostscript-fonts','2020-10-15 15:15:29'),
+(466,'giflib','giflib','2020-10-15 15:15:29'),
+(467,'gimp','gimp','2020-10-15 15:15:29'),
+(468,'gimp-data-extras','gimp-data-extras','2020-10-15 15:15:29'),
+(469,'gimp-help','gimp-help','2020-10-15 15:15:29'),
+(470,'git','git','2020-10-15 15:15:29'),
+(471,'gjs','gjs','2020-10-15 15:15:29'),
+(472,'gl-manpages','gl-manpages','2020-10-15 15:15:29'),
+(473,'glade','glade','2020-10-15 15:15:29'),
+(474,'glassfish-dtd-parser','glassfish-dtd-parser','2020-10-15 15:15:29'),
+(475,'glassfish-fastinfoset','glassfish-fastinfoset','2020-10-15 15:15:29'),
+(476,'glassfish-jaxb','glassfish-jaxb','2020-10-15 15:15:29'),
+(477,'glassfish-jaxb-api','glassfish-jaxb-api','2020-10-15 15:15:29'),
+(478,'glew','glew','2020-10-15 15:15:29'),
+(479,'glib','glib','2020-10-15 15:15:29'),
+(480,'glib-networking','glib-networking','2020-10-15 15:15:29'),
+(481,'glib2','glib2','2020-10-15 15:15:29'),
+(482,'glibc','glibc','2020-10-15 15:15:29'),
+(483,'glibc32','glibc32','2020-10-15 15:15:29'),
+(484,'glibmm24','glibmm24','2020-10-15 15:15:29'),
+(485,'glusterfs','glusterfs','2020-10-15 15:15:29'),
+(486,'gmime30','gmime30','2020-10-15 15:15:29'),
+(487,'gmp','gmp','2020-10-15 15:15:29'),
+(488,'gnat-srpm-macros','gnat-srpm-macros','2020-10-15 15:15:29'),
+(489,'gnome-abrt','gnome-abrt','2020-10-15 15:15:29'),
+(490,'gnome-autoar','gnome-autoar','2020-10-15 15:15:29'),
+(491,'gnome-backgrounds','gnome-backgrounds','2020-10-15 15:15:29'),
+(492,'gnome-bluetooth','gnome-bluetooth','2020-10-15 15:15:29'),
+(493,'gnome-boxes','gnome-boxes','2020-10-15 15:15:29'),
+(494,'gnome-calculator','gnome-calculator','2020-10-15 15:15:29'),
+(495,'gnome-clocks','gnome-clocks','2020-10-15 15:15:29'),
+(496,'gnome-color-manager','gnome-color-manager','2020-10-15 15:15:29'),
+(497,'gnome-common','gnome-common','2020-10-15 15:15:29'),
+(498,'gnome-contacts','gnome-contacts','2020-10-15 15:15:29'),
+(499,'gnome-control-center','gnome-control-center','2020-10-15 15:15:29'),
+(500,'gnome-desktop3','gnome-desktop3','2020-10-15 15:15:29'),
+(501,'gnome-devel-docs','gnome-devel-docs','2020-10-15 15:15:29'),
+(502,'gnome-dictionary','gnome-dictionary','2020-10-15 15:15:29'),
+(503,'gnome-disk-utility','gnome-disk-utility','2020-10-15 15:15:29'),
+(504,'gnome-doc-utils','gnome-doc-utils','2020-10-15 15:15:29'),
+(505,'gnome-documents','gnome-documents','2020-10-15 15:15:29'),
+(506,'gnome-font-viewer','gnome-font-viewer','2020-10-15 15:15:29'),
+(507,'gnome-getting-started-docs','gnome-getting-started-docs','2020-10-15 15:15:29'),
+(508,'gnome-icon-theme','gnome-icon-theme','2020-10-15 15:15:29'),
+(509,'gnome-icon-theme-extras','gnome-icon-theme-extras','2020-10-15 15:15:29'),
+(510,'gnome-icon-theme-symbolic','gnome-icon-theme-symbolic','2020-10-15 15:15:29'),
+(511,'gnome-initial-setup','gnome-initial-setup','2020-10-15 15:15:29'),
+(512,'gnome-keyring','gnome-keyring','2020-10-15 15:15:29'),
+(513,'gnome-menus','gnome-menus','2020-10-15 15:15:29'),
+(514,'gnome-online-accounts','gnome-online-accounts','2020-10-15 15:15:29'),
+(515,'gnome-online-miners','gnome-online-miners','2020-10-15 15:15:29'),
+(516,'gnome-packagekit','gnome-packagekit','2020-10-15 15:15:29'),
+(517,'gnome-python2','gnome-python2','2020-10-15 15:15:29'),
+(518,'gnome-screenshot','gnome-screenshot','2020-10-15 15:15:29'),
+(519,'gnome-session','gnome-session','2020-10-15 15:15:29'),
+(520,'gnome-settings-daemon','gnome-settings-daemon','2020-10-15 15:15:29'),
+(521,'gnome-shell','gnome-shell','2020-10-15 15:15:29'),
+(522,'gnome-shell-extensions','gnome-shell-extensions','2020-10-15 15:15:29'),
+(523,'gnome-software','gnome-software','2020-10-15 15:15:29'),
+(524,'gnome-system-log','gnome-system-log','2020-10-15 15:15:29'),
+(525,'gnome-system-monitor','gnome-system-monitor','2020-10-15 15:15:29'),
+(526,'gnome-terminal','gnome-terminal','2020-10-15 15:15:29'),
+(527,'gnome-themes-standard','gnome-themes-standard','2020-10-15 15:15:29'),
+(528,'gnome-tweak-tool','gnome-tweak-tool','2020-10-15 15:15:29'),
+(529,'gnome-user-docs','gnome-user-docs','2020-10-15 15:15:29'),
+(530,'gnome-vfs2','gnome-vfs2','2020-10-15 15:15:29'),
+(531,'gnome-video-effects','gnome-video-effects','2020-10-15 15:15:29'),
+(532,'gnome-weather','gnome-weather','2020-10-15 15:15:29'),
+(533,'gnote','gnote','2020-10-15 15:15:29'),
+(534,'gnu-efi','gnu-efi','2020-10-15 15:15:29'),
+(535,'gnu-free-fonts','gnu-free-fonts','2020-10-15 15:15:29'),
+(536,'gnulib','gnulib','2020-10-15 15:15:29'),
+(537,'gnupg2','gnupg2,gnupg','2020-10-15 15:15:29'),
+(538,'gnuplot','gnuplot','2020-10-15 15:15:29'),
+(539,'gnutls','gnutls','2020-10-15 15:15:29'),
+(540,'go-srpm-macros','go-srpm-macros','2020-10-15 15:15:29'),
+(541,'gobject-introspection','gobject-introspection','2020-10-15 15:15:29'),
+(542,'golang','golang,go','2020-10-15 15:15:29'),
+(543,'golang-github-cpuguy83-go-md2man','golang-github-cpuguy83-go-md2man','2020-10-15 15:15:29'),
+(544,'golang-github-russross-blackfriday','golang-github-russross-blackfriday','2020-10-15 15:15:29'),
+(545,'gom','gom','2020-10-15 15:15:29'),
+(546,'google-crosextra-caladea-fonts','google-crosextra-caladea-fonts','2020-10-15 15:15:29'),
+(547,'google-crosextra-carlito-fonts','google-crosextra-carlito-fonts','2020-10-15 15:15:29'),
+(548,'google-droid-fonts','google-droid-fonts','2020-10-15 15:15:29'),
+(549,'google-noto-cjk-fonts','google-noto-cjk-fonts','2020-10-15 15:15:29'),
+(550,'google-noto-emoji-fonts','google-noto-emoji-fonts','2020-10-15 15:15:29'),
+(551,'google-noto-fonts','google-noto-fonts','2020-10-15 15:15:29'),
+(552,'google-roboto-slab-fonts','google-roboto-slab-fonts','2020-10-15 15:15:29'),
+(553,'gperf','gperf','2020-10-15 15:15:29'),
+(554,'gperftools','gperftools','2020-10-15 15:15:29'),
+(555,'gpgme','gpgme','2020-10-15 15:15:29'),
+(556,'gphoto2','gphoto2','2020-10-15 15:15:29'),
+(557,'gpm','gpm','2020-10-15 15:15:29'),
+(558,'graphite2','graphite2','2020-10-15 15:15:29'),
+(559,'graphviz','graphviz','2020-10-15 15:15:29'),
+(560,'grep','grep','2020-10-15 15:15:29'),
+(561,'grilo','grilo','2020-10-15 15:15:29'),
+(562,'grilo-plugins','grilo-plugins','2020-10-15 15:15:29'),
+(563,'groff','groff','2020-10-15 15:15:29'),
+(564,'grpc','grpc','2020-10-15 15:15:29'),
+(565,'grub2','grub2','2020-10-15 15:15:29'),
+(566,'grubby','grubby','2020-10-15 15:15:30'),
+(567,'gsettings-desktop-schemas','gsettings-desktop-schemas','2020-10-15 15:15:30'),
+(568,'gsl','gsl','2020-10-15 15:15:30'),
+(569,'gsm','gsm','2020-10-15 15:15:30'),
+(570,'gsound','gsound','2020-10-15 15:15:30'),
+(571,'gspell','gspell','2020-10-15 15:15:30'),
+(572,'gssdp','gssdp','2020-10-15 15:15:30'),
+(573,'gssproxy','gssproxy','2020-10-15 15:15:30'),
+(574,'gstreamer','gstreamer','2020-10-15 15:15:30'),
+(575,'gstreamer-plugins-bad-free','gstreamer-plugins-bad-free','2020-10-15 15:15:30'),
+(576,'gstreamer-plugins-base','gstreamer-plugins-base','2020-10-15 15:15:30'),
+(577,'gstreamer-plugins-good','gstreamer-plugins-good','2020-10-15 15:15:30'),
+(578,'gstreamer1','gstreamer1','2020-10-15 15:15:30'),
+(579,'gstreamer1-plugins-bad-free','gstreamer1-plugins-bad-free','2020-10-15 15:15:30'),
+(580,'gstreamer1-plugins-base','gstreamer1-plugins-base','2020-10-15 15:15:30'),
+(581,'gstreamer1-plugins-good','gstreamer1-plugins-good','2020-10-15 15:15:30'),
+(582,'gstreamer1-plugins-ugly-free','gstreamer1-plugins-ugly-free','2020-10-15 15:15:30'),
+(583,'gtest','gtest','2020-10-15 15:15:30'),
+(584,'gtk-doc','gtk-doc','2020-10-15 15:15:30'),
+(585,'gtk-vnc','gtk-vnc','2020-10-15 15:15:30'),
+(586,'gtk2','gtk2','2020-10-15 15:15:30'),
+(587,'gtk3','gtk3','2020-10-15 15:15:30'),
+(588,'gtkhtml3','gtkhtml3','2020-10-15 15:15:30'),
+(589,'gtkmm24','gtkmm24','2020-10-15 15:15:30'),
+(590,'gtkmm30','gtkmm30','2020-10-15 15:15:30'),
+(591,'gtksourceview3','gtksourceview3','2020-10-15 15:15:30'),
+(592,'gtkspell','gtkspell','2020-10-15 15:15:30'),
+(593,'gtkspell3','gtkspell3','2020-10-15 15:15:30'),
+(594,'gubbi-fonts','gubbi-fonts','2020-10-15 15:15:30'),
+(595,'gucharmap','gucharmap','2020-10-15 15:15:30'),
+(596,'guile','guile','2020-10-15 15:15:30'),
+(597,'gupnp','gupnp','2020-10-15 15:15:30'),
+(598,'gupnp-av','gupnp-av','2020-10-15 15:15:30'),
+(599,'gupnp-dlna','gupnp-dlna','2020-10-15 15:15:30'),
+(600,'gupnp-igd','gupnp-igd','2020-10-15 15:15:30'),
+(601,'gutenprint','gutenprint','2020-10-15 15:15:30'),
+(602,'gv','gv','2020-10-15 15:15:30'),
+(603,'gvfs','gvfs','2020-10-15 15:15:30'),
+(604,'gzip','gzip','2020-10-15 15:15:30'),
+(605,'hamcrest','hamcrest','2020-10-15 15:15:30'),
+(606,'haproxy','haproxy','2020-10-15 15:15:30'),
+(607,'hardlink','hardlink','2020-10-15 15:15:30'),
+(608,'harfbuzz','harfbuzz','2020-10-15 15:15:30'),
+(609,'haveged','haveged','2020-10-15 15:15:30'),
+(610,'hawkey','hawkey','2020-10-15 15:15:30'),
+(611,'hawtjni','hawtjni','2020-10-15 15:15:30'),
+(612,'hdparm','hdparm','2020-10-15 15:15:30'),
+(613,'help2man','help2man','2020-10-15 15:15:30'),
+(614,'hesiod','hesiod','2020-10-15 15:15:30'),
+(615,'hexedit','hexedit','2020-10-15 15:15:30'),
+(616,'hicolor-icon-theme','hicolor-icon-theme','2020-10-15 15:15:30'),
+(617,'highlight','highlight','2020-10-15 15:15:30'),
+(618,'hiredis','hiredis','2020-10-15 15:15:30'),
+(619,'hivex','hivex','2020-10-15 15:15:30'),
+(620,'hmaccalc','hmaccalc','2020-10-15 15:15:30'),
+(621,'hostname','hostname','2020-10-15 15:15:30'),
+(622,'hotpatchrec','hotpatchrec','2020-10-15 15:15:30'),
+(623,'hplip','hplip','2020-10-15 15:15:30'),
+(624,'hsqldb','hsqldb','2020-10-15 15:15:30'),
+(625,'http-parser','http-parser','2020-10-15 15:15:30'),
+(626,'httpcomponents-client','httpcomponents-client','2020-10-15 15:15:30'),
+(627,'httpcomponents-core','httpcomponents-core','2020-10-15 15:15:30'),
+(628,'httpd','httpd,http_server','2020-10-15 15:15:30'),
+(629,'hungtask_monitor','hungtask_monitor','2020-10-15 15:15:30'),
+(630,'hungtask_monitor-kmod','hungtask_monitor-kmod','2020-10-15 15:15:30'),
+(631,'hunspell','hunspell','2020-10-15 15:15:30'),
+(632,'hunspell-de','hunspell-de','2020-10-15 15:15:30'),
+(633,'hunspell-en','hunspell-en','2020-10-15 15:15:30'),
+(634,'hwdata','hwdata','2020-10-15 15:15:30'),
+(635,'hwinfo','hwinfo','2020-10-15 15:15:30'),
+(636,'hwloc','hwloc','2020-10-15 15:15:30'),
+(637,'hws-apitools','hws-apitools','2020-10-15 15:15:30'),
+(638,'hyphen','hyphen','2020-10-15 15:15:30'),
+(639,'i2c-tools','i2c-tools','2020-10-15 15:15:30'),
+(640,'i40e','i40e','2020-10-15 15:15:30'),
+(641,'i40evf','i40evf','2020-10-15 15:15:30'),
+(642,'iSulad','iSulad','2020-10-15 15:15:30'),
+(643,'iSulad-img','iSulad-img','2020-10-15 15:15:30'),
+(644,'iSulad-kit','iSulad-kit','2020-10-15 15:15:30'),
+(645,'iavf','iavf','2020-10-15 15:15:30'),
+(646,'ibus','ibus','2020-10-15 15:15:30'),
+(647,'ibus-chewing','ibus-chewing','2020-10-15 15:15:30'),
+(648,'ibus-hangul','ibus-hangul','2020-10-15 15:15:30'),
+(649,'ibus-kkc','ibus-kkc','2020-10-15 15:15:30'),
+(650,'ibus-libpinyin','ibus-libpinyin','2020-10-15 15:15:30'),
+(651,'ibus-m17n','ibus-m17n','2020-10-15 15:15:30'),
+(652,'ibus-qt','ibus-qt','2020-10-15 15:15:30'),
+(653,'ibus-rawcode','ibus-rawcode','2020-10-15 15:15:30'),
+(654,'ibus-sayura','ibus-sayura','2020-10-15 15:15:30'),
+(655,'ibus-table','ibus-table','2020-10-15 15:15:30'),
+(656,'ibus-table-chinese','ibus-table-chinese','2020-10-15 15:15:30'),
+(657,'ibus-typing-booster','ibus-typing-booster','2020-10-15 15:15:30'),
+(658,'ibutils','ibutils','2020-10-15 15:15:30'),
+(659,'icedtea-web','icedtea-web','2020-10-15 15:15:30'),
+(660,'icfg','icfg','2020-10-15 15:15:30'),
+(661,'icoutils','icoutils','2020-10-15 15:15:30'),
+(662,'icu','icu','2020-10-15 15:15:30'),
+(663,'iio-sensor-proxy','iio-sensor-proxy','2020-10-15 15:15:30'),
+(664,'ilmbase','ilmbase','2020-10-15 15:15:30'),
+(665,'im-chooser','im-chooser','2020-10-15 15:15:30'),
+(666,'ima-evm-utils','ima-evm-utils','2020-10-15 15:15:30'),
+(667,'image-slim','image-slim','2020-10-15 15:15:30'),
+(668,'imake','imake','2020-10-15 15:15:30'),
+(669,'imsettings','imsettings','2020-10-15 15:15:30'),
+(670,'indent','indent','2020-10-15 15:15:30'),
+(671,'infiniband-diags','infiniband-diags','2020-10-15 15:15:30'),
+(672,'infinipath-psm','infinipath-psm','2020-10-15 15:15:30'),
+(673,'iniparser','iniparser','2020-10-15 15:15:30'),
+(674,'initial-setup','initial-setup','2020-10-15 15:15:30'),
+(675,'initscripts','initscripts','2020-10-15 15:15:30'),
+(676,'inkscape','inkscape','2020-10-15 15:15:30'),
+(677,'install-scripts','install-scripts','2020-10-15 15:15:30'),
+(678,'install-systemd-data','install-systemd-data','2020-10-15 15:15:30'),
+(679,'intltool','intltool','2020-10-15 15:15:30'),
+(680,'iok','iok','2020-10-15 15:15:30'),
+(681,'iotop','iotop','2020-10-15 15:15:30'),
+(682,'iowatcher','iowatcher','2020-10-15 15:15:30'),
+(683,'ip-conflict-check','ip-conflict-check','2020-10-15 15:15:30'),
+(684,'ip-ext','ip-ext','2020-10-15 15:15:30'),
+(685,'ipa','ipa','2020-10-15 15:15:30'),
+(686,'ipa-gothic-fonts','ipa-gothic-fonts','2020-10-15 15:15:30'),
+(687,'ipa-mincho-fonts','ipa-mincho-fonts','2020-10-15 15:15:31'),
+(688,'ipa-pgothic-fonts','ipa-pgothic-fonts','2020-10-15 15:15:31'),
+(689,'ipa-pmincho-fonts','ipa-pmincho-fonts','2020-10-15 15:15:31'),
+(690,'ipcalc','ipcalc','2020-10-15 15:15:31'),
+(691,'ipmitool','ipmitool','2020-10-15 15:15:31'),
+(692,'ipnat','ipnat','2020-10-15 15:15:31'),
+(693,'iproute','iproute','2020-10-15 15:15:31'),
+(694,'iprutils','iprutils','2020-10-15 15:15:31'),
+(695,'ipset','ipset','2020-10-15 15:15:31'),
+(696,'ipsilon','ipsilon','2020-10-15 15:15:31'),
+(697,'iptables','iptables','2020-10-15 15:15:31'),
+(698,'iptraf-ng','iptraf-ng','2020-10-15 15:15:31'),
+(699,'iptstate','iptstate','2020-10-15 15:15:31'),
+(700,'iputils','iputils','2020-10-15 15:15:31'),
+(701,'ipvs-fnat','ipvs-fnat','2020-10-15 15:15:31'),
+(702,'ipvs-toa','ipvs-toa','2020-10-15 15:15:31'),
+(703,'ipvsadm','ipvsadm','2020-10-15 15:15:31'),
+(704,'ipxe','ipxe','2020-10-15 15:15:31'),
+(705,'irqbalance','irqbalance','2020-10-15 15:15:31'),
+(706,'irssi','irssi','2020-10-15 15:15:31'),
+(707,'iscsi-initiator-utils','iscsi-initiator-utils','2020-10-15 15:15:31'),
+(708,'isdn4k-utils','isdn4k-utils','2020-10-15 15:15:31'),
+(709,'isns-utils','isns-utils','2020-10-15 15:15:31'),
+(710,'iso-codes','iso-codes','2020-10-15 15:15:31'),
+(711,'isocut','isocut','2020-10-15 15:15:31'),
+(712,'isomd5sum','isomd5sum','2020-10-15 15:15:31'),
+(713,'isorelax','isorelax','2020-10-15 15:15:31'),
+(714,'istack-commons','istack-commons','2020-10-15 15:15:31'),
+(715,'isula-build','isula-build','2020-10-15 15:15:31'),
+(716,'itstool','itstool','2020-10-15 15:15:31'),
+(717,'ivtv-firmware','ivtv-firmware','2020-10-15 15:15:31'),
+(718,'iw','iw','2020-10-15 15:15:31'),
+(719,'jackson','jackson','2020-10-15 15:15:31'),
+(720,'jakarta-commons-httpclient','jakarta-commons-httpclient','2020-10-15 15:15:31'),
+(721,'jakarta-oro','jakarta-oro','2020-10-15 15:15:31'),
+(722,'jakarta-taglibs-standard','jakarta-taglibs-standard','2020-10-15 15:15:31'),
+(723,'jansi','jansi','2020-10-15 15:15:31'),
+(724,'jansi-native','jansi-native','2020-10-15 15:15:31'),
+(725,'jansson','jansson','2020-10-15 15:15:31'),
+(726,'jasper','jasper','2020-10-15 15:15:31'),
+(727,'java-atk-wrapper','java-atk-wrapper','2020-10-15 15:15:31'),
+(728,'javamail','javamail','2020-10-15 15:15:31'),
+(729,'javapackages-tools','javapackages-tools','2020-10-15 15:15:31'),
+(730,'javassist','javassist','2020-10-15 15:15:31'),
+(731,'jaxen','jaxen','2020-10-15 15:15:31'),
+(732,'jbig2dec','jbig2dec','2020-10-15 15:15:31'),
+(733,'jbigkit','jbigkit','2020-10-15 15:15:31'),
+(734,'jboss-annotations-1.1-api','jboss-annotations-1.1-api','2020-10-15 15:15:31'),
+(735,'jdom','jdom','2020-10-15 15:15:31'),
+(736,'jemalloc','jemalloc','2020-10-15 15:15:31'),
+(737,'jettison','jettison','2020-10-15 15:15:31'),
+(738,'jfsutils','jfsutils','2020-10-15 15:15:31'),
+(739,'jimtcl','jimtcl','2020-10-15 15:15:31'),
+(740,'jing-trang','jing-trang','2020-10-15 15:15:31'),
+(741,'jline','jline','2020-10-15 15:15:31'),
+(742,'jna','jna','2020-10-15 15:15:31'),
+(743,'joda-convert','joda-convert','2020-10-15 15:15:31'),
+(744,'joda-time','joda-time','2020-10-15 15:15:31'),
+(745,'jomolhari-fonts','jomolhari-fonts','2020-10-15 15:15:31'),
+(746,'jose','jose','2020-10-15 15:15:31'),
+(747,'jq','jq','2020-10-15 15:15:31'),
+(748,'js','js','2020-10-15 15:15:31'),
+(749,'json-c','json-c','2020-10-15 15:15:31'),
+(750,'json-glib','json-glib','2020-10-15 15:15:31'),
+(751,'jsoncpp','jsoncpp','2020-10-15 15:15:31'),
+(752,'jsr-311','jsr-311','2020-10-15 15:15:31'),
+(753,'jss','jss','2020-10-15 15:15:31'),
+(754,'junit','junit','2020-10-15 15:15:31'),
+(755,'kacst-fonts','kacst-fonts','2020-10-15 15:15:31'),
+(756,'kata-agent','kata-agent','2020-10-15 15:15:31'),
+(757,'kata-containers','kata-containers','2020-10-15 15:15:31'),
+(758,'kata-proxy','kata-proxy','2020-10-15 15:15:31'),
+(759,'kata-runtime','kata-runtime','2020-10-15 15:15:31'),
+(760,'kata-shim','kata-shim','2020-10-15 15:15:31'),
+(761,'kbd','kbd','2020-10-15 15:15:31'),
+(762,'kbox','kbox','2020-10-15 15:15:31'),
+(763,'kbox-kmod','kbox-kmod','2020-10-15 15:15:31'),
+(764,'kde-settings','kde-settings','2020-10-15 15:15:31'),
+(765,'kdump-anaconda-addon','kdump-anaconda-addon','2020-10-15 15:15:31'),
+(766,'keepalived','keepalived','2020-10-15 15:15:31'),
+(767,'kernel','kernel,github_linux_kernel,Linux Kernel','2020-10-15 15:15:31'),
+(768,'kernel-4.18','kernel-4.18,Linux Kernel,github_linux_kernel','2020-10-15 15:15:31'),
+(769,'kexec-tools','kexec-tools','2020-10-15 15:15:31'),
+(770,'keybinder3','keybinder3','2020-10-15 15:15:31'),
+(771,'keyutils','keyutils','2020-10-15 15:15:31'),
+(772,'khmeros-fonts','khmeros-fonts','2020-10-15 15:15:31'),
+(773,'kiwi','kiwi','2020-10-15 15:15:31'),
+(774,'kiwi-dlimage','kiwi-dlimage','2020-10-15 15:15:31'),
+(775,'kiwi-template-euleros','kiwi-template-euleros','2020-10-15 15:15:31'),
+(776,'kmem_analyzer_tools','kmem_analyzer_tools','2020-10-15 15:15:31'),
+(777,'kmod','kmod','2020-10-15 15:15:31'),
+(778,'kmod-megaraid_sas','kmod-megaraid_sas','2020-10-15 15:15:31'),
+(779,'konkretcmpi','konkretcmpi','2020-10-15 15:15:31'),
+(780,'kpatch','kpatch','2020-10-15 15:15:31'),
+(781,'krb5','krb5,Kerberos 5 (krb5)','2020-10-15 15:15:31'),
+(782,'ksh','ksh','2020-10-15 15:15:31'),
+(783,'kurdit-unikurd-web-fonts','kurdit-unikurd-web-fonts','2020-10-15 15:15:31'),
+(784,'kyua','kyua','2020-10-15 15:15:31'),
+(785,'langpacks','langpacks','2020-10-15 15:15:31'),
+(786,'langtable','langtable','2020-10-15 15:15:31'),
+(787,'lapack','lapack','2020-10-15 15:15:31'),
+(788,'lasso','lasso','2020-10-15 15:15:31'),
+(789,'latencytop','latencytop','2020-10-15 15:15:31'),
+(790,'latex2html','latex2html','2020-10-15 15:15:31'),
+(791,'lato-fonts','lato-fonts','2020-10-15 15:15:31'),
+(792,'latrace','latrace','2020-10-15 15:15:31'),
+(793,'lcms2','lcms2','2020-10-15 15:15:31'),
+(794,'lcr','lcr','2020-10-15 15:15:31'),
+(795,'ldapjdk','ldapjdk','2020-10-15 15:15:31'),
+(796,'ldns','ldns','2020-10-15 15:15:31'),
+(797,'ledmon','ledmon','2020-10-15 15:15:31'),
+(798,'less','less','2020-10-15 15:15:31'),
+(799,'leveldb','leveldb','2020-10-15 15:15:31'),
+(800,'lftp','lftp','2020-10-15 15:15:31'),
+(801,'libICE','libICE','2020-10-15 15:15:31'),
+(802,'libIDL','libIDL','2020-10-15 15:15:31'),
+(803,'libSM','libSM','2020-10-15 15:15:31'),
+(804,'libX11','libX11,libx11','2020-10-15 15:15:31'),
+(805,'libXScrnSaver','libXScrnSaver','2020-10-15 15:15:32'),
+(806,'libXau','libXau','2020-10-15 15:15:32'),
+(807,'libXaw','libXaw','2020-10-15 15:15:32'),
+(808,'libXcomposite','libXcomposite','2020-10-15 15:15:32'),
+(809,'libXcursor','libXcursor','2020-10-15 15:15:32'),
+(810,'libXdamage','libXdamage','2020-10-15 15:15:32'),
+(811,'libXdmcp','libXdmcp','2020-10-15 15:15:32'),
+(812,'libXext','libXext','2020-10-15 15:15:32'),
+(813,'libXfixes','libXfixes','2020-10-15 15:15:32'),
+(814,'libXfont2','libXfont2','2020-10-15 15:15:32'),
+(815,'libXft','libXft','2020-10-15 15:15:32'),
+(816,'libXi','libXi','2020-10-15 15:15:32'),
+(817,'libXinerama','libXinerama','2020-10-15 15:15:32'),
+(818,'libXmu','libXmu','2020-10-15 15:15:32'),
+(819,'libXp','libXp','2020-10-15 15:15:32'),
+(820,'libXpm','libXpm','2020-10-15 15:15:32'),
+(821,'libXrandr','libXrandr','2020-10-15 15:15:32'),
+(822,'libXrender','libXrender','2020-10-15 15:15:32'),
+(823,'libXres','libXres','2020-10-15 15:15:32'),
+(824,'libXt','libXt','2020-10-15 15:15:32'),
+(825,'libXtst','libXtst','2020-10-15 15:15:32'),
+(826,'libXv','libXv','2020-10-15 15:15:32'),
+(827,'libXvMC','libXvMC','2020-10-15 15:15:32'),
+(828,'libXxf86dga','libXxf86dga','2020-10-15 15:15:32'),
+(829,'libXxf86misc','libXxf86misc','2020-10-15 15:15:32'),
+(830,'libXxf86vm','libXxf86vm','2020-10-15 15:15:32'),
+(831,'libabw','libabw','2020-10-15 15:15:32'),
+(832,'libaio','libaio','2020-10-15 15:15:32'),
+(833,'libalarm','libalarm','2020-10-15 15:15:32'),
+(834,'libao','libao','2020-10-15 15:15:32'),
+(835,'libappindicator','libappindicator','2020-10-15 15:15:32'),
+(836,'libappstream-glib','libappstream-glib','2020-10-15 15:15:32'),
+(837,'libarchive','libarchive','2020-10-15 15:15:32'),
+(838,'libart_lgpl','libart_lgpl','2020-10-15 15:15:32'),
+(839,'libassuan','libassuan','2020-10-15 15:15:32'),
+(840,'libasyncns','libasyncns','2020-10-15 15:15:32'),
+(841,'libatasmart','libatasmart','2020-10-15 15:15:32'),
+(842,'libatomic_ops','libatomic_ops','2020-10-15 15:15:32'),
+(843,'libavc1394','libavc1394','2020-10-15 15:15:32'),
+(844,'libblockdev','libblockdev','2020-10-15 15:15:32'),
+(845,'libbluedevil','libbluedevil','2020-10-15 15:15:32'),
+(846,'libbluray','libbluray','2020-10-15 15:15:32'),
+(847,'libbonobo','libbonobo','2020-10-15 15:15:32'),
+(848,'libbonoboui','libbonoboui','2020-10-15 15:15:32'),
+(849,'libburn','libburn','2020-10-15 15:15:32'),
+(850,'libbytesize','libbytesize','2020-10-15 15:15:32'),
+(851,'libcacard','libcacard','2020-10-15 15:15:32'),
+(852,'libcanberra','libcanberra','2020-10-15 15:15:32'),
+(853,'libcap','libcap','2020-10-15 15:15:32'),
+(854,'libcap-ng','libcap-ng','2020-10-15 15:15:32'),
+(855,'libcdio','libcdio','2020-10-15 15:15:32'),
+(856,'libcdio-paranoia','libcdio-paranoia','2020-10-15 15:15:32'),
+(857,'libcdr','libcdr','2020-10-15 15:15:32'),
+(858,'libcgroup','libcgroup','2020-10-15 15:15:32'),
+(859,'libchamplain','libchamplain','2020-10-15 15:15:32'),
+(860,'libchewing','libchewing','2020-10-15 15:15:32'),
+(861,'libclc','libclc','2020-10-15 15:15:32'),
+(862,'libcmis','libcmis','2020-10-15 15:15:32'),
+(863,'libcmpiutil','libcmpiutil','2020-10-15 15:15:32'),
+(864,'libcomps','libcomps','2020-10-15 15:15:32'),
+(865,'libconfig','libconfig','2020-10-15 15:15:32'),
+(866,'libcroco','libcroco','2020-10-15 15:15:32'),
+(867,'libcryptui','libcryptui','2020-10-15 15:15:32'),
+(868,'libdaemon','libdaemon','2020-10-15 15:15:32'),
+(869,'libdatrie','libdatrie','2020-10-15 15:15:32'),
+(870,'libdb','libdb,Berkeley DB','2020-10-15 15:15:32'),
+(871,'libdbi','libdbi','2020-10-15 15:15:32'),
+(872,'libdbi-drivers','libdbi-drivers','2020-10-15 15:15:32'),
+(873,'libdbusmenu','libdbusmenu','2020-10-15 15:15:32'),
+(874,'libdmapsharing','libdmapsharing','2020-10-15 15:15:32'),
+(875,'libdmx','libdmx','2020-10-15 15:15:32'),
+(876,'libdnet','libdnet','2020-10-15 15:15:32'),
+(877,'libdnf','libdnf','2020-10-15 15:15:32'),
+(878,'libdrm','libdrm','2020-10-15 15:15:32'),
+(879,'libdv','libdv','2020-10-15 15:15:32'),
+(880,'libdvdnav','libdvdnav','2020-10-15 15:15:32'),
+(881,'libdvdread','libdvdread','2020-10-15 15:15:32'),
+(882,'libdwarf','libdwarf','2020-10-15 15:15:32'),
+(883,'libeasyfc','libeasyfc','2020-10-15 15:15:32'),
+(884,'libecap','libecap','2020-10-15 15:15:32'),
+(885,'libedit','libedit','2020-10-15 15:15:32'),
+(886,'libell','libell','2020-10-15 15:15:32'),
+(887,'libepoxy','libepoxy','2020-10-15 15:15:32'),
+(888,'liberation-fonts','liberation-fonts','2020-10-15 15:15:32'),
+(889,'libesmtp','libesmtp','2020-10-15 15:15:32'),
+(890,'libestr','libestr','2020-10-15 15:15:32'),
+(891,'libetonyek','libetonyek','2020-10-15 15:15:32'),
+(892,'libev','libev','2020-10-15 15:15:32'),
+(893,'libevdev','libevdev','2020-10-15 15:15:32'),
+(894,'libevent','libevent','2020-10-15 15:15:32'),
+(895,'libevhtp','libevhtp','2020-10-15 15:15:32'),
+(896,'libexif','libexif','2020-10-15 15:15:32'),
+(897,'libexttextcat','libexttextcat','2020-10-15 15:15:32'),
+(898,'libfabric','libfabric','2020-10-15 15:15:32'),
+(899,'libfastjson','libfastjson','2020-10-15 15:15:32'),
+(900,'libffi','libffi','2020-10-15 15:15:32'),
+(901,'libfontenc','libfontenc','2020-10-15 15:15:32'),
+(902,'libfprint','libfprint','2020-10-15 15:15:32'),
+(903,'libfreehand','libfreehand','2020-10-15 15:15:32'),
+(904,'libgcrypt','libgcrypt','2020-10-15 15:15:32'),
+(905,'libgdata','libgdata','2020-10-15 15:15:32'),
+(906,'libgdither','libgdither','2020-10-15 15:15:32'),
+(907,'libgee','libgee','2020-10-15 15:15:32'),
+(908,'libgee06','libgee06','2020-10-15 15:15:32'),
+(909,'libgepub','libgepub','2020-10-15 15:15:32'),
+(910,'libgexiv2','libgexiv2','2020-10-15 15:15:32'),
+(911,'libgit2','libgit2','2020-10-15 15:15:32'),
+(912,'libgit2-glib','libgit2-glib','2020-10-15 15:15:32'),
+(913,'libglade2','libglade2','2020-10-15 15:15:32'),
+(914,'libglvnd','libglvnd','2020-10-15 15:15:32'),
+(915,'libgnome','libgnome','2020-10-15 15:15:32'),
+(916,'libgnome-keyring','libgnome-keyring','2020-10-15 15:15:32'),
+(917,'libgnomecanvas','libgnomecanvas','2020-10-15 15:15:32'),
+(918,'libgnomekbd','libgnomekbd','2020-10-15 15:15:32'),
+(919,'libgnomeui','libgnomeui','2020-10-15 15:15:32'),
+(920,'libgovirt','libgovirt','2020-10-15 15:15:32'),
+(921,'libgpg-error','libgpg-error','2020-10-15 15:15:32'),
+(922,'libgphoto2','libgphoto2','2020-10-15 15:15:32'),
+(923,'libgsf','libgsf','2020-10-15 15:15:32'),
+(924,'libgtop2','libgtop2','2020-10-15 15:15:32'),
+(925,'libgudev','libgudev','2020-10-15 15:15:32'),
+(926,'libguestfs','libguestfs','2020-10-15 15:15:33'),
+(927,'libguestfs-winsupport','libguestfs-winsupport','2020-10-15 15:15:33'),
+(928,'libgusb','libgusb','2020-10-15 15:15:33'),
+(929,'libgweather','libgweather','2020-10-15 15:15:33'),
+(930,'libgxps','libgxps','2020-10-15 15:15:33'),
+(931,'libhangul','libhangul','2020-10-15 15:15:33'),
+(932,'libhbaapi','libhbaapi','2020-10-15 15:15:33'),
+(933,'libhbalinux','libhbalinux','2020-10-15 15:15:33'),
+(934,'libhif','libhif','2020-10-15 15:15:33'),
+(935,'libhugetlbfs','libhugetlbfs','2020-10-15 15:15:33'),
+(936,'libibcommon','libibcommon','2020-10-15 15:15:33'),
+(937,'libibmad','libibmad','2020-10-15 15:15:33'),
+(938,'libical','libical','2020-10-15 15:15:33'),
+(939,'libidn','libidn','2020-10-15 15:15:33'),
+(940,'libidn2','libidn2','2020-10-15 15:15:33'),
+(941,'libiec61883','libiec61883','2020-10-15 15:15:33'),
+(942,'libieee1284','libieee1284','2020-10-15 15:15:33'),
+(943,'libijs','libijs','2020-10-15 15:15:33'),
+(944,'libimagequant','libimagequant','2020-10-15 15:15:33'),
+(945,'libimobiledevice','libimobiledevice','2020-10-15 15:15:33'),
+(946,'libindicator','libindicator','2020-10-15 15:15:33'),
+(947,'libinput','libinput','2020-10-15 15:15:33'),
+(948,'libiodbc','libiodbc','2020-10-15 15:15:33'),
+(949,'libipt','libipt','2020-10-15 15:15:33'),
+(950,'libiptcdata','libiptcdata','2020-10-15 15:15:33'),
+(951,'libiscsi','libiscsi','2020-10-15 15:15:33'),
+(952,'libisofs','libisofs','2020-10-15 15:15:33'),
+(953,'libjpeg-turbo','libjpeg-turbo','2020-10-15 15:15:33'),
+(954,'libkcapi','libkcapi','2020-10-15 15:15:33'),
+(955,'libkeepalive','libkeepalive','2020-10-15 15:15:33'),
+(956,'libkkc','libkkc','2020-10-15 15:15:33'),
+(957,'libksba','libksba','2020-10-15 15:15:33'),
+(958,'liblangtag','liblangtag','2020-10-15 15:15:33'),
+(959,'libldb','libldb','2020-10-15 15:15:33'),
+(960,'libldm','libldm','2020-10-15 15:15:33'),
+(961,'liblockfile','liblockfile','2020-10-15 15:15:33'),
+(962,'liblognorm','liblognorm','2020-10-15 15:15:33'),
+(963,'liblouis','liblouis','2020-10-15 15:15:33'),
+(964,'libmatchbox','libmatchbox','2020-10-15 15:15:33'),
+(965,'libmaxminddb','libmaxminddb','2020-10-15 15:15:33'),
+(966,'libmbim','libmbim','2020-10-15 15:15:33'),
+(967,'libmediaart','libmediaart','2020-10-15 15:15:33'),
+(968,'libmemcached','libmemcached','2020-10-15 15:15:33'),
+(969,'libmetalink','libmetalink','2020-10-15 15:15:33'),
+(970,'libmicrohttpd','libmicrohttpd','2020-10-15 15:15:33'),
+(971,'libmikmod','libmikmod','2020-10-15 15:15:33'),
+(972,'libmng','libmng','2020-10-15 15:15:33'),
+(973,'libmnl','libmnl','2020-10-15 15:15:33'),
+(974,'libmodman','libmodman','2020-10-15 15:15:33'),
+(975,'libmodulemd','libmodulemd','2020-10-15 15:15:33'),
+(976,'libmpc','libmpc','2020-10-15 15:15:33'),
+(977,'libmpcdec','libmpcdec','2020-10-15 15:15:33'),
+(978,'libmsn','libmsn','2020-10-15 15:15:33'),
+(979,'libmspack','libmspack','2020-10-15 15:15:33'),
+(980,'libmspub','libmspub','2020-10-15 15:15:33'),
+(981,'libmtp','libmtp','2020-10-15 15:15:33'),
+(982,'libmusicbrainz5','libmusicbrainz5','2020-10-15 15:15:33'),
+(983,'libmwaw','libmwaw','2020-10-15 15:15:33'),
+(984,'libndp','libndp','2020-10-15 15:15:33'),
+(985,'libnet','libnet','2020-10-15 15:15:33'),
+(986,'libnetfilter_conntrack','libnetfilter_conntrack','2020-10-15 15:15:33'),
+(987,'libnetfilter_cthelper','libnetfilter_cthelper','2020-10-15 15:15:33'),
+(988,'libnetfilter_cttimeout','libnetfilter_cttimeout','2020-10-15 15:15:33'),
+(989,'libnetfilter_queue','libnetfilter_queue','2020-10-15 15:15:33'),
+(990,'libnetwork','libnetwork','2020-10-15 15:15:33'),
+(991,'libnfnetlink','libnfnetlink','2020-10-15 15:15:33'),
+(992,'libnfs','libnfs','2020-10-15 15:15:33'),
+(993,'libnfsidmap','libnfsidmap','2020-10-15 15:15:33'),
+(994,'libnftnl','libnftnl','2020-10-15 15:15:33'),
+(995,'libnice','libnice','2020-10-15 15:15:33'),
+(996,'libnl','libnl','2020-10-15 15:15:33'),
+(997,'libnl3','libnl3','2020-10-15 15:15:33'),
+(998,'libnotify','libnotify','2020-10-15 15:15:33'),
+(999,'libnsl2','libnsl2','2020-10-15 15:15:33'),
+(1000,'liboauth','liboauth','2020-10-15 15:15:33'),
+(1001,'libodfgen','libodfgen','2020-10-15 15:15:33'),
+(1002,'libofa','libofa','2020-10-15 15:15:33'),
+(1003,'libogg','libogg','2020-10-15 15:15:33'),
+(1004,'libomxil-bellagio','libomxil-bellagio','2020-10-15 15:15:33'),
+(1005,'libopenraw','libopenraw','2020-10-15 15:15:33'),
+(1006,'liborcus','liborcus','2020-10-15 15:15:33'),
+(1007,'libosinfo','libosinfo','2020-10-15 15:15:33'),
+(1008,'libotf','libotf','2020-10-15 15:15:33'),
+(1009,'libpagemaker','libpagemaker','2020-10-15 15:15:33'),
+(1010,'libpaper','libpaper','2020-10-15 15:15:33'),
+(1011,'libpcap','libpcap','2020-10-15 15:15:33'),
+(1012,'libpciaccess','libpciaccess','2020-10-15 15:15:33'),
+(1013,'libpeas','libpeas','2020-10-15 15:15:33'),
+(1014,'libpfm','libpfm','2020-10-15 15:15:33'),
+(1015,'libpinyin','libpinyin','2020-10-15 15:15:33'),
+(1016,'libpipeline','libpipeline','2020-10-15 15:15:33'),
+(1017,'libplist','libplist','2020-10-15 15:15:33'),
+(1018,'libpng','libpng','2020-10-15 15:15:33'),
+(1019,'libpng12','libpng12','2020-10-15 15:15:33'),
+(1020,'libproxy','libproxy','2020-10-15 15:15:33'),
+(1021,'libpsl','libpsl','2020-10-15 15:15:33'),
+(1022,'libpsm2','libpsm2','2020-10-15 15:15:33'),
+(1023,'libpwquality','libpwquality','2020-10-15 15:15:33'),
+(1024,'libqb','libqb','2020-10-15 15:15:33'),
+(1025,'libqmi','libqmi','2020-10-15 15:15:33'),
+(1026,'libquvi','libquvi','2020-10-15 15:15:33'),
+(1027,'libquvi-scripts','libquvi-scripts','2020-10-15 15:15:33'),
+(1028,'librabbitmq','librabbitmq','2020-10-15 15:15:33'),
+(1029,'libraw1394','libraw1394','2020-10-15 15:15:33'),
+(1030,'librdkafka','librdkafka','2020-10-15 15:15:33'),
+(1031,'librelp','librelp','2020-10-15 15:15:33'),
+(1032,'libreoffice','libreoffice','2020-10-15 15:15:33'),
+(1033,'librepo','librepo','2020-10-15 15:15:33'),
+(1034,'libreport','libreport','2020-10-15 15:15:33'),
+(1035,'libreswan','libreswan','2020-10-15 15:15:33'),
+(1036,'librevenge','librevenge','2020-10-15 15:15:33'),
+(1037,'librsvg2','librsvg2','2020-10-15 15:15:33'),
+(1038,'libsamplerate','libsamplerate','2020-10-15 15:15:33'),
+(1039,'libsass','libsass','2020-10-15 15:15:33'),
+(1040,'libseccomp','libseccomp','2020-10-15 15:15:33'),
+(1041,'libsecret','libsecret','2020-10-15 15:15:33'),
+(1042,'libselinux','libselinux','2020-10-15 15:15:33'),
+(1043,'libsemanage','libsemanage','2020-10-15 15:15:33'),
+(1044,'libsepol','libsepol','2020-10-15 15:15:33'),
+(1045,'libserf','libserf','2020-10-15 15:15:34'),
+(1046,'libsexy','libsexy','2020-10-15 15:15:34'),
+(1047,'libshout','libshout','2020-10-15 15:15:34'),
+(1048,'libsigc++20','libsigc++20','2020-10-15 15:15:34'),
+(1049,'libsigsegv','libsigsegv','2020-10-15 15:15:34'),
+(1050,'libsmi','libsmi','2020-10-15 15:15:34'),
+(1051,'libsndfile','libsndfile','2020-10-15 15:15:34'),
+(1052,'libsodium','libsodium','2020-10-15 15:15:34'),
+(1053,'libsolv','libsolv','2020-10-15 15:15:34'),
+(1054,'libsoup','libsoup','2020-10-15 15:15:34'),
+(1055,'libspectre','libspectre','2020-10-15 15:15:34'),
+(1056,'libspiro','libspiro','2020-10-15 15:15:34'),
+(1057,'libsrtp','libsrtp','2020-10-15 15:15:34'),
+(1058,'libssh','libssh','2020-10-15 15:15:34'),
+(1059,'libssh2','libssh2','2020-10-15 15:15:34'),
+(1060,'libstaroffice','libstaroffice','2020-10-15 15:15:34'),
+(1061,'libstemmer','libstemmer','2020-10-15 15:15:34'),
+(1062,'libstorage-mgr','libstorage-mgr','2020-10-15 15:15:34'),
+(1063,'libstorage-mgr-dbg','libstorage-mgr-dbg','2020-10-15 15:15:34'),
+(1064,'libstorage-uio','libstorage-uio','2020-10-15 15:15:34'),
+(1065,'libstorage-uio-dbg','libstorage-uio-dbg','2020-10-15 15:15:34'),
+(1066,'libstoragemgmt','libstoragemgmt','2020-10-15 15:15:34'),
+(1067,'libtalloc','libtalloc','2020-10-15 15:15:34'),
+(1068,'libtar','libtar','2020-10-15 15:15:34'),
+(1069,'libtasn1','libtasn1','2020-10-15 15:15:34'),
+(1070,'libtdb','libtdb','2020-10-15 15:15:34'),
+(1071,'libteam','libteam','2020-10-15 15:15:34'),
+(1072,'libtevent','libtevent','2020-10-15 15:15:34'),
+(1073,'libthai','libthai','2020-10-15 15:15:34'),
+(1074,'libtheora','libtheora','2020-10-15 15:15:34'),
+(1075,'libtiff','libtiff','2020-10-15 15:15:34'),
+(1076,'libtimezonemap','libtimezonemap','2020-10-15 15:15:34'),
+(1077,'libtirpc','libtirpc','2020-10-15 15:15:34'),
+(1078,'libtomcrypt','libtomcrypt','2020-10-15 15:15:34'),
+(1079,'libtommath','libtommath','2020-10-15 15:15:34'),
+(1080,'libtool','libtool','2020-10-15 15:15:34'),
+(1081,'libtranslit','libtranslit','2020-10-15 15:15:34'),
+(1082,'libunistring','libunistring','2020-10-15 15:15:34'),
+(1083,'libunwind','libunwind','2020-10-15 15:15:34'),
+(1084,'libusb','libusb','2020-10-15 15:15:34'),
+(1085,'libusbmuxd','libusbmuxd','2020-10-15 15:15:34'),
+(1086,'libusbx','libusbx','2020-10-15 15:15:34'),
+(1087,'libuser','libuser','2020-10-15 15:15:34'),
+(1088,'libutempter','libutempter','2020-10-15 15:15:34'),
+(1089,'libuv','libuv','2020-10-15 15:15:34'),
+(1090,'libva','libva','2020-10-15 15:15:34'),
+(1091,'libvdpau','libvdpau','2020-10-15 15:15:34'),
+(1092,'libverto','libverto','2020-10-15 15:15:34'),
+(1093,'libvirt','libvirt,Libvirt','2020-10-15 15:15:34'),
+(1094,'libvirt-glib','libvirt-glib','2020-10-15 15:15:34'),
+(1095,'libvirt-python','libvirt-python','2020-10-15 15:15:34'),
+(1096,'libvisio','libvisio','2020-10-15 15:15:34'),
+(1097,'libvisual','libvisual','2020-10-15 15:15:34'),
+(1098,'libvncserver','libvncserver','2020-10-15 15:15:34'),
+(1099,'libvoikko','libvoikko','2020-10-15 15:15:34'),
+(1100,'libvorbis','libvorbis','2020-10-15 15:15:34'),
+(1101,'libvpx','libvpx','2020-10-15 15:15:34'),
+(1102,'libwacom','libwacom','2020-10-15 15:15:34'),
+(1103,'libwebp','libwebp','2020-10-15 15:15:34'),
+(1104,'libwebsockets','libwebsockets','2020-10-15 15:15:34'),
+(1105,'libwmf','libwmf','2020-10-15 15:15:34'),
+(1106,'libwnck3','libwnck3','2020-10-15 15:15:34'),
+(1107,'libwpd','libwpd','2020-10-15 15:15:34'),
+(1108,'libwpg','libwpg','2020-10-15 15:15:34'),
+(1109,'libwps','libwps','2020-10-15 15:15:34'),
+(1110,'libwvstreams','libwvstreams','2020-10-15 15:15:34'),
+(1111,'libx86emu','libx86emu','2020-10-15 15:15:34'),
+(1112,'libxcb','libxcb','2020-10-15 15:15:34'),
+(1113,'libxcrypt','libxcrypt','2020-10-15 15:15:34'),
+(1114,'libxkbcommon','libxkbcommon','2020-10-15 15:15:34'),
+(1115,'libxkbfile','libxkbfile','2020-10-15 15:15:34'),
+(1116,'libxklavier','libxklavier','2020-10-15 15:15:34'),
+(1117,'libxml2','libxml2','2020-10-15 15:15:34'),
+(1118,'libxshmfence','libxshmfence','2020-10-15 15:15:34'),
+(1119,'libxslt','libxslt','2020-10-15 15:15:34'),
+(1120,'libyaml','libyaml','2020-10-15 15:15:34'),
+(1121,'libzapojit','libzapojit','2020-10-15 15:15:34'),
+(1122,'libzip','libzip','2020-10-15 15:15:34'),
+(1123,'libzmf','libzmf','2020-10-15 15:15:34'),
+(1124,'linkloopdetect','linkloopdetect','2020-10-15 15:15:34'),
+(1125,'linux-firmware','linux-firmware','2020-10-15 15:15:34'),
+(1126,'linuxconsoletools','linuxconsoletools','2020-10-15 15:15:34'),
+(1127,'linuxdoc-tools','linuxdoc-tools','2020-10-15 15:15:34'),
+(1128,'linuxptp','linuxptp','2020-10-15 15:15:34'),
+(1129,'lklug-fonts','lklug-fonts','2020-10-15 15:15:34'),
+(1130,'lksctp-tools','lksctp-tools','2020-10-15 15:15:34'),
+(1131,'lldpad','lldpad','2020-10-15 15:15:34'),
+(1132,'llvm','llvm','2020-10-15 15:15:34'),
+(1133,'lm_sensors','lm_sensors','2020-10-15 15:15:34'),
+(1134,'lmdb','lmdb','2020-10-15 15:15:34'),
+(1135,'lockdev','lockdev','2020-10-15 15:15:34'),
+(1136,'log4cxx','log4cxx','2020-10-15 15:15:34'),
+(1137,'log4j','log4j','2020-10-15 15:15:34'),
+(1138,'logrotate','logrotate','2020-10-15 15:15:34'),
+(1139,'logwatch','logwatch','2020-10-15 15:15:34'),
+(1140,'lohit-assamese-fonts','lohit-assamese-fonts','2020-10-15 15:15:34'),
+(1141,'lohit-bengali-fonts','lohit-bengali-fonts','2020-10-15 15:15:34'),
+(1142,'lohit-devanagari-fonts','lohit-devanagari-fonts','2020-10-15 15:15:34'),
+(1143,'lohit-gujarati-fonts','lohit-gujarati-fonts','2020-10-15 15:15:34'),
+(1144,'lohit-gurmukhi-fonts','lohit-gurmukhi-fonts','2020-10-15 15:15:34'),
+(1145,'lohit-kannada-fonts','lohit-kannada-fonts','2020-10-15 15:15:34'),
+(1146,'lohit-malayalam-fonts','lohit-malayalam-fonts','2020-10-15 15:15:34'),
+(1147,'lohit-marathi-fonts','lohit-marathi-fonts','2020-10-15 15:15:34'),
+(1148,'lohit-nepali-fonts','lohit-nepali-fonts','2020-10-15 15:15:34'),
+(1149,'lohit-odia-fonts','lohit-odia-fonts','2020-10-15 15:15:34'),
+(1150,'lohit-oriya-fonts','lohit-oriya-fonts','2020-10-15 15:15:34'),
+(1151,'lohit-punjabi-fonts','lohit-punjabi-fonts','2020-10-15 15:15:34'),
+(1152,'lohit-tamil-fonts','lohit-tamil-fonts','2020-10-15 15:15:34'),
+(1153,'lohit-telugu-fonts','lohit-telugu-fonts','2020-10-15 15:15:34'),
+(1154,'lorax','lorax','2020-10-15 15:15:34'),
+(1155,'lpsolve','lpsolve','2020-10-15 15:15:34'),
+(1156,'lrzsz','lrzsz','2020-10-15 15:15:35'),
+(1157,'lshw','lshw','2020-10-15 15:15:35'),
+(1158,'lsof','lsof','2020-10-15 15:15:35'),
+(1159,'lsscsi','lsscsi','2020-10-15 15:15:35'),
+(1160,'ltrace','ltrace','2020-10-15 15:15:35'),
+(1161,'ltran','ltran','2020-10-15 15:15:35'),
+(1162,'lttng-ust','lttng-ust','2020-10-15 15:15:35'),
+(1163,'lua','lua','2020-10-15 15:15:35'),
+(1164,'lua-expat','lua-expat','2020-10-15 15:15:35'),
+(1165,'lua-filesystem','lua-filesystem','2020-10-15 15:15:35'),
+(1166,'lua-json','lua-json','2020-10-15 15:15:35'),
+(1167,'lua-lpeg','lua-lpeg','2020-10-15 15:15:35'),
+(1168,'lua-lunit','lua-lunit','2020-10-15 15:15:35'),
+(1169,'lua-posix','lua-posix','2020-10-15 15:15:35'),
+(1170,'lua-socket','lua-socket','2020-10-15 15:15:35'),
+(1171,'luksmeta','luksmeta','2020-10-15 15:15:35'),
+(1172,'lutok','lutok','2020-10-15 15:15:35'),
+(1173,'lvm2','lvm2','2020-10-15 15:15:35'),
+(1174,'lvscli','lvscli','2020-10-15 15:15:35'),
+(1175,'lwip','lwip','2020-10-15 15:15:35'),
+(1176,'lxc','lxc','2020-10-15 15:15:35'),
+(1177,'lxcfs','lxcfs','2020-10-15 15:15:35'),
+(1178,'lxcfs-tools','lxcfs-tools','2020-10-15 15:15:35'),
+(1179,'lxml','lxml','2020-10-15 15:15:35'),
+(1180,'lxsession','lxsession','2020-10-15 15:15:35'),
+(1181,'lynx','lynx','2020-10-15 15:15:35'),
+(1182,'lz4','lz4','2020-10-15 15:15:35'),
+(1183,'lzo','lzo','2020-10-15 15:15:35'),
+(1184,'lzop','lzop','2020-10-15 15:15:35'),
+(1185,'m17n-contrib','m17n-contrib','2020-10-15 15:15:35'),
+(1186,'m17n-db','m17n-db','2020-10-15 15:15:35'),
+(1187,'m17n-lib','m17n-lib','2020-10-15 15:15:35'),
+(1188,'m2crypto','m2crypto','2020-10-15 15:15:35'),
+(1189,'m4','m4','2020-10-15 15:15:35'),
+(1190,'madan-fonts','madan-fonts','2020-10-15 15:15:35'),
+(1191,'mailcap','mailcap','2020-10-15 15:15:35'),
+(1192,'mailman','mailman','2020-10-15 15:15:35'),
+(1193,'mailx','mailx','2020-10-15 15:15:35'),
+(1194,'make','make','2020-10-15 15:15:35'),
+(1195,'make-arm-dumprd','make-arm-dumprd','2020-10-15 15:15:35'),
+(1196,'make-kdump-initrd','make-kdump-initrd','2020-10-15 15:15:35'),
+(1197,'mallard-rng','mallard-rng','2020-10-15 15:15:35'),
+(1198,'man-db','man-db','2020-10-15 15:15:35'),
+(1199,'man-pages','man-pages','2020-10-15 15:15:35'),
+(1200,'man-pages-cs','man-pages-cs','2020-10-15 15:15:35'),
+(1201,'man-pages-es','man-pages-es','2020-10-15 15:15:35'),
+(1202,'man-pages-fr','man-pages-fr','2020-10-15 15:15:35'),
+(1203,'man-pages-it','man-pages-it','2020-10-15 15:15:35'),
+(1204,'man-pages-ja','man-pages-ja','2020-10-15 15:15:35'),
+(1205,'man-pages-ko','man-pages-ko','2020-10-15 15:15:35'),
+(1206,'man-pages-overrides','man-pages-overrides','2020-10-15 15:15:35'),
+(1207,'man-pages-pl','man-pages-pl','2020-10-15 15:15:35'),
+(1208,'man-pages-ru','man-pages-ru','2020-10-15 15:15:35'),
+(1209,'man-pages-zh-CN','man-pages-zh-CN','2020-10-15 15:15:35'),
+(1210,'mariadb','mariadb','2020-10-15 15:15:35'),
+(1211,'mariadb-connector-c','mariadb-connector-c','2020-10-15 15:15:35'),
+(1212,'marisa','marisa','2020-10-15 15:15:35'),
+(1213,'matchbox-window-manager','matchbox-window-manager','2020-10-15 15:15:35'),
+(1214,'mc','mc','2020-10-15 15:15:35'),
+(1215,'mcelog','mcelog','2020-10-15 15:15:35'),
+(1216,'mcpp','mcpp','2020-10-15 15:15:35'),
+(1217,'mcstrans','mcstrans','2020-10-15 15:15:35'),
+(1218,'mdadm','mdadm','2020-10-15 15:15:35'),
+(1219,'meanwhile','meanwhile','2020-10-15 15:15:35'),
+(1220,'media-player-info','media-player-info','2020-10-15 15:15:35'),
+(1221,'memcached','memcached','2020-10-15 15:15:35'),
+(1222,'memstomp','memstomp','2020-10-15 15:15:35'),
+(1223,'mercurial','mercurial','2020-10-15 15:15:35'),
+(1224,'mesa','mesa','2020-10-15 15:15:35'),
+(1225,'mesa-demos','mesa-demos','2020-10-15 15:15:35'),
+(1226,'mesa-libGLU','mesa-libGLU','2020-10-15 15:15:35'),
+(1227,'meson','meson','2020-10-15 15:15:35'),
+(1228,'metacity','metacity','2020-10-15 15:15:35'),
+(1229,'mgetty','mgetty','2020-10-15 15:15:35'),
+(1230,'microcode_ctl','microcode_ctl','2020-10-15 15:15:35'),
+(1231,'microdnf','microdnf','2020-10-15 15:15:35'),
+(1232,'migrationtools','migrationtools','2020-10-15 15:15:35'),
+(1233,'mikmod','mikmod','2020-10-15 15:15:35'),
+(1234,'minicom','minicom','2020-10-15 15:15:35'),
+(1235,'mipv6-daemon','mipv6-daemon','2020-10-15 15:15:35'),
+(1236,'mirror-yum','mirror-yum','2020-10-15 15:15:35'),
+(1237,'mirror-yum-server','mirror-yum-server','2020-10-15 15:15:35'),
+(1238,'mistake-proof','mistake-proof','2020-10-15 15:15:35'),
+(1239,'mkbootdisk','mkbootdisk','2020-10-15 15:15:35'),
+(1240,'mkeuleros','mkeuleros','2020-10-15 15:15:35'),
+(1241,'mkrepo','mkrepo','2020-10-15 15:15:35'),
+(1242,'mksh','mksh','2020-10-15 15:15:35'),
+(1243,'mlocate','mlocate','2020-10-15 15:15:35'),
+(1244,'mmfs_sync','mmfs_sync','2020-10-15 15:15:35'),
+(1245,'mmfs_utils','mmfs_utils','2020-10-15 15:15:35'),
+(1246,'mobile-broadband-provider-info','mobile-broadband-provider-info','2020-10-15 15:15:35'),
+(1247,'mod_auth_gssapi','mod_auth_gssapi','2020-10-15 15:15:35'),
+(1248,'mod_auth_kerb','mod_auth_kerb','2020-10-15 15:15:35'),
+(1249,'mod_auth_mellon','mod_auth_mellon','2020-10-15 15:15:35'),
+(1250,'mod_authnz_pam','mod_authnz_pam','2020-10-15 15:15:35'),
+(1251,'mod_fcgid','mod_fcgid','2020-10-15 15:15:35'),
+(1252,'mod_http2','mod_http2','2020-10-15 15:15:35'),
+(1253,'mod_intercept_form_submit','mod_intercept_form_submit','2020-10-15 15:15:35'),
+(1254,'mod_lookup_identity','mod_lookup_identity','2020-10-15 15:15:35'),
+(1255,'mod_nss','mod_nss','2020-10-15 15:15:35'),
+(1256,'mod_revocator','mod_revocator','2020-10-15 15:15:35'),
+(1257,'mod_security','mod_security','2020-10-15 15:15:35'),
+(1258,'mod_security_crs','mod_security_crs','2020-10-15 15:15:35'),
+(1259,'mod_wsgi','mod_wsgi','2020-10-15 15:15:35'),
+(1260,'mokutil','mokutil','2020-10-15 15:15:35'),
+(1261,'mongo-c-driver','mongo-c-driver','2020-10-15 15:15:35'),
+(1262,'mongodb','mongodb','2020-10-15 15:15:35'),
+(1263,'motif','motif','2020-10-15 15:15:35'),
+(1264,'mousetweaks','mousetweaks','2020-10-15 15:15:35'),
+(1265,'mozilla-filesystem','mozilla-filesystem','2020-10-15 15:15:35'),
+(1266,'mozjs17','mozjs17','2020-10-15 15:15:35'),
+(1267,'mozjs24','mozjs24','2020-10-15 15:15:35'),
+(1268,'mozjs52','mozjs52','2020-10-15 15:15:35'),
+(1269,'mozjs60','mozjs60','2020-10-15 15:15:35'),
+(1270,'mpfr','mpfr','2020-10-15 15:15:35'),
+(1271,'mpg123','mpg123','2020-10-15 15:15:35'),
+(1272,'mpich','mpich','2020-10-15 15:15:35'),
+(1273,'mpitests','mpitests','2020-10-15 15:15:35'),
+(1274,'mrtg','mrtg','2020-10-15 15:15:35'),
+(1275,'mstflint','mstflint','2020-10-15 15:15:35'),
+(1276,'msv','msv','2020-10-15 15:15:36'),
+(1277,'mt-st','mt-st','2020-10-15 15:15:36'),
+(1278,'mtdev','mtdev','2020-10-15 15:15:36'),
+(1279,'mtools','mtools','2020-10-15 15:15:36'),
+(1280,'mtr','mtr','2020-10-15 15:15:36'),
+(1281,'mtx','mtx','2020-10-15 15:15:36'),
+(1282,'multipath-tools','multipath-tools','2020-10-15 15:15:36'),
+(1283,'munge','munge','2020-10-15 15:15:36'),
+(1284,'mutt','mutt','2020-10-15 15:15:36'),
+(1285,'mutter','mutter','2020-10-15 15:15:36'),
+(1286,'mvapich2','mvapich2','2020-10-15 15:15:36'),
+(1287,'mysql-connector-java','mysql-connector-java','2020-10-15 15:15:36'),
+(1288,'mysql-connector-odbc','mysql-connector-odbc','2020-10-15 15:15:36'),
+(1289,'mythes','mythes','2020-10-15 15:15:36'),
+(1290,'mythes-en','mythes-en','2020-10-15 15:15:36'),
+(1291,'nafees-web-naskh-fonts','nafees-web-naskh-fonts','2020-10-15 15:15:36'),
+(1292,'nano','nano','2020-10-15 15:15:36'),
+(1293,'nasm','nasm,netwide_assembler,NASM','2020-10-15 15:15:36'),
+(1294,'nautilus','nautilus','2020-10-15 15:15:36'),
+(1295,'nautilus-sendto','nautilus-sendto','2020-10-15 15:15:36'),
+(1296,'navilu-fonts','navilu-fonts','2020-10-15 15:15:36'),
+(1297,'ncompress','ncompress','2020-10-15 15:15:36'),
+(1298,'ncurses','ncurses','2020-10-15 15:15:36'),
+(1299,'ndctl','ndctl','2020-10-15 15:15:36'),
+(1300,'ndisc6','ndisc6','2020-10-15 15:15:36'),
+(1301,'ndsend','ndsend','2020-10-15 15:15:36'),
+(1302,'neon','neon','2020-10-15 15:15:36'),
+(1303,'net-snmp','net-snmp','2020-10-15 15:15:36'),
+(1304,'net-tools','net-tools','2020-10-15 15:15:36'),
+(1305,'netcf','netcf','2020-10-15 15:15:36'),
+(1306,'netcheck','netcheck','2020-10-15 15:15:36'),
+(1307,'netlabel_tools','netlabel_tools','2020-10-15 15:15:36'),
+(1308,'netpbm','netpbm','2020-10-15 15:15:36'),
+(1309,'netsniff-ng','netsniff-ng','2020-10-15 15:15:36'),
+(1310,'nettle','nettle','2020-10-15 15:15:36'),
+(1311,'network-manager-applet','network-manager-applet','2020-10-15 15:15:36'),
+(1312,'newt','newt','2020-10-15 15:15:36'),
+(1313,'nfs-utils','nfs-utils','2020-10-15 15:15:36'),
+(1314,'nfs4-acl-tools','nfs4-acl-tools','2020-10-15 15:15:36'),
+(1315,'nfsometer','nfsometer','2020-10-15 15:15:36'),
+(1316,'nftables','nftables','2020-10-15 15:15:36'),
+(1317,'nghttp2','nghttp2','2020-10-15 15:15:36'),
+(1318,'nginx','nginx','2020-10-15 15:15:36'),
+(1319,'nhn-nanum-fonts','nhn-nanum-fonts','2020-10-15 15:15:36'),
+(1320,'nim-srpm-macros','nim-srpm-macros','2020-10-15 15:15:36'),
+(1321,'ninja-build','ninja-build','2020-10-15 15:15:36'),
+(1322,'nmap','nmap','2020-10-15 15:15:36'),
+(1323,'notification-daemon','notification-daemon','2020-10-15 15:15:36'),
+(1324,'nototools','nototools','2020-10-15 15:15:36'),
+(1325,'npth','npth','2020-10-15 15:15:36'),
+(1326,'nspr','nspr','2020-10-15 15:15:36'),
+(1327,'nss','nss','2020-10-15 15:15:36'),
+(1328,'nss-pam-ldapd','nss-pam-ldapd','2020-10-15 15:15:36'),
+(1329,'nss-pem','nss-pem','2020-10-15 15:15:36'),
+(1330,'nss-softokn','nss-softokn','2020-10-15 15:15:36'),
+(1331,'nss-util','nss-util','2020-10-15 15:15:36'),
+(1332,'nss_compat_ossl','nss_compat_ossl','2020-10-15 15:15:36'),
+(1333,'nss_nis','nss_nis','2020-10-15 15:15:36'),
+(1334,'nss_wrapper','nss_wrapper','2020-10-15 15:15:36'),
+(1335,'ntfs-3g','ntfs-3g','2020-10-15 15:15:36'),
+(1336,'ntp','ntp,data_ontap','2020-10-15 15:15:36'),
+(1337,'ntpstat','ntpstat','2020-10-15 15:15:36'),
+(1338,'numactl','numactl','2020-10-15 15:15:36'),
+(1339,'numad','numad','2020-10-15 15:15:36'),
+(1340,'numpy','numpy','2020-10-15 15:15:36'),
+(1341,'nuxwdog','nuxwdog','2020-10-15 15:15:36'),
+(1342,'nvme-cli','nvme-cli','2020-10-15 15:15:36'),
+(1343,'nvmetcli','nvmetcli','2020-10-15 15:15:36'),
+(1344,'nvram_sysinfo','nvram_sysinfo','2020-10-15 15:15:36'),
+(1345,'obex-data-server','obex-data-server','2020-10-15 15:15:36'),
+(1346,'obexd','obexd','2020-10-15 15:15:36'),
+(1347,'objectweb-asm','objectweb-asm','2020-10-15 15:15:36'),
+(1348,'obs-env','obs-env','2020-10-15 15:15:36'),
+(1349,'ocaml','ocaml','2020-10-15 15:15:36'),
+(1350,'ocaml-srpm-macros','ocaml-srpm-macros','2020-10-15 15:15:36'),
+(1351,'oci-systemd-hook','oci-systemd-hook','2020-10-15 15:15:36'),
+(1352,'oddjob','oddjob','2020-10-15 15:15:36'),
+(1353,'ongres-scram','ongres-scram','2020-10-15 15:15:36'),
+(1354,'oniguruma','oniguruma','2020-10-15 15:15:36'),
+(1355,'open-iscsi','open-iscsi','2020-10-15 15:15:36'),
+(1356,'open-isns','open-isns','2020-10-15 15:15:36'),
+(1357,'open-sans-fonts','open-sans-fonts','2020-10-15 15:15:36'),
+(1358,'openEuler-rpm-config','openEuler-rpm-config','2020-10-15 15:15:36'),
+(1359,'openblas','openblas','2020-10-15 15:15:36'),
+(1360,'openblas-srpm-macros','openblas-srpm-macros','2020-10-15 15:15:36'),
+(1361,'opencc','opencc','2020-10-15 15:15:36'),
+(1362,'opencryptoki','opencryptoki','2020-10-15 15:15:36'),
+(1363,'opendnssec','opendnssec','2020-10-15 15:15:36'),
+(1364,'openhpi','openhpi','2020-10-15 15:15:36'),
+(1365,'openjade','openjade','2020-10-15 15:15:36'),
+(1366,'openjpeg','openjpeg','2020-10-15 15:15:36'),
+(1367,'openjpeg2','openjpeg2','2020-10-15 15:15:36'),
+(1368,'openldap','openldap','2020-10-15 15:15:36'),
+(1369,'openlmi-networking','openlmi-networking','2020-10-15 15:15:36'),
+(1370,'openlmi-providers','openlmi-providers','2020-10-15 15:15:36'),
+(1371,'openlmi-storage','openlmi-storage','2020-10-15 15:15:36'),
+(1372,'openlmi-tools','openlmi-tools','2020-10-15 15:15:36'),
+(1373,'openmpi','openmpi','2020-10-15 15:15:36'),
+(1374,'openobex','openobex','2020-10-15 15:15:36'),
+(1375,'opensc','opensc','2020-10-15 15:15:36'),
+(1376,'openscap','openscap','2020-10-15 15:15:36'),
+(1377,'openslp','openslp','2020-10-15 15:15:36'),
+(1378,'opensm','opensm','2020-10-15 15:15:36'),
+(1379,'opensp','opensp','2020-10-15 15:15:36'),
+(1380,'openssh','openssh','2020-10-15 15:15:36'),
+(1381,'openssl','openssl,OpenSSL','2020-10-15 15:15:36'),
+(1382,'openssl-SMx','openssl-SMx','2020-10-15 15:15:36'),
+(1383,'openssl-pkcs11','openssl-pkcs11','2020-10-15 15:15:36'),
+(1384,'openvswitch','openvswitch','2020-10-15 15:15:36'),
+(1385,'openwsman','openwsman','2020-10-15 15:15:36'),
+(1386,'oprofile','oprofile','2020-10-15 15:15:37'),
+(1387,'opus','opus','2020-10-15 15:15:37'),
+(1388,'orc','orc','2020-10-15 15:15:37'),
+(1389,'orca','orca','2020-10-15 15:15:37'),
+(1390,'ortp','ortp','2020-10-15 15:15:37'),
+(1391,'os-health-check','os-health-check','2020-10-15 15:15:37'),
+(1392,'os-prober','os-prober','2020-10-15 15:15:37'),
+(1393,'os_die_handler','os_die_handler','2020-10-15 15:15:37'),
+(1394,'os_feeddog','os_feeddog','2020-10-15 15:15:37'),
+(1395,'os_panic_handler','os_panic_handler','2020-10-15 15:15:37'),
+(1396,'oscap-anaconda-addon','oscap-anaconda-addon','2020-10-15 15:15:37'),
+(1397,'osinfo-db','osinfo-db','2020-10-15 15:15:37'),
+(1398,'osinfo-db-tools','osinfo-db-tools','2020-10-15 15:15:37'),
+(1399,'osp_bsp_reboot','osp_bsp_reboot','2020-10-15 15:15:37'),
+(1400,'ostree','ostree','2020-10-15 15:15:37'),
+(1401,'overpass-fonts','overpass-fonts','2020-10-15 15:15:37'),
+(1402,'oxygen-gtk2','oxygen-gtk2','2020-10-15 15:15:37'),
+(1403,'oxygen-gtk3','oxygen-gtk3','2020-10-15 15:15:37'),
+(1404,'oxygen-icon-theme','oxygen-icon-theme','2020-10-15 15:15:37'),
+(1405,'p11-kit','p11-kit','2020-10-15 15:15:37'),
+(1406,'pakchois','pakchois','2020-10-15 15:15:37'),
+(1407,'paktype-naqsh-fonts','paktype-naqsh-fonts','2020-10-15 15:15:37'),
+(1408,'paktype-naskh-basic-fonts','paktype-naskh-basic-fonts','2020-10-15 15:15:37'),
+(1409,'paktype-tehreer-fonts','paktype-tehreer-fonts','2020-10-15 15:15:37'),
+(1410,'pam','pam','2020-10-15 15:15:37'),
+(1411,'pam_krb5','pam_krb5','2020-10-15 15:15:37'),
+(1412,'pam_pkcs11','pam_pkcs11','2020-10-15 15:15:37'),
+(1413,'pango','pango','2020-10-15 15:15:37'),
+(1414,'pangomm','pangomm','2020-10-15 15:15:37'),
+(1415,'papi','papi','2020-10-15 15:15:37'),
+(1416,'paps','paps','2020-10-15 15:15:37'),
+(1417,'paratype-pt-sans-fonts','paratype-pt-sans-fonts','2020-10-15 15:15:37'),
+(1418,'parted','parted','2020-10-15 15:15:37'),
+(1419,'passivetex','passivetex','2020-10-15 15:15:37'),
+(1420,'passwd','passwd','2020-10-15 15:15:37'),
+(1421,'patch','patch','2020-10-15 15:15:37'),
+(1422,'patchutils','patchutils','2020-10-15 15:15:37'),
+(1423,'pax','pax','2020-10-15 15:15:37'),
+(1424,'pciutils','pciutils','2020-10-15 15:15:37'),
+(1425,'pcp','pcp','2020-10-15 15:15:37'),
+(1426,'pcre','pcre','2020-10-15 15:15:37'),
+(1427,'pcre2','pcre2','2020-10-15 15:15:37'),
+(1428,'pcsc-lite','pcsc-lite','2020-10-15 15:15:37'),
+(1429,'pcsc-lite-ccid','pcsc-lite-ccid','2020-10-15 15:15:37'),
+(1430,'perftest','perftest','2020-10-15 15:15:37'),
+(1431,'perl','perl','2020-10-15 15:15:37'),
+(1432,'perl-Algorithm-Diff','perl-Algorithm-Diff','2020-10-15 15:15:37'),
+(1433,'perl-Archive-Extract','perl-Archive-Extract','2020-10-15 15:15:37'),
+(1434,'perl-Archive-Tar','perl-Archive-Tar','2020-10-15 15:15:37'),
+(1435,'perl-Archive-Zip','perl-Archive-Zip','2020-10-15 15:15:37'),
+(1436,'perl-Authen-SASL','perl-Authen-SASL','2020-10-15 15:15:37'),
+(1437,'perl-B-Debug','perl-B-Debug','2020-10-15 15:15:37'),
+(1438,'perl-B-Lint','perl-B-Lint','2020-10-15 15:15:37'),
+(1439,'perl-Bit-Vector','perl-Bit-Vector','2020-10-15 15:15:37'),
+(1440,'perl-Business-ISBN','perl-Business-ISBN','2020-10-15 15:15:37'),
+(1441,'perl-Business-ISBN-Data','perl-Business-ISBN-Data','2020-10-15 15:15:37'),
+(1442,'perl-CGI','perl-CGI','2020-10-15 15:15:37'),
+(1443,'perl-CPAN','perl-CPAN','2020-10-15 15:15:37'),
+(1444,'perl-CPAN-Meta','perl-CPAN-Meta','2020-10-15 15:15:37'),
+(1445,'perl-CPAN-Meta-Check','perl-CPAN-Meta-Check','2020-10-15 15:15:37'),
+(1446,'perl-CPAN-Meta-Requirements','perl-CPAN-Meta-Requirements','2020-10-15 15:15:37'),
+(1447,'perl-CPAN-Meta-YAML','perl-CPAN-Meta-YAML','2020-10-15 15:15:37'),
+(1448,'perl-Capture-Tiny','perl-Capture-Tiny','2020-10-15 15:15:37'),
+(1449,'perl-Carp','perl-Carp','2020-10-15 15:15:37'),
+(1450,'perl-Carp-Clan','perl-Carp-Clan','2020-10-15 15:15:37'),
+(1451,'perl-Class-ISA','perl-Class-ISA','2020-10-15 15:15:37'),
+(1452,'perl-Class-Inspector','perl-Class-Inspector','2020-10-15 15:15:37'),
+(1453,'perl-Class-Method-Modifiers','perl-Class-Method-Modifiers','2020-10-15 15:15:37'),
+(1454,'perl-Class-Singleton','perl-Class-Singleton','2020-10-15 15:15:37'),
+(1455,'perl-Class-XSAccessor','perl-Class-XSAccessor','2020-10-15 15:15:37'),
+(1456,'perl-Compress-Bzip2','perl-Compress-Bzip2','2020-10-15 15:15:37'),
+(1457,'perl-Compress-Raw-Bzip2','perl-Compress-Raw-Bzip2','2020-10-15 15:15:37'),
+(1458,'perl-Compress-Raw-Zlib','perl-Compress-Raw-Zlib','2020-10-15 15:15:37'),
+(1459,'perl-Config-AutoConf','perl-Config-AutoConf','2020-10-15 15:15:37'),
+(1460,'perl-Config-IniFiles','perl-Config-IniFiles','2020-10-15 15:15:37'),
+(1461,'perl-Config-Perl-V','perl-Config-Perl-V','2020-10-15 15:15:37'),
+(1462,'perl-Convert-ASN1','perl-Convert-ASN1','2020-10-15 15:15:37'),
+(1463,'perl-Crypt-OpenSSL-Bignum','perl-Crypt-OpenSSL-Bignum','2020-10-15 15:15:37'),
+(1464,'perl-Crypt-OpenSSL-Random','perl-Crypt-OpenSSL-Random','2020-10-15 15:15:37'),
+(1465,'perl-DBD-MySQL','perl-DBD-MySQL','2020-10-15 15:15:37'),
+(1466,'perl-DBD-SQLite','perl-DBD-SQLite','2020-10-15 15:15:37'),
+(1467,'perl-DBI','perl-DBI,dbi','2020-10-15 15:15:37'),
+(1468,'perl-DB_File','perl-DB_File','2020-10-15 15:15:37'),
+(1469,'perl-Data-Dump','perl-Data-Dump','2020-10-15 15:15:37'),
+(1470,'perl-Data-Dumper','perl-Data-Dumper','2020-10-15 15:15:37'),
+(1471,'perl-Data-OptList','perl-Data-OptList','2020-10-15 15:15:37'),
+(1472,'perl-Data-Section','perl-Data-Section','2020-10-15 15:15:37'),
+(1473,'perl-Data-UUID','perl-Data-UUID','2020-10-15 15:15:37'),
+(1474,'perl-Date-Calc','perl-Date-Calc','2020-10-15 15:15:37'),
+(1475,'perl-Date-Manip','perl-Date-Manip','2020-10-15 15:15:37'),
+(1476,'perl-Devel-CheckLib','perl-Devel-CheckLib','2020-10-15 15:15:37'),
+(1477,'perl-Devel-GlobalDestruction','perl-Devel-GlobalDestruction','2020-10-15 15:15:37'),
+(1478,'perl-Devel-PPPort','perl-Devel-PPPort','2020-10-15 15:15:37'),
+(1479,'perl-Devel-Size','perl-Devel-Size','2020-10-15 15:15:37'),
+(1480,'perl-Devel-Symdump','perl-Devel-Symdump','2020-10-15 15:15:37'),
+(1481,'perl-Digest','perl-Digest','2020-10-15 15:15:37'),
+(1482,'perl-Digest-HMAC','perl-Digest-HMAC','2020-10-15 15:15:37'),
+(1483,'perl-Digest-MD5','perl-Digest-MD5','2020-10-15 15:15:37'),
+(1484,'perl-Digest-SHA','perl-Digest-SHA','2020-10-15 15:15:37'),
+(1485,'perl-Digest-SHA1','perl-Digest-SHA1','2020-10-15 15:15:37'),
+(1486,'perl-Encode','perl-Encode','2020-10-15 15:15:37'),
+(1487,'perl-Encode-Detect','perl-Encode-Detect','2020-10-15 15:15:37'),
+(1488,'perl-Encode-Locale','perl-Encode-Locale','2020-10-15 15:15:37'),
+(1489,'perl-Env','perl-Env','2020-10-15 15:15:37'),
+(1490,'perl-Error','perl-Error','2020-10-15 15:15:37'),
+(1491,'perl-Exporter','perl-Exporter','2020-10-15 15:15:37'),
+(1492,'perl-Exporter-Tiny','perl-Exporter-Tiny','2020-10-15 15:15:37'),
+(1493,'perl-ExtUtils-CBuilder','perl-ExtUtils-CBuilder','2020-10-15 15:15:37'),
+(1494,'perl-ExtUtils-Install','perl-ExtUtils-Install','2020-10-15 15:15:38'),
+(1495,'perl-ExtUtils-MakeMaker','perl-ExtUtils-MakeMaker','2020-10-15 15:15:38'),
+(1496,'perl-ExtUtils-Manifest','perl-ExtUtils-Manifest','2020-10-15 15:15:38'),
+(1497,'perl-ExtUtils-ParseXS','perl-ExtUtils-ParseXS','2020-10-15 15:15:38'),
+(1498,'perl-FCGI','perl-FCGI','2020-10-15 15:15:38'),
+(1499,'perl-Fedora-VSP','perl-Fedora-VSP','2020-10-15 15:15:38'),
+(1500,'perl-File-BaseDir','perl-File-BaseDir','2020-10-15 15:15:38'),
+(1501,'perl-File-CheckTree','perl-File-CheckTree','2020-10-15 15:15:38'),
+(1502,'perl-File-Copy-Recursive','perl-File-Copy-Recursive','2020-10-15 15:15:38'),
+(1503,'perl-File-DesktopEntry','perl-File-DesktopEntry','2020-10-15 15:15:38'),
+(1504,'perl-File-Fetch','perl-File-Fetch','2020-10-15 15:15:38'),
+(1505,'perl-File-HomeDir','perl-File-HomeDir','2020-10-15 15:15:38'),
+(1506,'perl-File-Listing','perl-File-Listing','2020-10-15 15:15:38'),
+(1507,'perl-File-MimeInfo','perl-File-MimeInfo','2020-10-15 15:15:38'),
+(1508,'perl-File-Path','perl-File-Path','2020-10-15 15:15:38'),
+(1509,'perl-File-ReadBackwards','perl-File-ReadBackwards','2020-10-15 15:15:38'),
+(1510,'perl-File-Remove','perl-File-Remove','2020-10-15 15:15:38'),
+(1511,'perl-File-ShareDir','perl-File-ShareDir','2020-10-15 15:15:38'),
+(1512,'perl-File-ShareDir-Install','perl-File-ShareDir-Install','2020-10-15 15:15:38'),
+(1513,'perl-File-Slurp','perl-File-Slurp','2020-10-15 15:15:38'),
+(1514,'perl-File-Temp','perl-File-Temp','2020-10-15 15:15:38'),
+(1515,'perl-File-Which','perl-File-Which','2020-10-15 15:15:38'),
+(1516,'perl-File-pushd','perl-File-pushd','2020-10-15 15:15:38'),
+(1517,'perl-Filter','perl-Filter','2020-10-15 15:15:38'),
+(1518,'perl-Filter-Simple','perl-Filter-Simple','2020-10-15 15:15:38'),
+(1519,'perl-Font-TTF','perl-Font-TTF','2020-10-15 15:15:38'),
+(1520,'perl-FreezeThaw','perl-FreezeThaw','2020-10-15 15:15:38'),
+(1521,'perl-GD','perl-GD','2020-10-15 15:15:38'),
+(1522,'perl-GD-Barcode','perl-GD-Barcode','2020-10-15 15:15:38'),
+(1523,'perl-GSSAPI','perl-GSSAPI','2020-10-15 15:15:38'),
+(1524,'perl-Getopt-Long','perl-Getopt-Long','2020-10-15 15:15:38'),
+(1525,'perl-HTML-Parser','perl-HTML-Parser','2020-10-15 15:15:38'),
+(1526,'perl-HTML-Tagset','perl-HTML-Tagset','2020-10-15 15:15:38'),
+(1527,'perl-HTML-Tree','perl-HTML-Tree','2020-10-15 15:15:38'),
+(1528,'perl-HTTP-Cookies','perl-HTTP-Cookies','2020-10-15 15:15:38'),
+(1529,'perl-HTTP-Daemon','perl-HTTP-Daemon','2020-10-15 15:15:38'),
+(1530,'perl-HTTP-Date','perl-HTTP-Date','2020-10-15 15:15:38'),
+(1531,'perl-HTTP-Message','perl-HTTP-Message','2020-10-15 15:15:38'),
+(1532,'perl-HTTP-Negotiate','perl-HTTP-Negotiate','2020-10-15 15:15:38'),
+(1533,'perl-HTTP-Tiny','perl-HTTP-Tiny','2020-10-15 15:15:38'),
+(1534,'perl-IO-All','perl-IO-All','2020-10-15 15:15:38'),
+(1535,'perl-IO-Compress','perl-IO-Compress','2020-10-15 15:15:38'),
+(1536,'perl-IO-HTML','perl-IO-HTML','2020-10-15 15:15:38'),
+(1537,'perl-IO-Socket-INET6','perl-IO-Socket-INET6','2020-10-15 15:15:38'),
+(1538,'perl-IO-Socket-IP','perl-IO-Socket-IP','2020-10-15 15:15:38'),
+(1539,'perl-IO-Socket-SSL','perl-IO-Socket-SSL','2020-10-15 15:15:38'),
+(1540,'perl-IO-String','perl-IO-String','2020-10-15 15:15:38'),
+(1541,'perl-IO-stringy','perl-IO-stringy','2020-10-15 15:15:38'),
+(1542,'perl-IPC-Cmd','perl-IPC-Cmd','2020-10-15 15:15:38'),
+(1543,'perl-IPC-SysV','perl-IPC-SysV','2020-10-15 15:15:38'),
+(1544,'perl-IPC-System-Simple','perl-IPC-System-Simple','2020-10-15 15:15:38'),
+(1545,'perl-Import-Into','perl-Import-Into','2020-10-15 15:15:38'),
+(1546,'perl-JSON','perl-JSON','2020-10-15 15:15:38'),
+(1547,'perl-JSON-PP','perl-JSON-PP','2020-10-15 15:15:38'),
+(1548,'perl-LDAP','perl-LDAP','2020-10-15 15:15:38'),
+(1549,'perl-LWP-MediaTypes','perl-LWP-MediaTypes','2020-10-15 15:15:38'),
+(1550,'perl-List-MoreUtils','perl-List-MoreUtils','2020-10-15 15:15:38'),
+(1551,'perl-List-MoreUtils-XS','perl-List-MoreUtils-XS','2020-10-15 15:15:38'),
+(1552,'perl-Locale-Codes','perl-Locale-Codes','2020-10-15 15:15:38'),
+(1553,'perl-Locale-Maketext','perl-Locale-Maketext','2020-10-15 15:15:38'),
+(1554,'perl-MIME-Base64','perl-MIME-Base64','2020-10-15 15:15:38'),
+(1555,'perl-MRO-Compat','perl-MRO-Compat','2020-10-15 15:15:38'),
+(1556,'perl-Mail-DKIM','perl-Mail-DKIM','2020-10-15 15:15:38'),
+(1557,'perl-Mail-SPF','perl-Mail-SPF','2020-10-15 15:15:38'),
+(1558,'perl-MailTools','perl-MailTools','2020-10-15 15:15:38'),
+(1559,'perl-Math-BigInt','perl-Math-BigInt','2020-10-15 15:15:38'),
+(1560,'perl-Math-BigInt-FastCalc','perl-Math-BigInt-FastCalc','2020-10-15 15:15:38'),
+(1561,'perl-Math-BigRat','perl-Math-BigRat','2020-10-15 15:15:38'),
+(1562,'perl-Module-Build','perl-Module-Build','2020-10-15 15:15:38'),
+(1563,'perl-Module-CPANfile','perl-Module-CPANfile','2020-10-15 15:15:38'),
+(1564,'perl-Module-CoreList','perl-Module-CoreList','2020-10-15 15:15:38'),
+(1565,'perl-Module-Install','perl-Module-Install','2020-10-15 15:15:38'),
+(1566,'perl-Module-Install-AuthorRequires','perl-Module-Install-AuthorRequires','2020-10-15 15:15:38'),
+(1567,'perl-Module-Install-AuthorTests','perl-Module-Install-AuthorTests','2020-10-15 15:15:38'),
+(1568,'perl-Module-Install-AutoLicense','perl-Module-Install-AutoLicense','2020-10-15 15:15:38'),
+(1569,'perl-Module-Install-GithubMeta','perl-Module-Install-GithubMeta','2020-10-15 15:15:38'),
+(1570,'perl-Module-Install-ManifestSkip','perl-Module-Install-ManifestSkip','2020-10-15 15:15:38'),
+(1571,'perl-Module-Install-ReadmeFromPod','perl-Module-Install-ReadmeFromPod','2020-10-15 15:15:38'),
+(1572,'perl-Module-Install-ReadmeMarkdownFromPod','perl-Module-Install-ReadmeMarkdownFromPod','2020-10-15 15:15:38'),
+(1573,'perl-Module-Install-Repository','perl-Module-Install-Repository','2020-10-15 15:15:38'),
+(1574,'perl-Module-Load','perl-Module-Load','2020-10-15 15:15:38'),
+(1575,'perl-Module-Load-Conditional','perl-Module-Load-Conditional','2020-10-15 15:15:38'),
+(1576,'perl-Module-Manifest-Skip','perl-Module-Manifest-Skip','2020-10-15 15:15:38'),
+(1577,'perl-Module-Metadata','perl-Module-Metadata','2020-10-15 15:15:38'),
+(1578,'perl-Module-Package','perl-Module-Package','2020-10-15 15:15:38'),
+(1579,'perl-Module-Runtime','perl-Module-Runtime','2020-10-15 15:15:38'),
+(1580,'perl-Module-ScanDeps','perl-Module-ScanDeps','2020-10-15 15:15:38'),
+(1581,'perl-Moo','perl-Moo','2020-10-15 15:15:38'),
+(1582,'perl-Mozilla-CA','perl-Mozilla-CA','2020-10-15 15:15:38'),
+(1583,'perl-NTLM','perl-NTLM','2020-10-15 15:15:38'),
+(1584,'perl-Net-DNS','perl-Net-DNS','2020-10-15 15:15:38'),
+(1585,'perl-Net-Daemon','perl-Net-Daemon','2020-10-15 15:15:38'),
+(1586,'perl-Net-HTTP','perl-Net-HTTP','2020-10-15 15:15:38'),
+(1587,'perl-Net-LibIDN','perl-Net-LibIDN','2020-10-15 15:15:38'),
+(1588,'perl-Net-SMTP-SSL','perl-Net-SMTP-SSL','2020-10-15 15:15:38'),
+(1589,'perl-Net-SSLeay','perl-Net-SSLeay','2020-10-15 15:15:38'),
+(1590,'perl-NetAddr-IP','perl-NetAddr-IP','2020-10-15 15:15:38'),
+(1591,'perl-Newt','perl-Newt','2020-10-15 15:15:38'),
+(1592,'perl-Object-Accessor','perl-Object-Accessor','2020-10-15 15:15:38'),
+(1593,'perl-Package-Generator','perl-Package-Generator','2020-10-15 15:15:38'),
+(1594,'perl-Package-Stash-XS','perl-Package-Stash-XS','2020-10-15 15:15:38'),
+(1595,'perl-Params-Check','perl-Params-Check','2020-10-15 15:15:38'),
+(1596,'perl-Params-Util','perl-Params-Util','2020-10-15 15:15:38'),
+(1597,'perl-Params-Validate','perl-Params-Validate','2020-10-15 15:15:38'),
+(1598,'perl-Parse-Yapp','perl-Parse-Yapp','2020-10-15 15:15:38'),
+(1599,'perl-Path-Class','perl-Path-Class','2020-10-15 15:15:38'),
+(1600,'perl-Path-Tiny','perl-Path-Tiny','2020-10-15 15:15:38'),
+(1601,'perl-PathTools','perl-PathTools','2020-10-15 15:15:38'),
+(1602,'perl-Perl-OSType','perl-Perl-OSType','2020-10-15 15:15:38'),
+(1603,'perl-PerlIO-via-QuotedPrint','perl-PerlIO-via-QuotedPrint','2020-10-15 15:15:38'),
+(1604,'perl-Pod-Checker','perl-Pod-Checker','2020-10-15 15:15:38'),
+(1605,'perl-Pod-Coverage','perl-Pod-Coverage','2020-10-15 15:15:38'),
+(1606,'perl-Pod-Escapes','perl-Pod-Escapes','2020-10-15 15:15:39'),
+(1607,'perl-Pod-Markdown','perl-Pod-Markdown','2020-10-15 15:15:39'),
+(1608,'perl-Pod-Parser','perl-Pod-Parser','2020-10-15 15:15:39'),
+(1609,'perl-Pod-Perldoc','perl-Pod-Perldoc','2020-10-15 15:15:39'),
+(1610,'perl-Pod-Plainer','perl-Pod-Plainer','2020-10-15 15:15:39'),
+(1611,'perl-Pod-Simple','perl-Pod-Simple','2020-10-15 15:15:39'),
+(1612,'perl-Pod-Usage','perl-Pod-Usage','2020-10-15 15:15:39'),
+(1613,'perl-Readonly','perl-Readonly','2020-10-15 15:15:39'),
+(1614,'perl-Readonly-XS','perl-Readonly-XS','2020-10-15 15:15:39'),
+(1615,'perl-Role-Tiny','perl-Role-Tiny','2020-10-15 15:15:39'),
+(1616,'perl-SGMLSpm','perl-SGMLSpm','2020-10-15 15:15:39'),
+(1617,'perl-SNMP_Session','perl-SNMP_Session','2020-10-15 15:15:39'),
+(1618,'perl-Scalar-List-Utils','perl-Scalar-List-Utils','2020-10-15 15:15:39'),
+(1619,'perl-Socket','perl-Socket','2020-10-15 15:15:39'),
+(1620,'perl-Socket6','perl-Socket6','2020-10-15 15:15:39'),
+(1621,'perl-Software-License','perl-Software-License','2020-10-15 15:15:39'),
+(1622,'perl-Storable','perl-Storable','2020-10-15 15:15:39'),
+(1623,'perl-String-ShellQuote','perl-String-ShellQuote','2020-10-15 15:15:39'),
+(1624,'perl-Sub-Exporter','perl-Sub-Exporter','2020-10-15 15:15:39'),
+(1625,'perl-Sub-Exporter-Progressive','perl-Sub-Exporter-Progressive','2020-10-15 15:15:39'),
+(1626,'perl-Sub-Install','perl-Sub-Install','2020-10-15 15:15:39'),
+(1627,'perl-Sub-Name','perl-Sub-Name','2020-10-15 15:15:39'),
+(1628,'perl-Sub-Quote','perl-Sub-Quote','2020-10-15 15:15:39'),
+(1629,'perl-Switch','perl-Switch','2020-10-15 15:15:39'),
+(1630,'perl-Sys-CPU','perl-Sys-CPU','2020-10-15 15:15:39'),
+(1631,'perl-Sys-MemInfo','perl-Sys-MemInfo','2020-10-15 15:15:39'),
+(1632,'perl-Sys-Syslog','perl-Sys-Syslog','2020-10-15 15:15:39'),
+(1633,'perl-Term-ANSIColor','perl-Term-ANSIColor','2020-10-15 15:15:39'),
+(1634,'perl-Term-Cap','perl-Term-Cap','2020-10-15 15:15:39'),
+(1635,'perl-Term-UI','perl-Term-UI','2020-10-15 15:15:39'),
+(1636,'perl-TermReadKey','perl-TermReadKey','2020-10-15 15:15:39'),
+(1637,'perl-Test-Deep','perl-Test-Deep','2020-10-15 15:15:39'),
+(1638,'perl-Test-FailWarnings','perl-Test-FailWarnings','2020-10-15 15:15:39'),
+(1639,'perl-Test-Fatal','perl-Test-Fatal','2020-10-15 15:15:39'),
+(1640,'perl-Test-File','perl-Test-File','2020-10-15 15:15:39'),
+(1641,'perl-Test-Harness','perl-Test-Harness','2020-10-15 15:15:39'),
+(1642,'perl-Test-Harness-3.43_01-3','perl-Test-Harness-3.43_01-3','2020-10-15 15:15:39'),
+(1643,'perl-Test-InDistDir','perl-Test-InDistDir','2020-10-15 15:15:39'),
+(1644,'perl-Test-LeakTrace','perl-Test-LeakTrace','2020-10-15 15:15:39'),
+(1645,'perl-Test-Needs','perl-Test-Needs','2020-10-15 15:15:39'),
+(1646,'perl-Test-NoWarnings','perl-Test-NoWarnings','2020-10-15 15:15:39'),
+(1647,'perl-Test-Pod','perl-Test-Pod','2020-10-15 15:15:39'),
+(1648,'perl-Test-Pod-Coverage','perl-Test-Pod-Coverage','2020-10-15 15:15:39'),
+(1649,'perl-Test-Requires','perl-Test-Requires','2020-10-15 15:15:39'),
+(1650,'perl-Test-Simple','perl-Test-Simple','2020-10-15 15:15:39'),
+(1651,'perl-Test-Warnings','perl-Test-Warnings','2020-10-15 15:15:39'),
+(1652,'perl-Text-Balanced','perl-Text-Balanced','2020-10-15 15:15:39'),
+(1653,'perl-Text-CharWidth','perl-Text-CharWidth','2020-10-15 15:15:39'),
+(1654,'perl-Text-Diff','perl-Text-Diff','2020-10-15 15:15:39'),
+(1655,'perl-Text-Glob','perl-Text-Glob','2020-10-15 15:15:39'),
+(1656,'perl-Text-ParseWords','perl-Text-ParseWords','2020-10-15 15:15:39'),
+(1657,'perl-Text-Soundex','perl-Text-Soundex','2020-10-15 15:15:39'),
+(1658,'perl-Text-Tabs+Wrap','perl-Text-Tabs+Wrap','2020-10-15 15:15:39'),
+(1659,'perl-Text-Template','perl-Text-Template','2020-10-15 15:15:39'),
+(1660,'perl-Text-Unidecode','perl-Text-Unidecode','2020-10-15 15:15:39'),
+(1661,'perl-Text-WrapI18N','perl-Text-WrapI18N','2020-10-15 15:15:39'),
+(1662,'perl-Thread-Queue','perl-Thread-Queue','2020-10-15 15:15:39'),
+(1663,'perl-Time-HiRes','perl-Time-HiRes','2020-10-15 15:15:39'),
+(1664,'perl-Time-Local','perl-Time-Local','2020-10-15 15:15:39'),
+(1665,'perl-TimeDate','perl-TimeDate','2020-10-15 15:15:39'),
+(1666,'perl-Try-Tiny','perl-Try-Tiny','2020-10-15 15:15:39'),
+(1667,'perl-URI','perl-URI','2020-10-15 15:15:39'),
+(1668,'perl-Unicode-Collate','perl-Unicode-Collate','2020-10-15 15:15:39'),
+(1669,'perl-Unicode-EastAsianWidth','perl-Unicode-EastAsianWidth','2020-10-15 15:15:39'),
+(1670,'perl-Unicode-LineBreak','perl-Unicode-LineBreak','2020-10-15 15:15:39'),
+(1671,'perl-Unicode-Normalize','perl-Unicode-Normalize','2020-10-15 15:15:39'),
+(1672,'perl-Unicode-UTF8','perl-Unicode-UTF8','2020-10-15 15:15:39'),
+(1673,'perl-Version-Requirements','perl-Version-Requirements','2020-10-15 15:15:39'),
+(1674,'perl-WWW-Curl','perl-WWW-Curl','2020-10-15 15:15:39'),
+(1675,'perl-WWW-RobotRules','perl-WWW-RobotRules','2020-10-15 15:15:39'),
+(1676,'perl-XML-Grove','perl-XML-Grove','2020-10-15 15:15:39'),
+(1677,'perl-XML-LibXML','perl-XML-LibXML','2020-10-15 15:15:39'),
+(1678,'perl-XML-NamespaceSupport','perl-XML-NamespaceSupport','2020-10-15 15:15:39'),
+(1679,'perl-XML-Parser','perl-XML-Parser','2020-10-15 15:15:39'),
+(1680,'perl-XML-SAX','perl-XML-SAX','2020-10-15 15:15:39'),
+(1681,'perl-XML-SAX-Base','perl-XML-SAX-Base','2020-10-15 15:15:39'),
+(1682,'perl-XML-SAX-Writer','perl-XML-SAX-Writer','2020-10-15 15:15:39'),
+(1683,'perl-XML-Twig','perl-XML-Twig','2020-10-15 15:15:39'),
+(1684,'perl-XML-Writer','perl-XML-Writer','2020-10-15 15:15:39'),
+(1685,'perl-XML-XPath','perl-XML-XPath','2020-10-15 15:15:39'),
+(1686,'perl-YAML','perl-YAML','2020-10-15 15:15:39'),
+(1687,'perl-YAML-Tiny','perl-YAML-Tiny','2020-10-15 15:15:39'),
+(1688,'perl-autodie','perl-autodie','2020-10-15 15:15:39'),
+(1689,'perl-bignum','perl-bignum','2020-10-15 15:15:39'),
+(1690,'perl-constant','perl-constant','2020-10-15 15:15:39'),
+(1691,'perl-experimental','perl-experimental','2020-10-15 15:15:39'),
+(1692,'perl-generators','perl-generators','2020-10-15 15:15:39'),
+(1693,'perl-gettext','perl-gettext','2020-10-15 15:15:39'),
+(1694,'perl-inc-latest','perl-inc-latest','2020-10-15 15:15:39'),
+(1695,'perl-libintl','perl-libintl','2020-10-15 15:15:39'),
+(1696,'perl-libintl-perl','perl-libintl-perl','2020-10-15 15:15:39'),
+(1697,'perl-libnet','perl-libnet','2020-10-15 15:15:39'),
+(1698,'perl-libwww-perl','perl-libwww-perl','2020-10-15 15:15:39'),
+(1699,'perl-libxml-perl','perl-libxml-perl','2020-10-15 15:15:39'),
+(1700,'perl-local-lib','perl-local-lib','2020-10-15 15:15:39'),
+(1701,'perl-parent','perl-parent','2020-10-15 15:15:39'),
+(1702,'perl-perlfaq','perl-perlfaq','2020-10-15 15:15:39'),
+(1703,'perl-podlators','perl-podlators','2020-10-15 15:15:39'),
+(1704,'perl-srpm-macros','perl-srpm-macros','2020-10-15 15:15:39'),
+(1705,'perl-strictures','perl-strictures','2020-10-15 15:15:39'),
+(1706,'perl-threads','perl-threads','2020-10-15 15:15:39'),
+(1707,'perl-threads-shared','perl-threads-shared','2020-10-15 15:15:39'),
+(1708,'perl-version','perl-version','2020-10-15 15:15:39'),
+(1709,'perltidy','perltidy','2020-10-15 15:15:39'),
+(1710,'pesign','pesign','2020-10-15 15:15:39'),
+(1711,'pexpect','pexpect','2020-10-15 15:15:39'),
+(1712,'phodav','phodav','2020-10-15 15:15:39'),
+(1713,'php','php','2020-10-15 15:15:39'),
+(1714,'pidgin','pidgin','2020-10-15 15:15:39'),
+(1715,'pigz','pigz','2020-10-15 15:15:39'),
+(1716,'pinentry','pinentry','2020-10-15 15:15:39'),
+(1717,'pinfo','pinfo','2020-10-15 15:15:39'),
+(1718,'pipewire','pipewire','2020-10-15 15:15:39'),
+(1719,'pixman','pixman','2020-10-15 15:15:39'),
+(1720,'pkgconf','pkgconf','2020-10-15 15:15:40'),
+(1721,'pkgconfig','pkgconfig','2020-10-15 15:15:40'),
+(1722,'pki-core','pki-core','2020-10-15 15:15:40'),
+(1723,'plymouth','plymouth','2020-10-15 15:15:40'),
+(1724,'pm-utils','pm-utils','2020-10-15 15:15:40'),
+(1725,'pngquant','pngquant','2020-10-15 15:15:40'),
+(1726,'pnm2ppa','pnm2ppa','2020-10-15 15:15:40'),
+(1727,'po4a','po4a','2020-10-15 15:15:40'),
+(1728,'policycoreutils','policycoreutils','2020-10-15 15:15:40'),
+(1729,'polkit','polkit','2020-10-15 15:15:40'),
+(1730,'polkit-gnome','polkit-gnome','2020-10-15 15:15:40'),
+(1731,'polkit-pkla-compat','polkit-pkla-compat','2020-10-15 15:15:40'),
+(1732,'polkit-qt','polkit-qt','2020-10-15 15:15:40'),
+(1733,'poppler','poppler','2020-10-15 15:15:40'),
+(1734,'poppler-data','poppler-data','2020-10-15 15:15:40'),
+(1735,'popt','popt','2020-10-15 15:15:40'),
+(1736,'portreserve','portreserve','2020-10-15 15:15:40'),
+(1737,'postfix','postfix','2020-10-15 15:15:40'),
+(1738,'postgresql','postgresql','2020-10-15 15:15:40'),
+(1739,'postgresql-jdbc','postgresql-jdbc','2020-10-15 15:15:40'),
+(1740,'postgresql-odbc','postgresql-odbc','2020-10-15 15:15:40'),
+(1741,'pothana2000-fonts','pothana2000-fonts','2020-10-15 15:15:40'),
+(1742,'powertop','powertop','2020-10-15 15:15:40'),
+(1743,'ppp','ppp,point-to-point_protocol','2020-10-15 15:15:40'),
+(1744,'pps-tools','pps-tools','2020-10-15 15:15:40'),
+(1745,'pptp','pptp','2020-10-15 15:15:40'),
+(1746,'prelink','prelink','2020-10-15 15:15:40'),
+(1747,'printk_buf_dev','printk_buf_dev','2020-10-15 15:15:40'),
+(1748,'printk_buf_dev-kmod','printk_buf_dev-kmod','2020-10-15 15:15:40'),
+(1749,'procinfo','procinfo','2020-10-15 15:15:40'),
+(1750,'procmail','procmail','2020-10-15 15:15:40'),
+(1751,'procps-ng','procps-ng','2020-10-15 15:15:40'),
+(1752,'protobuf','protobuf','2020-10-15 15:15:40'),
+(1753,'protobuf-c','protobuf-c','2020-10-15 15:15:40'),
+(1754,'ps_mem','ps_mem','2020-10-15 15:15:40'),
+(1755,'psacct','psacct','2020-10-15 15:15:40'),
+(1756,'psmisc','psmisc','2020-10-15 15:15:40'),
+(1757,'psutils','psutils','2020-10-15 15:15:40'),
+(1758,'pth','pth','2020-10-15 15:15:40'),
+(1759,'publicsuffix-list','publicsuffix-list','2020-10-15 15:15:40'),
+(1760,'pulseaudio','pulseaudio','2020-10-15 15:15:40'),
+(1761,'pyOpenSSL','pyOpenSSL','2020-10-15 15:15:40'),
+(1762,'pyatspi','pyatspi','2020-10-15 15:15:40'),
+(1763,'pycairo','pycairo','2020-10-15 15:15:40'),
+(1764,'pyelftools','pyelftools','2020-10-15 15:15:40'),
+(1765,'pyflakes','pyflakes','2020-10-15 15:15:40'),
+(1766,'pygobject2','pygobject2','2020-10-15 15:15:40'),
+(1767,'pygobject3','pygobject3','2020-10-15 15:15:40'),
+(1768,'pygpgme','pygpgme','2020-10-15 15:15:40'),
+(1769,'pygtk2','pygtk2','2020-10-15 15:15:40'),
+(1770,'pykickstart','pykickstart','2020-10-15 15:15:40'),
+(1771,'pyliblzma','pyliblzma','2020-10-15 15:15:40'),
+(1772,'pyorbit','pyorbit','2020-10-15 15:15:40'),
+(1773,'pyparsing','pyparsing','2020-10-15 15:15:40'),
+(1774,'pyparted','pyparted','2020-10-15 15:15:40'),
+(1775,'pyserial','pyserial','2020-10-15 15:15:40'),
+(1776,'pytest','pytest','2020-10-15 15:15:40'),
+(1777,'python','python','2020-10-15 15:15:40'),
+(1778,'python-IPy','python-IPy','2020-10-15 15:15:40'),
+(1779,'python-PyMySQL','python-PyMySQL','2020-10-15 15:15:40'),
+(1780,'python-SecretStorage','python-SecretStorage','2020-10-15 15:15:40'),
+(1781,'python-aniso8601','python-aniso8601','2020-10-15 15:15:40'),
+(1782,'python-asn1crypto','python-asn1crypto','2020-10-15 15:15:40'),
+(1783,'python-atomicwrites','python-atomicwrites','2020-10-15 15:15:40'),
+(1784,'python-attrs','python-attrs','2020-10-15 15:15:40'),
+(1785,'python-augeas','python-augeas','2020-10-15 15:15:40'),
+(1786,'python-backports','python-backports','2020-10-15 15:15:40'),
+(1787,'python-backports-ssl_match_hostname','python-backports-ssl_match_hostname','2020-10-15 15:15:40'),
+(1788,'python-backports-unittest_mock','python-backports-unittest_mock','2020-10-15 15:15:40'),
+(1789,'python-backports_abc','python-backports_abc','2020-10-15 15:15:40'),
+(1790,'python-bcrypt','python-bcrypt','2020-10-15 15:15:40'),
+(1791,'python-beaker','python-beaker','2020-10-15 15:15:40'),
+(1792,'python-beautifulsoup4','python-beautifulsoup4','2020-10-15 15:15:40'),
+(1793,'python-blinker','python-blinker','2020-10-15 15:15:40'),
+(1794,'python-blivet','python-blivet','2020-10-15 15:15:40'),
+(1795,'python-boto','python-boto','2020-10-15 15:15:40'),
+(1796,'python-bottle','python-bottle','2020-10-15 15:15:40'),
+(1797,'python-cffi','python-cffi','2020-10-15 15:15:40'),
+(1798,'python-chardet','python-chardet','2020-10-15 15:15:40'),
+(1799,'python-cheetah','python-cheetah','2020-10-15 15:15:40'),
+(1800,'python-cherrypy','python-cherrypy','2020-10-15 15:15:40'),
+(1801,'python-click','python-click','2020-10-15 15:15:40'),
+(1802,'python-configobj','python-configobj','2020-10-15 15:15:40'),
+(1803,'python-configparser','python-configparser','2020-10-15 15:15:40'),
+(1804,'python-configshell','python-configshell','2020-10-15 15:15:40'),
+(1805,'python-construct','python-construct','2020-10-15 15:15:40'),
+(1806,'python-coverage','python-coverage','2020-10-15 15:15:40'),
+(1807,'python-cpio','python-cpio','2020-10-15 15:15:40'),
+(1808,'python-crypto','python-crypto','2020-10-15 15:15:40'),
+(1809,'python-cryptography','python-cryptography','2020-10-15 15:15:40'),
+(1810,'python-cryptography-vectors','python-cryptography-vectors','2020-10-15 15:15:40'),
+(1811,'python-cups','python-cups','2020-10-15 15:15:40'),
+(1812,'python-dateutil','python-dateutil','2020-10-15 15:15:40'),
+(1813,'python-decorator','python-decorator','2020-10-15 15:15:40'),
+(1814,'python-di','python-di','2020-10-15 15:15:40'),
+(1815,'python-dict2xml','python-dict2xml','2020-10-15 15:15:40'),
+(1816,'python-distro','python-distro','2020-10-15 15:15:40'),
+(1817,'python-dmidecode','python-dmidecode','2020-10-15 15:15:40'),
+(1818,'python-dns','python-dns','2020-10-15 15:15:40'),
+(1819,'python-docker','python-docker','2020-10-15 15:15:40'),
+(1820,'python-docker-pycreds','python-docker-pycreds','2020-10-15 15:15:40'),
+(1821,'python-dockerpty','python-dockerpty','2020-10-15 15:15:40'),
+(1822,'python-docopt','python-docopt','2020-10-15 15:15:40'),
+(1823,'python-docs','python-docs','2020-10-15 15:15:40'),
+(1824,'python-docutils','python-docutils','2020-10-15 15:15:40'),
+(1825,'python-ecdsa','python-ecdsa','2020-10-15 15:15:40'),
+(1826,'python-enchant','python-enchant','2020-10-15 15:15:40'),
+(1827,'python-entrypoints','python-entrypoints','2020-10-15 15:15:40'),
+(1828,'python-enum34','python-enum34','2020-10-15 15:15:40'),
+(1829,'python-ethtool','python-ethtool','2020-10-15 15:15:40'),
+(1830,'python-extras','python-extras','2020-10-15 15:15:40'),
+(1831,'python-fixtures','python-fixtures','2020-10-15 15:15:40'),
+(1832,'python-flake8','python-flake8','2020-10-15 15:15:40'),
+(1833,'python-flask','python-flask','2020-10-15 15:15:40'),
+(1834,'python-flit','python-flit','2020-10-15 15:15:41'),
+(1835,'python-freezegun','python-freezegun','2020-10-15 15:15:41'),
+(1836,'python-funcsigs','python-funcsigs','2020-10-15 15:15:41'),
+(1837,'python-futures','python-futures','2020-10-15 15:15:41'),
+(1838,'python-genshi','python-genshi','2020-10-15 15:15:41'),
+(1839,'python-gevent','python-gevent','2020-10-15 15:15:41'),
+(1840,'python-gflags','python-gflags','2020-10-15 15:15:41'),
+(1841,'python-google-apputils','python-google-apputils','2020-10-15 15:15:41'),
+(1842,'python-greenlet','python-greenlet','2020-10-15 15:15:41'),
+(1843,'python-gssapi','python-gssapi','2020-10-15 15:15:41'),
+(1844,'python-gudev','python-gudev','2020-10-15 15:15:41'),
+(1845,'python-html5lib','python-html5lib','2020-10-15 15:15:41'),
+(1846,'python-httplib2','python-httplib2','2020-10-15 15:15:41'),
+(1847,'python-httpretty','python-httpretty','2020-10-15 15:15:41'),
+(1848,'python-humanize','python-humanize','2020-10-15 15:15:41'),
+(1849,'python-hwdata','python-hwdata','2020-10-15 15:15:41'),
+(1850,'python-hypothesis','python-hypothesis','2020-10-15 15:15:41'),
+(1851,'python-idna','python-idna','2020-10-15 15:15:41'),
+(1852,'python-imagesize','python-imagesize','2020-10-15 15:15:41'),
+(1853,'python-iniparse','python-iniparse','2020-10-15 15:15:41'),
+(1854,'python-inotify','python-inotify','2020-10-15 15:15:41'),
+(1855,'python-ipaddr','python-ipaddr','2020-10-15 15:15:41'),
+(1856,'python-ipaddress','python-ipaddress','2020-10-15 15:15:41'),
+(1857,'python-iso8601','python-iso8601','2020-10-15 15:15:41'),
+(1858,'python-itsdangerous','python-itsdangerous','2020-10-15 15:15:41'),
+(1859,'python-jinja2','python-jinja2','2020-10-15 15:15:41'),
+(1860,'python-joblib','python-joblib','2020-10-15 15:15:41'),
+(1861,'python-jsonpatch','python-jsonpatch','2020-10-15 15:15:41'),
+(1862,'python-jsonpointer','python-jsonpointer','2020-10-15 15:15:41'),
+(1863,'python-jsonschema','python-jsonschema','2020-10-15 15:15:41'),
+(1864,'python-jwcrypto','python-jwcrypto','2020-10-15 15:15:41'),
+(1865,'python-jwt','python-jwt','2020-10-15 15:15:41'),
+(1866,'python-kdcproxy','python-kdcproxy','2020-10-15 15:15:41'),
+(1867,'python-kerberos','python-kerberos','2020-10-15 15:15:41'),
+(1868,'python-keyring','python-keyring','2020-10-15 15:15:41'),
+(1869,'python-kitchen','python-kitchen','2020-10-15 15:15:41'),
+(1870,'python-kmod','python-kmod','2020-10-15 15:15:41'),
+(1871,'python-ldap','python-ldap','2020-10-15 15:15:41'),
+(1872,'python-linecache2','python-linecache2','2020-10-15 15:15:41'),
+(1873,'python-linux-procfs','python-linux-procfs','2020-10-15 15:15:41'),
+(1874,'python-lit','python-lit','2020-10-15 15:15:41'),
+(1875,'python-lxml','python-lxml','2020-10-15 15:15:41'),
+(1876,'python-mako','python-mako','2020-10-15 15:15:41'),
+(1877,'python-markdown','python-markdown','2020-10-15 15:15:41'),
+(1878,'python-markupsafe','python-markupsafe','2020-10-15 15:15:41'),
+(1879,'python-matplotlib','python-matplotlib','2020-10-15 15:15:41'),
+(1880,'python-mccabe','python-mccabe','2020-10-15 15:15:41'),
+(1881,'python-meh','python-meh','2020-10-15 15:15:41'),
+(1882,'python-memcached','python-memcached','2020-10-15 15:15:41'),
+(1883,'python-mimeparse','python-mimeparse','2020-10-15 15:15:41'),
+(1884,'python-mock','python-mock','2020-10-15 15:15:41'),
+(1885,'python-more-itertools','python-more-itertools','2020-10-15 15:15:41'),
+(1886,'python-mox','python-mox','2020-10-15 15:15:41'),
+(1887,'python-netaddr','python-netaddr','2020-10-15 15:15:41'),
+(1888,'python-netifaces','python-netifaces','2020-10-15 15:15:41'),
+(1889,'python-nose','python-nose','2020-10-15 15:15:41'),
+(1890,'python-nss','python-nss','2020-10-15 15:15:41'),
+(1891,'python-ntplib','python-ntplib','2020-10-15 15:15:41'),
+(1892,'python-oauthlib','python-oauthlib','2020-10-15 15:15:41'),
+(1893,'python-olefile','python-olefile','2020-10-15 15:15:41'),
+(1894,'python-ordered-set','python-ordered-set','2020-10-15 15:15:41'),
+(1895,'python-packaging','python-packaging','2020-10-15 15:15:41'),
+(1896,'python-pandas','python-pandas','2020-10-15 15:15:41'),
+(1897,'python-paramiko','python-paramiko','2020-10-15 15:15:41'),
+(1898,'python-paste','python-paste','2020-10-15 15:15:41'),
+(1899,'python-pbr','python-pbr','2020-10-15 15:15:41'),
+(1900,'python-pep8','python-pep8','2020-10-15 15:15:41'),
+(1901,'python-pexpect','python-pexpect','2020-10-15 15:15:41'),
+(1902,'python-pid','python-pid','2020-10-15 15:15:41'),
+(1903,'python-pillow','python-pillow','2020-10-15 15:15:41'),
+(1904,'python-pip','python-pip','2020-10-15 15:15:41'),
+(1905,'python-pluggy','python-pluggy','2020-10-15 15:15:41'),
+(1906,'python-ply','python-ply','2020-10-15 15:15:41'),
+(1907,'python-pocketlint','python-pocketlint','2020-10-15 15:15:41'),
+(1908,'python-polib','python-polib','2020-10-15 15:15:41'),
+(1909,'python-pretend','python-pretend','2020-10-15 15:15:41'),
+(1910,'python-prettytable','python-prettytable','2020-10-15 15:15:41'),
+(1911,'python-productmd','python-productmd','2020-10-15 15:15:41'),
+(1912,'python-progressbar','python-progressbar','2020-10-15 15:15:41'),
+(1913,'python-psutil','python-psutil','2020-10-15 15:15:41'),
+(1914,'python-psycopg2','python-psycopg2','2020-10-15 15:15:41'),
+(1915,'python-ptyprocess','python-ptyprocess','2020-10-15 15:15:41'),
+(1916,'python-py','python-py','2020-10-15 15:15:41'),
+(1917,'python-pyasn1','python-pyasn1','2020-10-15 15:15:41'),
+(1918,'python-pyblock','python-pyblock','2020-10-15 15:15:41'),
+(1919,'python-pycparser','python-pycparser','2020-10-15 15:15:41'),
+(1920,'python-pycurl','python-pycurl','2020-10-15 15:15:41'),
+(1921,'python-pydbus','python-pydbus','2020-10-15 15:15:41'),
+(1922,'python-pygments','python-pygments','2020-10-15 15:15:41'),
+(1923,'python-pymongo','python-pymongo','2020-10-15 15:15:41'),
+(1924,'python-pynacl','python-pynacl','2020-10-15 15:15:41'),
+(1925,'python-pysocks','python-pysocks','2020-10-15 15:15:41'),
+(1926,'python-pytest-cov','python-pytest-cov','2020-10-15 15:15:41'),
+(1927,'python-pytest-expect','python-pytest-expect','2020-10-15 15:15:41'),
+(1928,'python-pytest-fixture-config','python-pytest-fixture-config','2020-10-15 15:15:41'),
+(1929,'python-pytest-mock','python-pytest-mock','2020-10-15 15:15:41'),
+(1930,'python-pytest-virtualenv','python-pytest-virtualenv','2020-10-15 15:15:41'),
+(1931,'python-pytoml','python-pytoml','2020-10-15 15:15:41'),
+(1932,'python-pyudev','python-pyudev','2020-10-15 15:15:41'),
+(1933,'python-qrcode','python-qrcode','2020-10-15 15:15:41'),
+(1934,'python-redis','python-redis','2020-10-15 15:15:41'),
+(1935,'python-reportlab','python-reportlab','2020-10-15 15:15:41'),
+(1936,'python-repoze-lru','python-repoze-lru','2020-10-15 15:15:41'),
+(1937,'python-requests','python-requests','2020-10-15 15:15:41'),
+(1938,'python-requests-file','python-requests-file','2020-10-15 15:15:41'),
+(1939,'python-requests-ftp','python-requests-ftp','2020-10-15 15:15:41'),
+(1940,'python-rhsm','python-rhsm','2020-10-15 15:15:41'),
+(1941,'python-rpm-generators','python-rpm-generators','2020-10-15 15:15:41'),
+(1942,'python-rpm-macros','python-rpm-macros','2020-10-15 15:15:41'),
+(1943,'python-rsa','python-rsa','2020-10-15 15:15:41'),
+(1944,'python-rtslib','python-rtslib','2020-10-15 15:15:41'),
+(1945,'python-schedutils','python-schedutils','2020-10-15 15:15:41'),
+(1946,'python-scikit-learn','python-scikit-learn','2020-10-15 15:15:42'),
+(1947,'python-scikit-optimize','python-scikit-optimize','2020-10-15 15:15:42'),
+(1948,'python-semantic_version','python-semantic_version','2020-10-15 15:15:42'),
+(1949,'python-setproctitle','python-setproctitle','2020-10-15 15:15:42'),
+(1950,'python-setuptools','python-setuptools','2020-10-15 15:15:42'),
+(1951,'python-setuptools_git','python-setuptools_git','2020-10-15 15:15:42'),
+(1952,'python-setuptools_scm','python-setuptools_scm','2020-10-15 15:15:42'),
+(1953,'python-simpleline','python-simpleline','2020-10-15 15:15:42'),
+(1954,'python-singledispatch','python-singledispatch','2020-10-15 15:15:42'),
+(1955,'python-six','python-six','2020-10-15 15:15:42'),
+(1956,'python-slip','python-slip','2020-10-15 15:15:42'),
+(1957,'python-smbc','python-smbc','2020-10-15 15:15:42'),
+(1958,'python-snowballstemmer','python-snowballstemmer','2020-10-15 15:15:42'),
+(1959,'python-sphinx','python-sphinx','2020-10-15 15:15:42'),
+(1960,'python-sphinx-theme-alabaster','python-sphinx-theme-alabaster','2020-10-15 15:15:42'),
+(1961,'python-sphinx_rtd_theme','python-sphinx_rtd_theme','2020-10-15 15:15:42'),
+(1962,'python-sphinxcontrib-spelling','python-sphinxcontrib-spelling','2020-10-15 15:15:42'),
+(1963,'python-sphinxcontrib-websupport','python-sphinxcontrib-websupport','2020-10-15 15:15:42'),
+(1964,'python-sqlalchemy','python-sqlalchemy','2020-10-15 15:15:42'),
+(1965,'python-suds','python-suds','2020-10-15 15:15:42'),
+(1966,'python-sure','python-sure','2020-10-15 15:15:42'),
+(1967,'python-systemd','python-systemd','2020-10-15 15:15:42'),
+(1968,'python-tempita','python-tempita','2020-10-15 15:15:42'),
+(1969,'python-testscenarios','python-testscenarios','2020-10-15 15:15:42'),
+(1970,'python-testtools','python-testtools','2020-10-15 15:15:42'),
+(1971,'python-threadpoolctl','python-threadpoolctl','2020-10-15 15:15:42'),
+(1972,'python-tornado','python-tornado','2020-10-15 15:15:42'),
+(1973,'python-traceback2','python-traceback2','2020-10-15 15:15:42'),
+(1974,'python-u-msgpack-python','python-u-msgpack-python','2020-10-15 15:15:42'),
+(1975,'python-unittest2','python-unittest2','2020-10-15 15:15:42'),
+(1976,'python-urlgrabber','python-urlgrabber','2020-10-15 15:15:42'),
+(1977,'python-urllib3','python-urllib3','2020-10-15 15:15:42'),
+(1978,'python-urwid','python-urwid','2020-10-15 15:15:42'),
+(1979,'python-virtualenv','python-virtualenv','2020-10-15 15:15:42'),
+(1980,'python-waitress','python-waitress','2020-10-15 15:15:42'),
+(1981,'python-webencodings','python-webencodings','2020-10-15 15:15:42'),
+(1982,'python-websocket-client','python-websocket-client','2020-10-15 15:15:42'),
+(1983,'python-webtest','python-webtest','2020-10-15 15:15:42'),
+(1984,'python-werkzeug','python-werkzeug','2020-10-15 15:15:42'),
+(1985,'python-wheel','python-wheel','2020-10-15 15:15:42'),
+(1986,'python-which','python-which','2020-10-15 15:15:42'),
+(1987,'python-whoosh','python-whoosh','2020-10-15 15:15:42'),
+(1988,'python-xgboost','python-xgboost','2020-10-15 15:15:42'),
+(1989,'python-yubico','python-yubico','2020-10-15 15:15:42'),
+(1990,'python-zope-interface','python-zope-interface','2020-10-15 15:15:42'),
+(1991,'python2','python2,Python / CPython,python','2020-10-15 15:15:42'),
+(1992,'python2-typing','python2-typing','2020-10-15 15:15:42'),
+(1993,'python3','python3,CPython,python','2020-10-15 15:15:42'),
+(1994,'python3-mallard-ducktype','python3-mallard-ducktype','2020-10-15 15:15:42'),
+(1995,'pytz','pytz','2020-10-15 15:15:42'),
+(1996,'pyusb','pyusb','2020-10-15 15:15:42'),
+(1997,'pywbem','pywbem','2020-10-15 15:15:42'),
+(1998,'pyxattr','pyxattr','2020-10-15 15:15:42'),
+(1999,'pyxdg','pyxdg','2020-10-15 15:15:42'),
+(2000,'qat-engine','qat-engine','2020-10-15 15:15:42'),
+(2001,'qca-ossl','qca-ossl','2020-10-15 15:15:42'),
+(2002,'qca2','qca2','2020-10-15 15:15:42'),
+(2003,'qdox','qdox','2020-10-15 15:15:42'),
+(2004,'qemu','qemu','2020-10-15 15:15:42'),
+(2005,'qemu-guest-agent','qemu-guest-agent','2020-10-15 15:15:42'),
+(2006,'qemu-kvm','qemu-kvm','2020-10-15 15:15:42'),
+(2007,'qimageblitz','qimageblitz','2020-10-15 15:15:42'),
+(2008,'qjson','qjson','2020-10-15 15:15:42'),
+(2009,'qpdf','qpdf','2020-10-15 15:15:42'),
+(2010,'qperf','qperf','2020-10-15 15:15:42'),
+(2011,'qpid-proton','qpid-proton','2020-10-15 15:15:42'),
+(2012,'qrencode','qrencode','2020-10-15 15:15:42'),
+(2013,'qt','qt','2020-10-15 15:15:42'),
+(2014,'qt3','qt3','2020-10-15 15:15:42'),
+(2015,'qt5','qt5','2020-10-15 15:15:42'),
+(2016,'qt5-qtbase','qt5-qtbase','2020-10-15 15:15:42'),
+(2017,'qt5-qtdeclarative','qt5-qtdeclarative','2020-10-15 15:15:42'),
+(2018,'qt5-qtmultimedia','qt5-qtmultimedia','2020-10-15 15:15:42'),
+(2019,'qt5-qtsvg','qt5-qtsvg','2020-10-15 15:15:42'),
+(2020,'qt5-qttools','qt5-qttools','2020-10-15 15:15:42'),
+(2021,'qt5-qtxmlpatterns','qt5-qtxmlpatterns','2020-10-15 15:15:42'),
+(2022,'quagga','quagga','2020-10-15 15:15:42'),
+(2023,'quota','quota','2020-10-15 15:15:42'),
+(2024,'radvd','radvd','2020-10-15 15:15:42'),
+(2025,'ramdisk-root','ramdisk-root','2020-10-15 15:15:42'),
+(2026,'raptor2','raptor2','2020-10-15 15:15:42'),
+(2027,'rarian','rarian','2020-10-15 15:15:42'),
+(2028,'rasdaemon','rasdaemon','2020-10-15 15:15:42'),
+(2029,'rasqal','rasqal','2020-10-15 15:15:42'),
+(2030,'rcs','rcs','2020-10-15 15:15:42'),
+(2031,'rdate','rdate','2020-10-15 15:15:42'),
+(2032,'rdist','rdist','2020-10-15 15:15:42'),
+(2033,'rdma-core','rdma-core','2020-10-15 15:15:42'),
+(2034,'readline','readline','2020-10-15 15:15:42'),
+(2035,'realmd','realmd','2020-10-15 15:15:42'),
+(2036,'rear','rear','2020-10-15 15:15:42'),
+(2037,'recode','recode','2020-10-15 15:15:42'),
+(2038,'redhat-lsb','redhat-lsb','2020-10-15 15:15:42'),
+(2039,'redhat-menus','redhat-menus','2020-10-15 15:15:42'),
+(2040,'redhat-rpm-config','redhat-rpm-config','2020-10-15 15:15:42'),
+(2041,'redhat-upgrade-dracut','redhat-upgrade-dracut','2020-10-15 15:15:42'),
+(2042,'redis','redis','2020-10-15 15:15:42'),
+(2043,'redland','redland','2020-10-15 15:15:42'),
+(2044,'reg_feeddog','reg_feeddog','2020-10-15 15:15:42'),
+(2045,'regexp','regexp','2020-10-15 15:15:42'),
+(2046,'reiserfs-utils','reiserfs-utils','2020-10-15 15:15:42'),
+(2047,'rest','rest','2020-10-15 15:15:42'),
+(2048,'resteasy-base','resteasy-base','2020-10-15 15:15:42'),
+(2049,'rfkill','rfkill','2020-10-15 15:15:42'),
+(2050,'rhash','rhash','2020-10-15 15:15:42'),
+(2051,'rhdb-utils','rhdb-utils','2020-10-15 15:15:42'),
+(2052,'rhino','rhino','2020-10-15 15:15:42'),
+(2053,'rng-tools','rng-tools','2020-10-15 15:15:42'),
+(2054,'rngom','rngom','2020-10-15 15:15:42'),
+(2055,'rootfiles','rootfiles','2020-10-15 15:15:42'),
+(2056,'rootsh','rootsh','2020-10-15 15:15:42'),
+(2057,'rp-pppoe','rp-pppoe','2020-10-15 15:15:42'),
+(2058,'rpcbind','rpcbind','2020-10-15 15:15:43'),
+(2059,'rpcsvc-proto','rpcsvc-proto','2020-10-15 15:15:43'),
+(2060,'rpm','rpm','2020-10-15 15:15:43'),
+(2061,'rpm-mpi-hooks','rpm-mpi-hooks','2020-10-15 15:15:43'),
+(2062,'rpm-ostree','rpm-ostree','2020-10-15 15:15:43'),
+(2063,'rpmdevtools','rpmdevtools','2020-10-15 15:15:43'),
+(2064,'rpmlint','rpmlint','2020-10-15 15:15:43'),
+(2065,'rpmrebuild','rpmrebuild','2020-10-15 15:15:43'),
+(2066,'rrdtool','rrdtool','2020-10-15 15:15:43'),
+(2067,'rsh','rsh','2020-10-15 15:15:43'),
+(2068,'rsync','rsync','2020-10-15 15:15:43'),
+(2069,'rsyslog','rsyslog','2020-10-15 15:15:43'),
+(2070,'rtkit','rtkit','2020-10-15 15:15:43'),
+(2071,'ruby','ruby,Ruby','2020-10-15 15:15:43'),
+(2072,'rubygem-abrt','rubygem-abrt','2020-10-15 15:15:43'),
+(2073,'rubygem-asciidoctor','rubygem-asciidoctor','2020-10-15 15:15:43'),
+(2074,'rubygem-bundler','rubygem-bundler','2020-10-15 15:15:43'),
+(2075,'rubygem-net-http-persistent','rubygem-net-http-persistent','2020-10-15 15:15:43'),
+(2076,'rubygem-thor','rubygem-thor','2020-10-15 15:15:43'),
+(2077,'rusers','rusers','2020-10-15 15:15:43'),
+(2078,'rust','rust','2020-10-15 15:15:43'),
+(2079,'rust-srpm-macros','rust-srpm-macros','2020-10-15 15:15:43'),
+(2080,'rwho','rwho','2020-10-15 15:15:43'),
+(2081,'s3fs-fuse','s3fs-fuse','2020-10-15 15:15:43'),
+(2082,'saab-fonts','saab-fonts','2020-10-15 15:15:43'),
+(2083,'samba','samba,Samba','2020-10-15 15:15:43'),
+(2084,'samyak-fonts','samyak-fonts','2020-10-15 15:15:43'),
+(2085,'sane-backends','sane-backends','2020-10-15 15:15:43'),
+(2086,'sane-frontends','sane-frontends','2020-10-15 15:15:43'),
+(2087,'sanlock','sanlock','2020-10-15 15:15:43'),
+(2088,'sassc','sassc','2020-10-15 15:15:43'),
+(2089,'satyr','satyr','2020-10-15 15:15:43'),
+(2090,'sbc','sbc','2020-10-15 15:15:43'),
+(2091,'sblim-cim-client2','sblim-cim-client2','2020-10-15 15:15:43'),
+(2092,'sblim-cmpi-base','sblim-cmpi-base','2020-10-15 15:15:43'),
+(2093,'sblim-cmpi-devel','sblim-cmpi-devel','2020-10-15 15:15:43'),
+(2094,'sblim-cmpi-fsvol','sblim-cmpi-fsvol','2020-10-15 15:15:43'),
+(2095,'sblim-cmpi-network','sblim-cmpi-network','2020-10-15 15:15:43'),
+(2096,'sblim-cmpi-nfsv3','sblim-cmpi-nfsv3','2020-10-15 15:15:43'),
+(2097,'sblim-cmpi-nfsv4','sblim-cmpi-nfsv4','2020-10-15 15:15:43'),
+(2098,'sblim-cmpi-params','sblim-cmpi-params','2020-10-15 15:15:43'),
+(2099,'sblim-cmpi-sysfs','sblim-cmpi-sysfs','2020-10-15 15:15:43'),
+(2100,'sblim-cmpi-syslog','sblim-cmpi-syslog','2020-10-15 15:15:43'),
+(2101,'sblim-gather','sblim-gather','2020-10-15 15:15:43'),
+(2102,'sblim-indication_helper','sblim-indication_helper','2020-10-15 15:15:43'),
+(2103,'sblim-sfcCommon','sblim-sfcCommon','2020-10-15 15:15:43'),
+(2104,'sblim-sfcb','sblim-sfcb','2020-10-15 15:15:43'),
+(2105,'sblim-sfcc','sblim-sfcc','2020-10-15 15:15:43'),
+(2106,'sblim-smis-hba','sblim-smis-hba','2020-10-15 15:15:43'),
+(2107,'sblim-wbemcli','sblim-wbemcli','2020-10-15 15:15:43'),
+(2108,'scannotation','scannotation','2020-10-15 15:15:43'),
+(2109,'scap-security-guide','scap-security-guide','2020-10-15 15:15:43'),
+(2110,'scap-workbench','scap-workbench','2020-10-15 15:15:43'),
+(2111,'scipy','scipy','2020-10-15 15:15:43'),
+(2112,'scl-utils','scl-utils','2020-10-15 15:15:43'),
+(2113,'screen','screen','2020-10-15 15:15:43'),
+(2114,'scrub','scrub','2020-10-15 15:15:43'),
+(2115,'sdparm','sdparm','2020-10-15 15:15:43'),
+(2116,'seabios','seabios','2020-10-15 15:15:43'),
+(2117,'seahorse','seahorse','2020-10-15 15:15:43'),
+(2118,'seahorse-nautilus','seahorse-nautilus','2020-10-15 15:15:43'),
+(2119,'seahorse-sharing','seahorse-sharing','2020-10-15 15:15:43'),
+(2120,'securec','securec','2020-10-15 15:15:43'),
+(2121,'security-tool','security-tool','2020-10-15 15:15:43'),
+(2122,'sed','sed','2020-10-15 15:15:43'),
+(2123,'selinux-policy','selinux-policy','2020-10-15 15:15:43'),
+(2124,'sendmail','sendmail','2020-10-15 15:15:43'),
+(2125,'setools','setools','2020-10-15 15:15:43'),
+(2126,'setroubleshoot','setroubleshoot','2020-10-15 15:15:43'),
+(2127,'setroubleshoot-plugins','setroubleshoot-plugins','2020-10-15 15:15:43'),
+(2128,'setserial','setserial','2020-10-15 15:15:43'),
+(2129,'setup','setup','2020-10-15 15:15:43'),
+(2130,'setuptool','setuptool','2020-10-15 15:15:43'),
+(2131,'sg3_utils','sg3_utils','2020-10-15 15:15:43'),
+(2132,'sgml-common','sgml-common','2020-10-15 15:15:43'),
+(2133,'sgpio','sgpio','2020-10-15 15:15:43'),
+(2134,'shadow','shadow','2020-10-15 15:15:43'),
+(2135,'shadow-utils','shadow-utils','2020-10-15 15:15:43'),
+(2136,'shared-desktop-ontologies','shared-desktop-ontologies','2020-10-15 15:15:43'),
+(2137,'shared-mime-info','shared-mime-info','2020-10-15 15:15:43'),
+(2138,'sharutils','sharutils','2020-10-15 15:15:43'),
+(2139,'shim','shim','2020-10-15 15:15:43'),
+(2140,'shim-signed','shim-signed','2020-10-15 15:15:43'),
+(2141,'sign-euleros','sign-euleros','2020-10-15 15:15:43'),
+(2142,'sil-abyssinica-fonts','sil-abyssinica-fonts','2020-10-15 15:15:43'),
+(2143,'sil-nuosu-fonts','sil-nuosu-fonts','2020-10-15 15:15:43'),
+(2144,'sil-padauk-fonts','sil-padauk-fonts','2020-10-15 15:15:43'),
+(2145,'sil-scheherazade-fonts','sil-scheherazade-fonts','2020-10-15 15:15:43'),
+(2146,'sip','sip','2020-10-15 15:15:43'),
+(2147,'skkdic','skkdic','2020-10-15 15:15:43'),
+(2148,'skopeo','skopeo','2020-10-15 15:15:43'),
+(2149,'slang','slang','2020-10-15 15:15:43'),
+(2150,'slapi-nis','slapi-nis','2020-10-15 15:15:43'),
+(2151,'slf4j','slf4j','2020-10-15 15:15:43'),
+(2152,'smartmontools','smartmontools','2020-10-15 15:15:43'),
+(2153,'smc-fonts','smc-fonts','2020-10-15 15:15:43'),
+(2154,'smc-tools','smc-tools','2020-10-15 15:15:43'),
+(2155,'smp_utils','smp_utils','2020-10-15 15:15:43'),
+(2156,'snapper','snapper','2020-10-15 15:15:43'),
+(2157,'snappy','snappy','2020-10-15 15:15:43'),
+(2158,'socat','socat','2020-10-15 15:15:43'),
+(2159,'socket_wrapper','socket_wrapper','2020-10-15 15:15:43'),
+(2160,'softhsm','softhsm','2020-10-15 15:15:43'),
+(2161,'sombok','sombok','2020-10-15 15:15:43'),
+(2162,'soprano','soprano','2020-10-15 15:15:43'),
+(2163,'sos','sos','2020-10-15 15:15:43'),
+(2164,'sound-theme-freedesktop','sound-theme-freedesktop','2020-10-15 15:15:43'),
+(2165,'soundtouch','soundtouch','2020-10-15 15:15:43'),
+(2166,'source-highlight','source-highlight','2020-10-15 15:15:43'),
+(2167,'sox','sox','2020-10-15 15:15:43'),
+(2168,'spamassassin','spamassassin','2020-10-15 15:15:44'),
+(2169,'speech-dispatcher','speech-dispatcher','2020-10-15 15:15:44'),
+(2170,'speex','speex','2020-10-15 15:15:44'),
+(2171,'speexdsp','speexdsp','2020-10-15 15:15:44'),
+(2172,'spice','spice','2020-10-15 15:15:44'),
+(2173,'spice-gtk','spice-gtk','2020-10-15 15:15:44'),
+(2174,'spice-protocol','spice-protocol','2020-10-15 15:15:44'),
+(2175,'spice-vdagent','spice-vdagent','2020-10-15 15:15:44'),
+(2176,'spice-xpi','spice-xpi','2020-10-15 15:15:44'),
+(2177,'sqlite','sqlite','2020-10-15 15:15:44'),
+(2178,'squashfs-tools','squashfs-tools','2020-10-15 15:15:44'),
+(2179,'squid','squid','2020-10-15 15:15:44'),
+(2180,'srt','srt','2020-10-15 15:15:44'),
+(2181,'sscg','sscg','2020-10-15 15:15:44'),
+(2182,'sssd','sssd','2020-10-15 15:15:44'),
+(2183,'star','star','2020-10-15 15:15:44'),
+(2184,'startup-notification','startup-notification','2020-10-15 15:15:44'),
+(2185,'stax-ex','stax-ex','2020-10-15 15:15:44'),
+(2186,'stax2-api','stax2-api','2020-10-15 15:15:44'),
+(2187,'stix-fonts','stix-fonts','2020-10-15 15:15:44'),
+(2188,'storage-kdump-tools','storage-kdump-tools','2020-10-15 15:15:44'),
+(2189,'strace','strace','2020-10-15 15:15:44'),
+(2190,'strigi','strigi','2020-10-15 15:15:44'),
+(2191,'strongimcv','strongimcv','2020-10-15 15:15:44'),
+(2192,'stunnel','stunnel','2020-10-15 15:15:44'),
+(2193,'subscription-manager','subscription-manager','2020-10-15 15:15:44'),
+(2194,'subunit','subunit','2020-10-15 15:15:44'),
+(2195,'subversion','subversion','2020-10-15 15:15:44'),
+(2196,'sudo','sudo','2020-10-15 15:15:44'),
+(2197,'suitesparse','suitesparse','2020-10-15 15:15:44'),
+(2198,'supermin','supermin','2020-10-15 15:15:44'),
+(2199,'sushi','sushi','2020-10-15 15:15:44'),
+(2200,'svrcore','svrcore','2020-10-15 15:15:44'),
+(2201,'swig','swig','2020-10-15 15:15:44'),
+(2202,'switcheroo-control','switcheroo-control','2020-10-15 15:15:44'),
+(2203,'symlinks','symlinks','2020-10-15 15:15:44'),
+(2204,'sys-custom-tool','sys-custom-tool','2020-10-15 15:15:44'),
+(2205,'sysalarm','sysalarm','2020-10-15 15:15:44'),
+(2206,'sysalarm-agent-pangea','sysalarm-agent-pangea','2020-10-15 15:15:44'),
+(2207,'syscontainer-tools','syscontainer-tools','2020-10-15 15:15:44'),
+(2208,'sysfsutils','sysfsutils','2020-10-15 15:15:44'),
+(2209,'syslinux','syslinux','2020-10-15 15:15:44'),
+(2210,'sysmonitor','sysmonitor','2020-10-15 15:15:44'),
+(2211,'sysmonitor-kmod','sysmonitor-kmod','2020-10-15 15:15:44'),
+(2212,'sysmonitorcpu','sysmonitorcpu','2020-10-15 15:15:44'),
+(2213,'sysstat','sysstat','2020-10-15 15:15:44'),
+(2214,'system-config-date','system-config-date','2020-10-15 15:15:44'),
+(2215,'system-config-date-docs','system-config-date-docs','2020-10-15 15:15:44'),
+(2216,'system-config-firewall','system-config-firewall','2020-10-15 15:15:44'),
+(2217,'system-config-kdump','system-config-kdump','2020-10-15 15:15:44'),
+(2218,'system-config-keyboard','system-config-keyboard','2020-10-15 15:15:44'),
+(2219,'system-config-kickstart','system-config-kickstart','2020-10-15 15:15:44'),
+(2220,'system-config-language','system-config-language','2020-10-15 15:15:44'),
+(2221,'system-config-printer','system-config-printer','2020-10-15 15:15:44'),
+(2222,'system-config-users','system-config-users','2020-10-15 15:15:44'),
+(2223,'system-config-users-docs','system-config-users-docs','2020-10-15 15:15:44'),
+(2224,'system-startup','system-startup','2020-10-15 15:15:44'),
+(2225,'system-storage-manager','system-storage-manager','2020-10-15 15:15:44'),
+(2226,'system-switch-java','system-switch-java','2020-10-15 15:15:44'),
+(2227,'systemd','systemd','2020-10-15 15:15:44'),
+(2228,'systemtap','systemtap','2020-10-15 15:15:44'),
+(2229,'sysvinit','sysvinit','2020-10-15 15:15:44'),
+(2230,'t1lib','t1lib','2020-10-15 15:15:44'),
+(2231,'taglib','taglib','2020-10-15 15:15:44'),
+(2232,'tagsoup','tagsoup','2020-10-15 15:15:44'),
+(2233,'talk','talk','2020-10-15 15:15:44'),
+(2234,'tar','tar','2020-10-15 15:15:44'),
+(2235,'targetcli','targetcli','2020-10-15 15:15:44'),
+(2236,'targetd','targetd','2020-10-15 15:15:44'),
+(2237,'tbb','tbb','2020-10-15 15:15:44'),
+(2238,'tboot','tboot','2020-10-15 15:15:44'),
+(2239,'tcl','tcl','2020-10-15 15:15:44'),
+(2240,'tcl-pgtcl','tcl-pgtcl','2020-10-15 15:15:44'),
+(2241,'tcllib','tcllib','2020-10-15 15:15:44'),
+(2242,'tcp_wrappers','tcp_wrappers','2020-10-15 15:15:44'),
+(2243,'tcpdump','tcpdump','2020-10-15 15:15:44'),
+(2244,'tcsh','tcsh','2020-10-15 15:15:44'),
+(2245,'telepathy-farstream','telepathy-farstream','2020-10-15 15:15:44'),
+(2246,'telepathy-filesystem','telepathy-filesystem','2020-10-15 15:15:44'),
+(2247,'telepathy-gabble','telepathy-gabble','2020-10-15 15:15:44'),
+(2248,'telepathy-glib','telepathy-glib','2020-10-15 15:15:44'),
+(2249,'telepathy-haze','telepathy-haze','2020-10-15 15:15:44'),
+(2250,'telepathy-logger','telepathy-logger','2020-10-15 15:15:44'),
+(2251,'telepathy-mission-control','telepathy-mission-control','2020-10-15 15:15:44'),
+(2252,'telepathy-salut','telepathy-salut','2020-10-15 15:15:44'),
+(2253,'telnet','telnet','2020-10-15 15:15:44'),
+(2254,'tex-fonts-hebrew','tex-fonts-hebrew','2020-10-15 15:15:44'),
+(2255,'texi2html','texi2html','2020-10-15 15:15:44'),
+(2256,'texinfo','texinfo','2020-10-15 15:15:44'),
+(2257,'texlive','texlive','2020-10-15 15:15:44'),
+(2258,'texlive-base','texlive-base','2020-10-15 15:15:44'),
+(2259,'tftp','tftp','2020-10-15 15:15:44'),
+(2260,'thai-scalable-fonts','thai-scalable-fonts','2020-10-15 15:15:44'),
+(2261,'thin-provisioning-tools','thin-provisioning-tools','2020-10-15 15:15:44'),
+(2262,'tibetan-machine-uni-fonts','tibetan-machine-uni-fonts','2020-10-15 15:15:44'),
+(2263,'tigervnc','tigervnc','2020-10-15 15:15:44'),
+(2264,'time','time','2020-10-15 15:15:44'),
+(2265,'timedatex','timedatex','2020-10-15 15:15:44'),
+(2266,'tiny-firewall','tiny-firewall','2020-10-15 15:15:44'),
+(2267,'tinycdb','tinycdb','2020-10-15 15:15:44'),
+(2268,'tinyxml2','tinyxml2','2020-10-15 15:15:44'),
+(2269,'tipcutils','tipcutils','2020-10-15 15:15:44'),
+(2270,'tix','tix','2020-10-15 15:15:44'),
+(2271,'tk','tk','2020-10-15 15:15:44'),
+(2272,'tmpwatch','tmpwatch','2020-10-15 15:15:44'),
+(2273,'tmux','tmux','2020-10-15 15:15:44'),
+(2274,'tn5250','tn5250','2020-10-15 15:15:44'),
+(2275,'tog-pegasus','tog-pegasus','2020-10-15 15:15:44'),
+(2276,'tokyocabinet','tokyocabinet','2020-10-15 15:15:44'),
+(2277,'tomcat','tomcat','2020-10-15 15:15:44'),
+(2278,'tomcatjss','tomcatjss','2020-10-15 15:15:44'),
+(2279,'totem','totem','2020-10-15 15:15:44'),
+(2280,'totem-pl-parser','totem-pl-parser','2020-10-15 15:15:44'),
+(2281,'tpm-quote-tools','tpm-quote-tools','2020-10-15 15:15:44'),
+(2282,'tpm-tools','tpm-tools','2020-10-15 15:15:45'),
+(2283,'tpm2-abrmd','tpm2-abrmd','2020-10-15 15:15:45'),
+(2284,'tpm2-abrmd-selinux','tpm2-abrmd-selinux','2020-10-15 15:15:45'),
+(2285,'tpm2-tools','tpm2-tools','2020-10-15 15:15:45'),
+(2286,'tpm2-tss','tpm2-tss','2020-10-15 15:15:45'),
+(2287,'trace-cmd','trace-cmd','2020-10-15 15:15:45'),
+(2288,'traceroute','traceroute','2020-10-15 15:15:45'),
+(2289,'tracker','tracker','2020-10-15 15:15:45'),
+(2290,'tracker-miners','tracker-miners','2020-10-15 15:15:45'),
+(2291,'tree','tree','2020-10-15 15:15:45'),
+(2292,'trousers','trousers','2020-10-15 15:15:45'),
+(2293,'ttembed','ttembed','2020-10-15 15:15:45'),
+(2294,'ttmkfdir','ttmkfdir','2020-10-15 15:15:45'),
+(2295,'tuna','tuna','2020-10-15 15:15:45'),
+(2296,'tuned','tuned','2020-10-15 15:15:45'),
+(2297,'twolame','twolame','2020-10-15 15:15:45'),
+(2298,'txw2','txw2','2020-10-15 15:15:45'),
+(2299,'tzdata','tzdata','2020-10-15 15:15:45'),
+(2300,'ublock','ublock','2020-10-15 15:15:45'),
+(2301,'uboot-tools','uboot-tools','2020-10-15 15:15:45'),
+(2302,'ucs-miscfixed-fonts','ucs-miscfixed-fonts','2020-10-15 15:15:45'),
+(2303,'udftools','udftools','2020-10-15 15:15:45'),
+(2304,'udisks2','udisks2','2020-10-15 15:15:45'),
+(2305,'uid_wrapper','uid_wrapper','2020-10-15 15:15:45'),
+(2306,'umockdev','umockdev','2020-10-15 15:15:45'),
+(2307,'uname-build-checks','uname-build-checks','2020-10-15 15:15:45'),
+(2308,'unbound','unbound','2020-10-15 15:15:45'),
+(2309,'unicode-emoji','unicode-emoji','2020-10-15 15:15:45'),
+(2310,'unicode-ucd','unicode-ucd','2020-10-15 15:15:45'),
+(2311,'unique','unique','2020-10-15 15:15:45'),
+(2312,'unique3','unique3','2020-10-15 15:15:45'),
+(2313,'units','units','2020-10-15 15:15:45'),
+(2314,'unixODBC','unixODBC','2020-10-15 15:15:45'),
+(2315,'unzip','unzip','2020-10-15 15:15:45'),
+(2316,'update-motd','update-motd','2020-10-15 15:15:45'),
+(2317,'upower','upower','2020-10-15 15:15:45'),
+(2318,'urlview','urlview','2020-10-15 15:15:45'),
+(2319,'urw-base35-fonts','urw-base35-fonts','2020-10-15 15:15:45'),
+(2320,'urw-fonts','urw-fonts','2020-10-15 15:15:45'),
+(2321,'usb_modeswitch','usb_modeswitch','2020-10-15 15:15:45'),
+(2322,'usb_modeswitch-data','usb_modeswitch-data','2020-10-15 15:15:45'),
+(2323,'usbmuxd','usbmuxd','2020-10-15 15:15:45'),
+(2324,'usbredir','usbredir','2020-10-15 15:15:45'),
+(2325,'usbutils','usbutils','2020-10-15 15:15:45'),
+(2326,'usermode','usermode','2020-10-15 15:15:45'),
+(2327,'userspace-rcu','userspace-rcu','2020-10-15 15:15:45'),
+(2328,'ustr','ustr','2020-10-15 15:15:45'),
+(2329,'utf8proc','utf8proc','2020-10-15 15:15:45'),
+(2330,'uthash','uthash','2020-10-15 15:15:45'),
+(2331,'util-linux','util-linux','2020-10-15 15:15:45'),
+(2332,'uuid','uuid','2020-10-15 15:15:45'),
+(2333,'v4l-utils','v4l-utils','2020-10-15 15:15:45'),
+(2334,'vala','vala','2020-10-15 15:15:45'),
+(2335,'valgrind','valgrind','2020-10-15 15:15:45'),
+(2336,'vboot-utils','vboot-utils','2020-10-15 15:15:45'),
+(2337,'vconfig','vconfig','2020-10-15 15:15:45'),
+(2338,'velocity','velocity','2020-10-15 15:15:45'),
+(2339,'vemana2000-fonts','vemana2000-fonts','2020-10-15 15:15:45'),
+(2340,'vhostmd','vhostmd','2020-10-15 15:15:45'),
+(2341,'viewSec','viewSec','2020-10-15 15:15:45'),
+(2342,'vim','vim','2020-10-15 15:15:45'),
+(2343,'vinagre','vinagre','2020-10-15 15:15:45'),
+(2344,'vino','vino','2020-10-15 15:15:45'),
+(2345,'virglrenderer','virglrenderer','2020-10-15 15:15:45'),
+(2346,'virt-viewer','virt-viewer','2020-10-15 15:15:45'),
+(2347,'virt-what','virt-what','2020-10-15 15:15:45'),
+(2348,'virtuoso-opensource','virtuoso-opensource','2020-10-15 15:15:45'),
+(2349,'vlgothic-fonts','vlgothic-fonts','2020-10-15 15:15:45'),
+(2350,'vmdrivers','vmdrivers','2020-10-15 15:15:45'),
+(2351,'volume_key','volume_key','2020-10-15 15:15:45'),
+(2352,'vsftpd','vsftpd','2020-10-15 15:15:45'),
+(2353,'vte291','vte291','2020-10-15 15:15:45'),
+(2354,'vte3','vte3','2020-10-15 15:15:45'),
+(2355,'vulkan-headers','vulkan-headers','2020-10-15 15:15:45'),
+(2356,'vulkan-loader','vulkan-loader','2020-10-15 15:15:45'),
+(2357,'watchdog','watchdog','2020-10-15 15:15:45'),
+(2358,'wavpack','wavpack','2020-10-15 15:15:45'),
+(2359,'wayland','wayland','2020-10-15 15:15:45'),
+(2360,'wayland-protocols','wayland-protocols','2020-10-15 15:15:45'),
+(2361,'webkit2gtk3','webkit2gtk3','2020-10-15 15:15:45'),
+(2362,'webkitgtk3','webkitgtk3','2020-10-15 15:15:45'),
+(2363,'webkitgtk4','webkitgtk4','2020-10-15 15:15:45'),
+(2364,'webrtc-audio-processing','webrtc-audio-processing','2020-10-15 15:15:45'),
+(2365,'wget','wget','2020-10-15 15:15:45'),
+(2366,'which','which','2020-10-15 15:15:45'),
+(2367,'whois','whois','2020-10-15 15:15:45'),
+(2368,'wireshark','wireshark','2020-10-15 15:15:45'),
+(2369,'wisdom','wisdom','2020-10-15 15:15:45'),
+(2370,'woff2','woff2','2020-10-15 15:15:45'),
+(2371,'words','words','2020-10-15 15:15:45'),
+(2372,'wpa_supplicant','wpa_supplicant','2020-10-15 15:15:45'),
+(2373,'wqy-microhei-fonts','wqy-microhei-fonts','2020-10-15 15:15:45'),
+(2374,'wqy-zenhei-fonts','wqy-zenhei-fonts','2020-10-15 15:15:45'),
+(2375,'ws-jaxme','ws-jaxme','2020-10-15 15:15:45'),
+(2376,'wsmancli','wsmancli','2020-10-15 15:15:45'),
+(2377,'wvdial','wvdial','2020-10-15 15:15:45'),
+(2378,'x3270','x3270','2020-10-15 15:15:45'),
+(2379,'x86info','x86info','2020-10-15 15:15:45'),
+(2380,'xalan-j2','xalan-j2','2020-10-15 15:15:45'),
+(2381,'xcb-proto','xcb-proto','2020-10-15 15:15:45'),
+(2382,'xcb-util','xcb-util','2020-10-15 15:15:45'),
+(2383,'xcb-util-image','xcb-util-image','2020-10-15 15:15:45'),
+(2384,'xcb-util-keysyms','xcb-util-keysyms','2020-10-15 15:15:45'),
+(2385,'xcb-util-renderutil','xcb-util-renderutil','2020-10-15 15:15:45'),
+(2386,'xcb-util-wm','xcb-util-wm','2020-10-15 15:15:45'),
+(2387,'xdelta','xdelta','2020-10-15 15:15:45'),
+(2388,'xdg-desktop-portal-gtk','xdg-desktop-portal-gtk','2020-10-15 15:15:45'),
+(2389,'xdg-user-dirs','xdg-user-dirs','2020-10-15 15:15:45'),
+(2390,'xdg-user-dirs-gtk','xdg-user-dirs-gtk','2020-10-15 15:15:45'),
+(2391,'xdg-utils','xdg-utils','2020-10-15 15:15:45'),
+(2392,'xerces-j2','xerces-j2','2020-10-15 15:15:45'),
+(2393,'xferstats','xferstats','2020-10-15 15:15:45'),
+(2394,'xfsdump','xfsdump','2020-10-15 15:15:45'),
+(2395,'xfsprogs','xfsprogs','2020-10-15 15:15:45'),
+(2396,'xguest','xguest','2020-10-15 15:15:45'),
+(2397,'xinetd','xinetd','2020-10-15 15:15:45'),
+(2398,'xkeyboard-config','xkeyboard-config','2020-10-15 15:15:45'),
+(2399,'xml-commons-apis','xml-commons-apis','2020-10-15 15:15:45'),
+(2400,'xml-commons-resolver','xml-commons-resolver','2020-10-15 15:15:45'),
+(2401,'xmlrpc','xmlrpc','2020-10-15 15:15:45'),
+(2402,'xmlrpc-c','xmlrpc-c','2020-10-15 15:15:45'),
+(2403,'xmlsec1','xmlsec1','2020-10-15 15:15:45'),
+(2404,'xmlstarlet','xmlstarlet','2020-10-15 15:15:46'),
+(2405,'xmlto','xmlto','2020-10-15 15:15:46'),
+(2406,'xmltoman','xmltoman','2020-10-15 15:15:46'),
+(2407,'xmms','xmms','2020-10-15 15:15:46'),
+(2408,'xorg-x11-apps','xorg-x11-apps','2020-10-15 15:15:46'),
+(2409,'xorg-x11-docs','xorg-x11-docs','2020-10-15 15:15:46'),
+(2410,'xorg-x11-drivers','xorg-x11-drivers','2020-10-15 15:15:46'),
+(2411,'xorg-x11-drv-ati','xorg-x11-drv-ati','2020-10-15 15:15:46'),
+(2412,'xorg-x11-drv-dummy','xorg-x11-drv-dummy','2020-10-15 15:15:46'),
+(2413,'xorg-x11-drv-evdev','xorg-x11-drv-evdev','2020-10-15 15:15:46'),
+(2414,'xorg-x11-drv-fbdev','xorg-x11-drv-fbdev','2020-10-15 15:15:46'),
+(2415,'xorg-x11-drv-intel','xorg-x11-drv-intel','2020-10-15 15:15:46'),
+(2416,'xorg-x11-drv-keyboard','xorg-x11-drv-keyboard','2020-10-15 15:15:46'),
+(2417,'xorg-x11-drv-libinput','xorg-x11-drv-libinput','2020-10-15 15:15:46'),
+(2418,'xorg-x11-drv-mouse','xorg-x11-drv-mouse','2020-10-15 15:15:46'),
+(2419,'xorg-x11-drv-nouveau','xorg-x11-drv-nouveau','2020-10-15 15:15:46'),
+(2420,'xorg-x11-drv-openchrome','xorg-x11-drv-openchrome','2020-10-15 15:15:46'),
+(2421,'xorg-x11-drv-qxl','xorg-x11-drv-qxl','2020-10-15 15:15:46'),
+(2422,'xorg-x11-drv-synaptics','xorg-x11-drv-synaptics','2020-10-15 15:15:46'),
+(2423,'xorg-x11-drv-v4l','xorg-x11-drv-v4l','2020-10-15 15:15:46'),
+(2424,'xorg-x11-drv-vesa','xorg-x11-drv-vesa','2020-10-15 15:15:46'),
+(2425,'xorg-x11-drv-vmmouse','xorg-x11-drv-vmmouse','2020-10-15 15:15:46'),
+(2426,'xorg-x11-drv-vmware','xorg-x11-drv-vmware','2020-10-15 15:15:46'),
+(2427,'xorg-x11-drv-void','xorg-x11-drv-void','2020-10-15 15:15:46'),
+(2428,'xorg-x11-drv-wacom','xorg-x11-drv-wacom','2020-10-15 15:15:46'),
+(2429,'xorg-x11-font-utils','xorg-x11-font-utils','2020-10-15 15:15:46'),
+(2430,'xorg-x11-fonts','xorg-x11-fonts','2020-10-15 15:15:46'),
+(2431,'xorg-x11-proto-devel','xorg-x11-proto-devel','2020-10-15 15:15:46'),
+(2432,'xorg-x11-server','xorg-x11-server,xorg-server','2020-10-15 15:15:46'),
+(2433,'xorg-x11-server-utils','xorg-x11-server-utils','2020-10-15 15:15:46'),
+(2434,'xorg-x11-util-macros','xorg-x11-util-macros','2020-10-15 15:15:46'),
+(2435,'xorg-x11-utils','xorg-x11-utils','2020-10-15 15:15:46'),
+(2436,'xorg-x11-xauth','xorg-x11-xauth','2020-10-15 15:15:46'),
+(2437,'xorg-x11-xbitmaps','xorg-x11-xbitmaps','2020-10-15 15:15:46'),
+(2438,'xorg-x11-xinit','xorg-x11-xinit','2020-10-15 15:15:46'),
+(2439,'xorg-x11-xkb-utils','xorg-x11-xkb-utils','2020-10-15 15:15:46'),
+(2440,'xorg-x11-xtrans-devel','xorg-x11-xtrans-devel','2020-10-15 15:15:46'),
+(2441,'xpp3','xpp3','2020-10-15 15:15:46'),
+(2442,'xrestop','xrestop','2020-10-15 15:15:46'),
+(2443,'xsane','xsane','2020-10-15 15:15:46'),
+(2444,'xsettings-kde','xsettings-kde','2020-10-15 15:15:46'),
+(2445,'xsom','xsom','2020-10-15 15:15:46'),
+(2446,'xterm','xterm','2020-10-15 15:15:46'),
+(2447,'xulrunner','xulrunner','2020-10-15 15:15:46'),
+(2448,'xvattr','xvattr','2020-10-15 15:15:46'),
+(2449,'xz','xz','2020-10-15 15:15:46'),
+(2450,'yajl','yajl','2020-10-15 15:15:46'),
+(2451,'yaml-cpp','yaml-cpp','2020-10-15 15:15:46'),
+(2452,'yasm','yasm','2020-10-15 15:15:46'),
+(2453,'yelp','yelp','2020-10-15 15:15:46'),
+(2454,'yelp-tools','yelp-tools','2020-10-15 15:15:46'),
+(2455,'yelp-xsl','yelp-xsl','2020-10-15 15:15:46'),
+(2456,'yp-tools','yp-tools','2020-10-15 15:15:46'),
+(2457,'ypbind','ypbind','2020-10-15 15:15:46'),
+(2458,'ypserv','ypserv','2020-10-15 15:15:46'),
+(2459,'yum','yum','2020-10-15 15:15:46'),
+(2460,'yum-langpacks','yum-langpacks','2020-10-15 15:15:46'),
+(2461,'yum-metadata-parser','yum-metadata-parser','2020-10-15 15:15:46'),
+(2462,'yum-utils','yum-utils','2020-10-15 15:15:46'),
+(2463,'zd1211-firmware','zd1211-firmware','2020-10-15 15:15:46'),
+(2464,'zenity','zenity','2020-10-15 15:15:46'),
+(2465,'zerofree','zerofree','2020-10-15 15:15:46'),
+(2466,'zip','zip','2020-10-15 15:15:46'),
+(2467,'zlib','zlib','2020-10-15 15:15:46'),
+(2468,'zopfli','zopfli','2020-10-15 15:15:46'),
+(2469,'zsh','zsh','2020-10-15 15:15:46'),
+(2470,'zstd','zstd','2020-10-15 15:15:46'),
+(2471,'zziplib','zziplib','2020-10-15 15:15:46');
+
/*Table structure for table `cve_security_reviewer` */
DROP TABLE IF EXISTS `cve_security_reviewer`;
@@ -68,6 +2579,15 @@ CREATE TABLE `cve_security_reviewer` (
UNIQUE KEY `name_space` (`name_space`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
+/*Data for the table `cve_security_reviewer` */
+
+insert into `cve_security_reviewer`(`id`,`name_space`) values
+(1,'liujingang09'),
+(5,'xieweizhi'),
+(2,'yangli69393'),
+(3,'yanxiaobing2020'),
+(4,'zhujianwei001');
+
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
diff --git a/doc/sql/db_struct.sql b/doc/sql/db_struct.sql
index 37ccd60..f4984fd 100644
--- a/doc/sql/db_struct.sql
+++ b/doc/sql/db_struct.sql
@@ -38,7 +38,7 @@ CREATE TABLE `cve_email_list` (
`email_type` tinyint NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `cve_email_list_email_type` (`email_type`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_export_record` */
@@ -61,7 +61,6 @@ CREATE TABLE `cve_git_open_euler` (
`package_id` bigint NOT NULL DEFAULT '0',
`package_name` varchar(256) NOT NULL DEFAULT '',
`version` varchar(64) NOT NULL DEFAULT '',
- `release` varchar(128) NOT NULL DEFAULT '',
`origin_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`license` varchar(4096) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`feature` varchar(128) NOT NULL DEFAULT '',
@@ -78,12 +77,14 @@ CREATE TABLE `cve_git_open_euler` (
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`delete_time` datetime DEFAULT NULL,
+ `cpe_packname` varchar(512) DEFAULT NULL,
+ `releases` varchar(128) NOT NULL DEFAULT '',
PRIMARY KEY (`git_id`),
UNIQUE KEY `cve_git_open_euler_package_version` (`package_name`,`version`),
KEY `cve_git_open_euler_package_id` (`package_id`),
KEY `cve_git_open_euler_version` (`version`),
KEY `cve_git_open_euler_table_id` (`table_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=10460 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_open_euler_table_relate` */
@@ -97,7 +98,7 @@ CREATE TABLE `cve_git_open_euler_table_relate` (
PRIMARY KEY (`relate_id`),
UNIQUE KEY `cve_git_open_euler_table_gitid_tab_un` (`git_id`,`table_name`),
KEY `cve_git_open_euler_table_relate_git_id` (`git_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4748 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_package_info` */
@@ -128,7 +129,7 @@ CREATE TABLE `cve_git_package_info` (
KEY `cve_git_package_info_git_id` (`git_id`),
KEY `cve_git_package_info_git_ids` (`git_ids`),
KEY `cve_git_package_info_version` (`version`)
-) ENGINE=InnoDB AUTO_INCREMENT=1244 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_package_table` */
@@ -164,7 +165,7 @@ CREATE TABLE `cve_git_sub_pack` (
PRIMARY KEY (`sub_id`),
KEY `cve_git_sub_pack_detail_id` (`detail_id`),
KEY `cve_git_sub_pack_ids` (`ids`)
-) ENGINE=InnoDB AUTO_INCREMENT=3408 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack_provides` */
@@ -179,7 +180,7 @@ CREATE TABLE `cve_git_sub_pack_provides` (
PRIMARY KEY (`provide_id`),
KEY `cve_git_sub_pack_provides_sub_id` (`sub_id`),
KEY `cve_git_sub_pack_provides_ids` (`ids`)
-) ENGINE=InnoDB AUTO_INCREMENT=18830 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack_require` */
@@ -194,7 +195,7 @@ CREATE TABLE `cve_git_sub_pack_require` (
PRIMARY KEY (`require_id`),
KEY `cve_git_sub_pack_require_sub_id` (`sub_id`),
KEY `cve_git_sub_pack_require_ids` (`ids`)
-) ENGINE=InnoDB AUTO_INCREMENT=19139 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_git_sub_pack_requiredby` */
@@ -206,7 +207,7 @@ CREATE TABLE `cve_git_sub_pack_requiredby` (
`requiredb` varchar(256) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `cve_git_sub_pack_requiredby_provide_id` (`provide_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=3428 DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Table structure for table `cve_gite_origin_issue` */
@@ -734,7 +735,7 @@ CREATE TABLE `cve_package_cpe` (
`create_time` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `cve_package_cpe_packname` (`packname`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB AUTO_INCREMENT=2472 DEFAULT CHARSET=utf8;
/*Table structure for table `cve_score` */
diff --git a/main.go b/main.go
index be8a6b5..6a1e7d1 100644
--- a/main.go
+++ b/main.go
@@ -2,25 +2,21 @@ package main
import (
"cvevulner/common"
- _"cvevulner/models"
+ _ "cvevulner/models"
_ "cvevulner/routers"
"cvevulner/task"
"github.com/astaxie/beego"
)
-
func init() {
- // 初始化全局变量
+ // Initialize global variables
common.InitGlobal()
- // 初始化日志
+ // Initialization log
common.LogInit()
- // 初始化数据库
+ // Initialize the database
//models.Initdb()
- // 初始化定时任务
+ // Initialize a scheduled task
task.InitTask()
- // test 后续删除
- //tests.Init()
-
}
func main() {
diff --git a/models/cve.go b/models/cve.go
index 1919d0d..ab28d4e 100644
--- a/models/cve.go
+++ b/models/cve.go
@@ -640,8 +640,6 @@ func GetCanExportVulnCenterCount() (count int64) {
}{}
o := orm.NewOrm()
err := o.Raw(sql).QueryRow(&res)
- //qs := o.QueryTable("cve_vuln_center")
- //cot, err := qs.Filter("is_export", 3).Count() //.Filter("cve_status", 2)
if err != nil {
logs.Error(err)
return 0
diff --git a/models/cvedetail.go b/models/cvedetail.go
index d9535e6..930fcd4 100644
--- a/models/cvedetail.go
+++ b/models/cvedetail.go
@@ -147,4 +147,4 @@ func GetOriginFixSuggestRefTag(fixRefId int64, oufrt *[]OriginUpstreamFixSuggest
logs.Error("cve_origin_upstream_fix_suggest_ref_tag fix_ref_id: ", fixRefId, " 不存在")
}
return 0, err
-}
\ No newline at end of file
+}
diff --git a/models/excel.go b/models/excel.go
index e0c8831..3b5cb3d 100644
--- a/models/excel.go
+++ b/models/excel.go
@@ -22,7 +22,7 @@ type ExcelExport struct {
}
//Insert Insert a generated excel file record
-func (er ExportRecord) Insert() error {
+func (er ExportRecord) Insert() error {
o := orm.NewOrm()
_, err := o.Insert(&er)
return err
diff --git a/models/giteeissue.go b/models/giteeissue.go
index 369ab62..0c2d0c6 100644
--- a/models/giteeissue.go
+++ b/models/giteeissue.go
@@ -204,17 +204,14 @@ func parseOldTplToLoopHole(lp *Loophole, body string) {
}
sm = util.RegexpCveBriefDesc.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
- //lp.BriefIntroduction = util.TrimString(sm[0][1])
lp.BriefIntroduction = sm[0][1]
}
sm = util.RegexpCveInfluencesDesc.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
- //lp.Influences = util.TrimString(sm[0][1])
lp.Influences = sm[0][1]
}
sm = util.RegexpCvePrincipleDesc.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
- //lp.Principle = util.TrimString(sm[0][1])
lp.Principle = sm[0][1]
}
sm = util.RegexpCveOpScore.FindAllStringSubmatch(body, -1)
@@ -234,14 +231,12 @@ func parseOldTplToLoopHole(lp *Loophole, body string) {
sm = util.RegexpCvePlannedMeasures.FindAllStringSubmatch(body, -1)
if len(sm) > 0 {
if len(sm[0]) > 0 {
- //lp.AvoidScheme = util.TrimString(sm[0][1])
lp.AvoidScheme = sm[0][1]
}
} else {
sm = util.RegexpCvePlannedMeasures1.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
- //lp.AvoidScheme = util.TrimString(sm[0][1])
lp.AvoidScheme = sm[0][1]
}
}
@@ -288,10 +283,9 @@ func parseNewTplToLoopHole(lp *Loophole, body string) {
lp.CvsVector = v
}
}
- sm = util.RegexpCveBriefDesc.FindAllStringSubmatch(body, -1)
+ sm = util.RegexpCveBriefDescNew.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
lp.BriefIntroduction = strings.Replace(sm[0][1], "二、漏洞分析结构反馈", "", -1)
- //lp.BriefIntroduction = sm[0][1]
}
sm = util.RegexpCveInfluencesDescNew.FindAllStringSubmatch(body, -1)
if len(sm) > 0 && len(sm[0]) > 0 {
diff --git a/models/hookevent.go b/models/hookevent.go
index 6b8f4d1..6bd774a 100644
--- a/models/hookevent.go
+++ b/models/hookevent.go
@@ -1,15 +1,21 @@
package models
-import "time"
+
+import (
+ "strings"
+ "time"
+)
+
+
//HookUser gitee user model
type HookUser struct {
Id int64
- Login string //同下username
- Name string //用户的昵称
- Email string //用户的邮箱
- UserName string `json:"username"` //用户的码云个人空间地址
- AvatarUrl string `json:"avatar_url"` //用户头像
- SiteAdmin bool `json:"site_admin"` //是不是管理员
+ Login string //Same as username
+ Name string //User's nickname
+ Email string //User's mailbox
+ UserName string `json:"username"` //User's code cloud personal space address
+ AvatarUrl string `json:"avatar_url"` //profile picture
+ SiteAdmin bool `json:"site_admin"` //Is it an administrator
}
@@ -18,8 +24,9 @@ type HookIssue struct {
Id int64
Number string
Title string
+ Labels []IssueLabel `json:"labels"`
State string
- HtmlUrl string `json:"html_url"` //评论在码云上的url
+ HtmlUrl string `json:"html_url"` //Comment on the url on the code cloud
Body string
StateName string `json:"state_name"`
User HookUser
@@ -32,6 +39,13 @@ type HookIssue struct {
SecurityHole bool `json:"security_hole"`
}
+//IssueLabel issue label
+type IssueLabel struct {
+ Id string `json:"id"`
+ Name string `json:"name"`
+ Color string `json:"color"`
+}
+
//HookRepository gitee repository model
type HookRepository struct {
Id int64
@@ -46,47 +60,74 @@ type HookRepository struct {
//HookComment gitee comment model
type HookComment struct {
- User *HookUser //评论的作者信息
- HtmlUrl string `json:"html_url"` //评论在码云上的url
+ User *HookUser //Comment author information
+ HtmlUrl string `json:"html_url"` //Comment on the url on the code cloud
Id int64
- Body string //评论的内容
+ Body string //Comment content
CreateAt time.Time `json:"create_at"`
UpdateAt time.Time `json:"update_at"`
}
//CommentPayload hook data triggered by a comment task operation
type CommentPayload struct {
- Action string // 动作 comment
+ Action string // Action comment
HookName string `json:"hook_name"`
- Password string //钩子的密码
- HookId int64 `json:"hook_id"` //钩子ID
- HookUrl string `json:"hook_url"` //钩子的路由
+ Password string //The password of the hook
+ HookId int64 `json:"hook_id"` //Hook ID
+ HookUrl string `json:"hook_url"` //Hook routing
Timestamp string
- Sign string //钩子根据密钥计算的签名
- Comment *HookComment //评论数据
- Note string //被评论目标的评论数据
- NoteableType string `json:"noteable_type"` //被评论的目标类型
- NoteableId int64 `json:"noteable_id"` //被评论的目标ID
- Title string //被评论的目标标题
- PerId string `json:"per_iid"` //被评论的目标标识
- ShortCommitId string `json:"short_commit_id"` //被评论的commit提交中的简短sha
+ Sign string //The signature calculated by the hook based on the key
+ Comment *HookComment //Comment data
+ Note string //Comment data of the commented target
+ NoteableType string `json:"noteable_type"` //Target type being reviewed
+ NoteableId int64 `json:"noteable_id"` //ID of the target being reviewed
+ Title string //Target title being commented
+ PerId string `json:"per_iid"` //Target ID being reviewed
+ ShortCommitId string `json:"short_commit_id"` //The short sha in the commented commit submission
Issue *HookIssue
}
type IssuePayload struct {
- HookId int64 `json:"hook_id"` // 钩子 id。
- HookUrl string `json:"hook_url"` // 钩子路由。
- HookName string `json:"hook_name"` // 钩子名,固定为 issue_hooks。
- Password string `json:"password"` // 钩子密码
- Action string //issue 状态
- Issue HookIssue //issue 信息
- Sender HookUser //触发 hook 的用户信息。
- TargetUser HookUser `json:"target_user"` //被委托处理 issue 的用户信息
- User HookUser //issue 的创建者
- Assignee HookUser //issue 的负责人
- Iid string //issue 的标识
- Title string //issue 的标题
- Description string //issue 的描述
- State string //issue 的状态
- Url string //issue 在码云上的url
+ HookId int64 `json:"hook_id"` // Hook id.
+ HookUrl string `json:"hook_url"` // route
+ HookName string `json:"hook_name"` // issue_hooks。
+ Password string `json:"password"` // Hook code
+ Action string //issue status
+ Issue HookIssue //issue information
+ Sender HookUser //The user information that triggered the hook.
+ TargetUser HookUser `json:"target_user"` //User information entrusted to handle the issue
+ User HookUser //issue creator
+ Assignee HookUser //issue principal
+ Iid string //issue Logo
+ Title string //issue title
+ Description string //issue description
+ State string //issue status
+ Url string //issue URL on code cloud
+}
+
+//GetLabelsStr labels slice to string
+func (ih *HookIssue) GetLabelsStr() (labels string) {
+ var lb []string
+ for _, v := range ih.Labels {
+ lb = append(lb, v.Name)
+ }
+ return strings.Join(lb, ",")
+}
+
+//ReplaceLabelToStr delete old label and add new label and return label string
+func (ih HookIssue) ReplaceLabelToStr(oLabel, nLabel string) (labels string) {
+ var lb []string
+ es := false
+ for _, v := range ih.Labels {
+ if v.Name == nLabel {
+ es = true
+ }
+ if v.Name != oLabel {
+ lb = append(lb, v.Name)
+ }
+ }
+ if !es {
+ lb = append(lb, nLabel)
+ }
+ return strings.Join(lb, ",")
}
diff --git a/models/initdb.go b/models/initdb.go
index 6c40301..c51bde5 100644
--- a/models/initdb.go
+++ b/models/initdb.go
@@ -13,10 +13,11 @@ import (
func init() {
Initdb()
}
+
//InitDb init database
func Initdb() {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return
}
@@ -26,7 +27,6 @@ func Initdb() {
dbuser := BConfig.String("mysql::dbuser")
dbname := BConfig.String("mysql::dbname")
dbpwd := BConfig.String("mysql::dbpwd")
- //dbpwd := os.Getenv("dbpwd")
key := beego.AppConfig.String("key")
key1 := []byte(key)
bytes, _ := common.DePwdCode(dbpwd, key1)
@@ -59,9 +59,9 @@ func Initdb() {
}
}
-func ConnDb() (*sql.DB, error){
+func ConnDb() (*sql.DB, error) {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return nil, err
}
@@ -70,14 +70,13 @@ func ConnDb() (*sql.DB, error){
dbuser := BConfig.String("mysql::dbuser")
dbname := BConfig.String("mysql::dbname")
dbpwd := BConfig.String("mysql::dbpwd")
- //dbpwd := os.Getenv("dbpwd")
key := beego.AppConfig.String("key")
key1 := []byte(key)
bytes, _ := common.DePwdCode(dbpwd, key1)
dns := dbuser + ":" + string(bytes) + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8"
db, err := sql.Open("mysql", dns)
if err != nil {
- logs.Error("连接数据库出错", err, "@tcp(" + dbhost + ":" + dbport + ")/" + dbname)
+ logs.Error("连接数据库出错", err, "@tcp("+dbhost+":"+dbport+")/"+dbname)
return nil, err
}
logs.Info("数据库连接成功, db: ", db)
diff --git a/models/issue.go b/models/issue.go
index 3e9a4eb..663a857 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -30,7 +30,7 @@ func QueryIssueCveByNum(cvenum, repoPath string) (GiteOriginIssue, bool) {
func QueryIssue(days string, prcnum int) ([]VulnCenter, error) {
o := orm.NewOrm()
var vc []VulnCenter
- num, err := o.Raw("select cve_id,cve_num,cve_desc,cve_version,repair_time," +
+ num, err := o.Raw("select cve_id,cve_num,cve_desc,cve_version,repair_time,"+
"pack_name,cve_url,cve_level,data_source,update_time,is_export,cve_detail_url"+
" from cve_vuln_center where update_time >= ? and cve_status in (?, ?) "+
"order by cve_id asc limit ?", days, 0, 1, prcnum).QueryRows(&vc)
@@ -54,6 +54,7 @@ func GetVulnCenterByCVEID(vc *VulnCenter, cveId int64, fields ...string) error {
err := o.Raw(sqlStr, cveId).QueryRow(vc)
return err
}
+
//QueryIssueSecurity 查找安全公告
func QueryIssueSecurity(cveId int64) (SecurityNotice, error) {
o := orm.NewOrm()
@@ -172,32 +173,6 @@ func UpdatePackageByCveId(pkgStr string, cveId int64) error {
}
}
return nil
- //===== 先删除 再修改 =====
- /*delPkgSql := `DELETE FROM cve_package WHERE sec_id = ?`
- err = o.Begin()
- if err != nil {
- return err
- }
- _, err = o.Raw(delPkgSql, sec.SecID).Exec()
- if err != nil {
- err = o.Rollback()
- return err
- }
- pkgVals := make([]Package, 0)
- for _, v := range ps {
- pkgUrl := fmt.Sprintf(`https://repo.openeuler.org/openEuler-20.03-LTS/update/aarch64/Packages/%s`, v)
- pv := Package{SecID: sec.SecID, PackName: v, PackUrl: pkgUrl}
- pkgVals = append(pkgVals, pv)
- }
- _, err = o.InsertMulti(1, pkgVals)
- if err != nil {
- _ = o.Rollback()
- return err
- }
- err = o.Commit()
- if err != nil {
- return err
- }*/
}
return nil
}
@@ -216,7 +191,6 @@ func CreateIssueTemplate(it *IssueTemplate) (issTempId int64, err error) {
errx := o.Raw("select *"+
" from cve_issue_template where cve_id = ? ", it.CveId).QueryRow(&localIt)
if errx != nil {
- // 创建
var issTempId int64
if issTempId, err = o.Insert(it); err == nil {
logs.Info("insert cve_issue_template success, issTempId: ", issTempId, "cveNum: ", it.CveNum)
@@ -226,7 +200,6 @@ func CreateIssueTemplate(it *IssueTemplate) (issTempId int64, err error) {
}
return issTempId, nil
} else {
- // 更新
it.TemplateId = localIt.TemplateId
if num, err := o.Update(it); err == nil {
logs.Info("update cve_issue_template success, num: ", num, "cveNum: ", it.CveNum)
@@ -360,8 +333,8 @@ func GetIssueTplByCveNum(num string) (list []IssueTemplate, err error) {
return
}
-func GetIssueTplGroupByRepo()(list []IssueTemplate ,err error) {
+func GetIssueTplGroupByRepo() (list []IssueTemplate, err error) {
o := orm.NewOrm()
- _,err = o.QueryTable("cve_issue_template").GroupBy("repo").All(&list)
+ _, err = o.QueryTable("cve_issue_template").GroupBy("repo").All(&list)
return
}
diff --git a/models/login.go b/models/login.go
index 6e391ee..b179c67 100644
--- a/models/login.go
+++ b/models/login.go
@@ -15,15 +15,14 @@ func GetCveUserByUser(username, pwd string) (maps []orm.Params, err error) {
return nil, err
}
-func UpdateToken(Userid interface{} ,token string, newTime time.Time) bool{
- o:=orm.NewOrm()
+func UpdateToken(Userid interface{}, token string, newTime time.Time) bool {
+ o := orm.NewOrm()
_ = o.Raw("update cve_other_user set aes_key=?,expiration_time=? where user_id=?", token, newTime, Userid).QueryRow()
return true
}
-func GetUserByToken(token string, ou * OtherUser) (err error) {
+func GetUserByToken(token string, ou *OtherUser) (err error) {
o := orm.NewOrm()
err = o.Raw("select * FROM cve_other_user WHERE aes_key=?", token).QueryRow(ou)
return err
}
-
diff --git a/models/modeldb.go b/models/modeldb.go
index f1c1375..ac15aa4 100644
--- a/models/modeldb.go
+++ b/models/modeldb.go
@@ -9,14 +9,14 @@ import (
)
type IpWhite struct {
- IPId int `orm:"pk;auto;column(ip_id)"` // 自增的值
+ IPId int `orm:"pk;auto;column(ip_id)"`
MachineName string `orm:"size(128);column(machine_name)" description:"机器名称"`
MachineIp string `orm:"size(128);column(machine_ip);index" description:"机器ip"`
AccessCount int64 `orm:"default(0);column(access_count)" description:"0: 不受限制; 10000:可以连续访问次数"`
}
type OtherUser struct {
- UerId int `orm:"pk;auto;column(user_id)"` // 自增的值
+ UerId int `orm:"pk;auto;column(user_id)"`
UserName string `orm:"size(64);column(user_name)"`
PassWord string `orm:"size(256);column(pass_word)"`
AesKey string `orm:"size(512);colnum(aes_key)"`
@@ -201,7 +201,7 @@ type GitOpenEuler struct {
PackageId int64 `orm:"index;column(package_id)" description:"获取到的包id"`
PackageName string `orm:"column(package_name);size(256)" description:"包名称"`
Version string `orm:"size(64);column(version);index" description:"版本号"`
- Release string `orm:"size(128);column(release)" description:"release 版本号"`
+ Release string `orm:"size(128);column(releases)" description:"releases 版本号"`
OriginUrl string `orm:"size(512);column(origin_url)" description:"gitee上的地址"`
License string `orm:"size(4096);column(license)" description:"license"`
Feature string `orm:"size(128);column(feature)" description:"特性"`
@@ -450,7 +450,7 @@ type OriginUpstreamFixSuggestRefTag struct {
Name string `orm:"size(512);column(name);null" description:"名称"`
}
-//GiteOriginIssue 码云上已经存在的issue
+//GiteOriginIssue Issues that already exist on Code Cloud
type GiteOriginIssue struct {
Id int64 `orm:"pk;auto"`
IssueId int64 `json:"issue_id" orm:"unique"`
@@ -510,7 +510,7 @@ type GitRepoGroups struct {
GroupName string `orm:"index"`
}
-//GiteRepo 码云仓库
+//GiteRepo Code Cloud repo
type GiteRepo struct {
RepoId int64 `orm:"pk;auto;column(repo_id)"`
GroupId int64 `orm:"index;column(group_id)" description:"GitRepoGroups 外键"`
@@ -526,7 +526,7 @@ type GiteRepo struct {
DeleteTime string `orm:"type(datetime);column(delete_time);null"`
}
-//GiteMember 码云仓库成员
+//GiteMember Members of Code Cloud repo
type GiteRepoMember struct {
MemBerId int64 `orm:"pk;auto;column(repo_id)"`
GroupId int64 `orm:"index;column(group_id)" description:"GitRepoGroups 外键"`
@@ -537,7 +537,7 @@ type GiteRepoMember struct {
DeleteTime string `orm:"type(datetime);column(delete_time);null"`
}
-//GiteRepoBranch 码云仓库分支
+//GiteRepoBranch Code Cloud repo Branch
type GiteRepoBranch struct {
Id int64 `orm:"pk;auto"`
RepoId int64 `orm:"index;column(repo_id)" description:"GiteRepo 外键"`
@@ -553,16 +553,16 @@ type ExportRecord struct {
}
type PackageCpe struct {
- Id int64 `orm:"pk;auto"`
- PackName string `orm:"size(512);column(packname);index;null" description:"Cve对应的openEuler包名称(或者影响的包名)"`
- CpePackName string `orm:"size(512);column(cpe_packname);null" description:"openEuler对应的cpe包名称(或者影响的包名)"`
- CreateTime string `orm:"size(32);column(create_time);null" description:"createtime"`
+ Id int64 `orm:"pk;auto"`
+ PackName string `orm:"size(512);column(packname);index;null" description:"Cve对应的openEuler包名称(或者影响的包名)"`
+ CpePackName string `orm:"size(512);column(cpe_packname);null" description:"openEuler对应的cpe包名称(或者影响的包名)"`
+ CreateTime string `orm:"size(32);column(create_time);null" description:"createtime"`
}
type EmailList struct {
- Id int64 `orm:"pk;auto"`
- EmailName string `orm:"size(512);column(email_name);null" description:"收件人名称"`
- EmailType int8 `orm:"index;column(email_type);default(1)" description:"1: excel导出列表"`
+ Id int64 `orm:"pk;auto"`
+ EmailName string `orm:"size(512);column(email_name);null" description:"收件人名称"`
+ EmailType int8 `orm:"index;column(email_type);default(1)" description:"1: excel导出列表"`
}
func CreateDb() bool {
@@ -586,7 +586,7 @@ func CreateDb() bool {
new(OriginUpstreamPoc), new(OriginUpstreamEvent), new(OriginUpstreamReference), new(OriginUpstreamVulType),
new(OriginUpstreamFixSuggest), new(OriginUpstreamFixSuggestRefTag),
new(OriginUpstreamFixSuggestRef), new(GiteOriginIssue), new(OriginExcel), new(ExportRecord), new(GitRepoGroups),
- new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch),new(PackageCpe),new(EmailList),
+ new(GiteRepo), new(GiteRepoMember), new(GiteRepoBranch), new(PackageCpe), new(EmailList),
)
logs.Info("table create success!")
errosyn := orm.RunSyncdb("default", false, true)
diff --git a/models/oricvecheck.go b/models/oricvecheck.go
index 4cc773a..be8f0b0 100644
--- a/models/oricvecheck.go
+++ b/models/oricvecheck.go
@@ -9,7 +9,7 @@ import (
func QueryOriginCveE(prcnum int) ([]OriginUpstream, int64, error) {
o := orm.NewOrm()
var os []OriginUpstream
- num, err := o.Raw("select cve_id,cve_un_ids,cve_num, update_type,cve_packname," +
+ num, err := o.Raw("select cve_id,cve_un_ids,cve_num, update_type,cve_packname,"+
"git_packname,cve_title,affect_porduct,cnnvd_id,cnvd_id,published_date,vul_status,cve_status,version"+
" from cve_origin_upstream where cve_status in (?, ?) and is_exit = ? "+
"order by cve_id asc limit ?", 0, 1, 2, prcnum).QueryRows(&os)
@@ -21,9 +21,9 @@ func QueryOriginCveE(prcnum int) ([]OriginUpstream, int64, error) {
return os, num, err
}
-func UpdateOriginExist(updatetime, pakName, version string, cveId int64, isExit int) (bool){
+func UpdateOriginExist(updatetime, pakName, version string, cveId int64, isExit int) (bool) {
o := orm.NewOrm()
- res, err := o.Raw("UPDATE cve_origin_upstream SET " +
+ res, err := o.Raw("UPDATE cve_origin_upstream SET "+
"is_exit = ?, update_time = ? where cve_id = ? and git_packname = ? and version = ?", isExit, updatetime, cveId, pakName, version).Exec()
if err == nil {
num, _ := res.RowsAffected()
@@ -38,9 +38,9 @@ func UpdateOriginExist(updatetime, pakName, version string, cveId int64, isExit
}
}
-func UpdateOriginExistTemp() (bool){
+func UpdateOriginExistTemp() (bool) {
o := orm.NewOrm()
- res, err := o.Raw("UPDATE cve_origin_upstream SET " +
+ res, err := o.Raw("UPDATE cve_origin_upstream SET "+
"is_exit = ? where is_exit = ?", 2, 0).Exec()
if err == nil {
num, _ := res.RowsAffected()
@@ -53,4 +53,4 @@ func UpdateOriginExistTemp() (bool){
logs.Error("更新失败, cve_origin_upstream, err: ", err)
return false
}
-}
\ No newline at end of file
+}
diff --git a/models/packages.go b/models/packages.go
index 414b433..a7be4cb 100644
--- a/models/packages.go
+++ b/models/packages.go
@@ -17,7 +17,6 @@ func GetIpWhite(ip string, iw *IpWhite) (err error) {
return err
}
-
func GetPackageInfo(packageName string, gi *GitPackageInfo) (err error) {
o := orm.NewOrm()
err = o.Raw("select * FROM cve_git_package_info WHERE package_name=?", packageName).QueryRow(gi)
@@ -82,12 +81,12 @@ func GetSubPackRequire(subId int64) (gg []GitSubPackRequire, num int64, err erro
return gs, 0, err
}
-func GetPackageList(pagesize int64,pagenum int64, QueryPkgName string) (ge []GitOpenEuler, num int64, err error) {
+func GetPackageList(pagesize int64, pagenum int64, QueryPkgName string) (ge []GitOpenEuler, num int64, err error) {
o := orm.NewOrm()
qs := o.QueryTable("cve_git_open_euler")
var us []GitOpenEuler
if QueryPkgName != "" {
- cnt, err := qs.Filter("package_name__icontains", QueryPkgName).Limit(pagesize, (pagenum-1)*pagesize).All(&us)
+ cnt, err := qs.Filter("package_name__icontains", QueryPkgName).Limit(pagesize, (pagenum-1)*pagesize).All(&us)
if err == nil {
logs.Info("cve_git_open_euler, count: ", cnt, "pagesize ", pagesize, ",pagenum ", pagenum, ", QueryPkgName ", QueryPkgName)
} else {
@@ -95,7 +94,7 @@ func GetPackageList(pagesize int64,pagenum int64, QueryPkgName string) (ge []Git
}
return us, cnt, err
} else {
- cnt, err := qs.Limit(pagesize, (pagenum-1)*pagesize).All(&us)
+ cnt, err := qs.Limit(pagesize, (pagenum-1)*pagesize).All(&us)
if err == nil {
logs.Info("cve_git_open_euler, count: ", cnt, "pagesize ", pagesize, ",pagenum ", pagenum, ", QueryPkgName ", QueryPkgName)
} else {
@@ -105,27 +104,24 @@ func GetPackageList(pagesize int64,pagenum int64, QueryPkgName string) (ge []Git
}
}
-//获取package 总数
func GetPackageNum(QueryPkgName string) int64 {
o := orm.NewOrm()
cg := o.QueryTable("cve_git_open_euler")
-
var ge []GitOpenEuler
if QueryPkgName != "" {
num, err := cg.Filter("package_name__icontains", QueryPkgName).All(&ge)
if err == nil {
return num
- }else{
+ } else {
return 0
}
- }else {
- num, err := cg.Filter("git_id__gt", 0).All(&ge)
+ } else {
+ num, err := cg.Filter("git_id__gt", 0).All(&ge)
if err == nil {
return num
- }else{
+ } else {
return 0
}
}
-
-}
\ No newline at end of file
+}
diff --git a/models/securitynotice.go b/models/securitynotice.go
new file mode 100644
index 0000000..1aff8c2
--- /dev/null
+++ b/models/securitynotice.go
@@ -0,0 +1,15 @@
+package models
+
+import "github.com/astaxie/beego/orm"
+
+//Read get security notice by colName
+func (sn *SecurityNotice) Read(colName string) error {
+ o := orm.NewOrm()
+ return o.Read(sn, colName)
+}
+//Update update security notice by column names
+func (sn *SecurityNotice)Update(colName ...string) error {
+ o := orm.NewOrm()
+ _, err := o.Update(sn, colName...)
+ return err
+}
diff --git a/models/uploadcve.go b/models/uploadcve.go
index 54e8d77..4ee45a2 100644
--- a/models/uploadcve.go
+++ b/models/uploadcve.go
@@ -10,16 +10,16 @@ type OpenSaId struct {
Id int64
}
-func QueryYamlData(pkgName string, version string)(GitOpenEuler, bool){
+func QueryYamlData(pkgName string, version string) (GitOpenEuler, bool) {
o := orm.NewOrm()
var goe GitOpenEuler
err := o.Raw("select * from cve_git_open_euler where package_name = ? and version = ?", pkgName, version).QueryRow(&goe)
if err != nil {
logs.Info("pkgName", pkgName, "version", version, ", cve_git_open_euler 无对应数据")
- return goe,false
+ return goe, false
} else {
logs.Info("pkgName", pkgName, "version", version, ", cve_git_open_euler 查询成功")
- return goe,true
+ return goe, true
}
}
@@ -34,27 +34,27 @@ func QueryOriginRepo(pkgName string) (GiteRepo, bool) {
err := o.Raw("select * from cve_gite_repo where path = ? and org_path = ? and status = ?", pkgName, repoOrg, 1).QueryRow(&gr)
if err != nil {
logs.Info("pkgName", pkgName, "repoOrg", repoOrg, ", cve_gite_repo 无对应数据")
- return gr,false
+ return gr, false
} else {
logs.Info("pkgName", pkgName, "repoOrg", repoOrg, ", cve_gite_repo 查询成功")
- return gr,true
+ return gr, true
}
}
-func QueryRepoMember(groupId int64, memberType string)([]GiteRepoMember, bool){
+func QueryRepoMember(groupId int64, memberType string) ([]GiteRepoMember, bool) {
o := orm.NewOrm()
var grm []GiteRepoMember
num, err := o.Raw("select * from cve_gite_repo_member where group_id = ? and member_type = ?", groupId, memberType).QueryRows(&grm)
- if err != nil || num == 0{
+ if err != nil || num == 0 {
logs.Info("groupId", groupId, ",memberType", memberType, ", cve_gite_repo_member 无对应数据")
- return grm,false
+ return grm, false
} else {
logs.Info("groupId", groupId, ",memberType", memberType, ", cve_gite_repo_member 查询成功")
- return grm,true
+ return grm, true
}
}
-func QueryCveOpeneulerdata(pkgName string, version string) (GitOpenEuler, bool){
+func QueryCveOpeneulerdata(pkgName string, version string) (GitOpenEuler, bool) {
goe, ok := QueryYamlData(pkgName, version)
if !ok || goe.GitId == 0 {
gr, okrg := QueryOriginRepo(pkgName)
@@ -89,7 +89,7 @@ func QueryCveOpeneulerdata(pkgName string, version string) (GitOpenEuler, bool){
return goe, ok
}
-func QueryCveOpeneulerDetaildata(pkgName string, version string) (GitPackageInfo, bool){
+func QueryCveOpeneulerDetaildata(pkgName string, version string) (GitPackageInfo, bool) {
o := orm.NewOrm()
var goe GitPackageInfo
err := o.Raw("select * from cve_git_package_info where package_name = ? and version = ?", pkgName, version).QueryRow(&goe)
@@ -102,32 +102,32 @@ func QueryCveOpeneulerDetaildata(pkgName string, version string) (GitPackageInfo
}
}
-func QueryCveOriginByIds(ids string) (OriginUpstream, bool){
+func QueryCveOriginByIds(ids string) (OriginUpstream, bool) {
o := orm.NewOrm()
var orcve OriginUpstream
err := o.Raw("select * from cve_origin_upstream where cve_un_ids = ?", ids).QueryRow(&orcve)
if err != nil {
logs.Info("ids", ids, ", cve_origin_upstream 新增数据")
- return orcve,false
+ return orcve, false
} else {
- return orcve,true
+ return orcve, true
}
}
func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *OriginUpstreamDesc,
ous *OriginUpstreamConfig, osi *OriginUpstreamImpact, osp *OriginUpstreamPoc, ose *OriginUpstreamEvent,
- osv *OriginUpstreamVulType, osf *OriginUpstreamFixSuggest) (Id int64, err error){
+ osv *OriginUpstreamVulType, osf *OriginUpstreamFixSuggest) (Id int64, err error) {
o := orm.NewOrm()
errs := o.Begin()
if errs == nil {
ouse := OriginUpstream{Ids: ou.Ids}
err := o.Read(&ouse, "Ids")
- if err == orm.ErrNoRows || err == orm.ErrMissPK{
+ if err == orm.ErrNoRows || err == orm.ErrMissPK {
logs.Info("新增数据: ", ou)
var num int64
if num, err = o.Insert(ou); err == nil {
logs.Info("insert cve_origin_upstream success, num:, cveNum", num, ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream failed, ou:", ou, ", err: ", err)
o.Rollback()
return 0, err
@@ -137,7 +137,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
o.Delete(&lod, "CveId")
if odnum, err := o.Insert(od); err == nil {
logs.Info("insert cve_origin_upstream_desc success, num:", odnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_desc failed, ou:", ou, ", err: ", err)
o.Rollback()
return 0, err
@@ -145,7 +145,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ous.CveId = num
lous := OriginUpstreamConfig{CveId: num}
err := o.Read(&lous, "CveId")
- if err == orm.ErrNoRows || err == orm.ErrMissPK{
+ if err == orm.ErrNoRows || err == orm.ErrMissPK {
logs.Info("cve_origin_upstream_config 不存在, cveId: ", num)
} else {
var lousc []OriginUpstreamConfigNode
@@ -165,7 +165,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
}
if ousnum, err := o.Insert(ous); err == nil {
logs.Info("insert cve_origin_upstream_config success, ousnum:", ousnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_config failed, ou:", ous, ", err: ", err)
o.Rollback()
return 0, err
@@ -177,7 +177,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
Lnode.ConfId = ous.ConfId
if lousnum, err := o.Insert(&Lnode); err == nil {
logs.Info("insert cve_origin_upstream_config_node success, lousnum:", lousnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_config_node failed, Lnode:", Lnode, ", err: ", err)
o.Rollback()
return 0, err
@@ -191,7 +191,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ouscnc.Vulnerable = nodCpe.Vulnerable
if lousnumc, err := o.Insert(&ouscnc); err == nil {
logs.Info("insert cve_origin_upstream_config_node_cpe success, lousnumc:", lousnumc, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_config_node_cpe failed, ouscnc:", ouscnc, ", err: ", err)
o.Rollback()
return 0, err
@@ -203,9 +203,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osi.CveId = num
losi := OriginUpstreamImpact{CveId: num}
errxx := o.Read(&losi, "CveId")
- if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK{
+ if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num)
- }else {
+ } else {
var losis []OriginUpstreamImpactScore
losisNum, err := o.Raw("select * from cve_origin_upstream_impact_score where impact_id = ?", losi.ImpactId).QueryRows(&losis)
if err != nil {
@@ -230,7 +230,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
if losinum, err := o.Insert(osi); err == nil {
logs.Info("insert cve_origin_upstream_impact success, lousnum:", losinum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact failed, Lnode:", osi, ", err: ", err)
o.Rollback()
return 0, err
@@ -244,7 +244,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
lousist.Status = 1
if lousistnum, err := o.Insert(&lousist); err == nil {
logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score failed, lousist:", lousist, ", err: ", err)
o.Rollback()
return 0, err
@@ -276,7 +276,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
}
if lousistnumv3, err := o.Insert(&lousisv3); err == nil {
logs.Info("insert cve_origin_upstream_impact_score_v3 success, lousistnumv3:", lousistnumv3, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score_v3 failed, lousisv3:", lousisv3, ", err: ", err)
o.Rollback()
return 0, err
@@ -290,7 +290,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
lousistv2.Status = 1
if lousistnum, err := o.Insert(&lousistv2); err == nil {
logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score failed, lousistv2:", lousistv2, ", err: ", err)
o.Rollback()
return 0, err
@@ -326,7 +326,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
}
if lousistnumv2, err := o.Insert(&lousisv2); err == nil {
logs.Info("insert cve_origin_upstream_impact_score_v2 success, lousistnumv2:", lousistnumv2, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score_v2 failed, lousisv2:", lousisv2, ", err: ", err)
o.Rollback()
return 0, err
@@ -335,15 +335,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osp.CveId = num
losp := OriginUpstreamPoc{CveId: num}
errxxx := o.Read(&losp, "CveId")
- if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK{
+ if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num)
- }else {
+ } else {
lospd := OriginUpstreamPoc{CveId: num}
o.Delete(&lospd, "CveId")
}
if ospnum, err := o.Insert(osp); err == nil {
logs.Info("insert Table: cve_origin_upstream_poc success, ospnum:", ospnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_poc failed, osp:", osp, ", err: ", err)
o.Rollback()
return 0, err
@@ -352,15 +352,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ose.CveId = num
lose := OriginUpstreamEvent{CveId: num}
errx := o.Read(&lose, "CveId")
- if errx == orm.ErrNoRows || errx == orm.ErrMissPK{
+ if errx == orm.ErrNoRows || errx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_event 不存在, cveId: ", num)
- }else {
+ } else {
losed := OriginUpstreamEvent{CveId: num}
o.Delete(&losed, "CveId")
}
if osenum, err := o.Insert(ose); err == nil {
logs.Info("insert Table: cve_origin_upstream_event success, osenum:", osenum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_event failed, ose:", ose, ", err: ", err)
o.Rollback()
return 0, err
@@ -380,12 +380,12 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
for _, ta := range ref.Tags {
tags = tags + string(ta) + ","
}
- tags = tags[:len(tags) - 1]
+ tags = tags[:len(tags)-1]
}
lousrd.Tags = tags
if lousrdnum, err := o.Insert(&lousrd); err == nil {
logs.Info("insert Table: cve_origin_upstream_reference success, lousrdnum:", lousrdnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_reference failed, lousrd:", lousrd, ", err: ", err)
o.Rollback()
return 0, err
@@ -397,7 +397,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osv.CveId = num
if osvnum, err := o.Insert(osv); err == nil {
logs.Info("insert Table: cve_origin_upstream_vul_type success, osvnum:", osvnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_vul_type failed, osv:", osv, ", err: ", err)
o.Rollback()
return 0, err
@@ -405,9 +405,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ose.CveId = num
lousfs := OriginUpstreamFixSuggest{CveId: num}
errxxsx := o.Read(&lousfs, "CveId")
- if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK{
+ if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_fix_suggest 不存在, cveId: ", num)
- }else {
+ } else {
var lousfst []OriginUpstreamFixSuggestRef
louscNum, err := o.Raw("select * from cve_origin_upstream_fix_suggest_ref where fix_id = ?", lousfs.FixId).QueryRows(&lousfst)
if err != nil {
@@ -426,7 +426,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osf.CveId = num
if osfnum, err := o.Insert(osf); err == nil {
logs.Info("insert Table: cve_origin_upstream_fix_suggest success, osfnum:", osfnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_fix_suggest failed, osf:", osf, ", err: ", err)
o.Rollback()
return 0, err
@@ -440,7 +440,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
lousfstr.Url = refer.Url
if osfstrnum, err := o.Insert(&lousfstr); err == nil {
logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref success, osfstrnum:", osfstrnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref failed, lousfstr:", lousfstr, ", err: ", err)
o.Rollback()
return 0, err
@@ -452,7 +452,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
loufsrtg.Name = refertag
if osfstgrnum, err := o.Insert(&loufsrtg); err == nil {
logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref_tag success, osfstgrnum:", osfstgrnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref_tag failed, loufsrtg:", loufsrtg, ", err: ", err)
o.Rollback()
return 0, err
@@ -468,7 +468,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ou.Ids = ouse.Ids
if num, err := o.Update(ou); err == nil {
logs.Info("Update cve_origin_upstream success, num:, cveNum", num, ou.Ids)
- }else {
+ } else {
logs.Error("Update cve_origin_upstream failed, ou:", ou, ", err: ", err)
o.Rollback()
return 0, err
@@ -479,7 +479,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
o.Delete(&lod, "CveId")
if odnum, err := o.Insert(od); err == nil {
logs.Info("insert cve_origin_upstream_desc success, num:", odnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_desc failed, ou:", ou, ", err: ", err)
o.Rollback()
return 0, err
@@ -487,7 +487,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ous.CveId = num
lous := OriginUpstreamConfig{CveId: num}
err := o.Read(&lous, "CveId")
- if err == orm.ErrNoRows || err == orm.ErrMissPK{
+ if err == orm.ErrNoRows || err == orm.ErrMissPK {
logs.Info("cve_origin_upstream_config 不存在, cveId: ", num)
} else {
var lousc []OriginUpstreamConfigNode
@@ -507,7 +507,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
}
if ousnum, err := o.Insert(ous); err == nil {
logs.Info("insert cve_origin_upstream_config success, ousnum:", ousnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_config failed, ou:", ous, ", err: ", err)
o.Rollback()
return 0, err
@@ -519,7 +519,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
Lnode.ConfId = ous.ConfId
if lousnum, err := o.Insert(&Lnode); err == nil {
logs.Info("insert cve_origin_upstream_config_node success, lousnum:", lousnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_config_node failed, Lnode:", Lnode, ", err: ", err)
o.Rollback()
return 0, err
@@ -533,7 +533,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ouscnc.Vulnerable = nodCpe.Vulnerable
if lousnumc, err := o.Insert(&ouscnc); err == nil {
logs.Info("insert cve_origin_upstream_config_node_cpe success, lousnumc:", lousnumc, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_config_node_cpe failed, ouscnc:", ouscnc, ", err: ", err)
o.Rollback()
return 0, err
@@ -546,9 +546,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osi.CveId = num
losi := OriginUpstreamImpact{CveId: num}
errxx := o.Read(&losi, "CveId")
- if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK{
+ if errxx == orm.ErrNoRows || errxx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num)
- }else {
+ } else {
var losis []OriginUpstreamImpactScore
losisNum, err := o.Raw("select * from cve_origin_upstream_impact_score where impact_id = ?", losi.ImpactId).QueryRows(&losis)
if err != nil {
@@ -573,7 +573,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
if losinum, err := o.Insert(osi); err == nil {
logs.Info("insert cve_origin_upstream_impact success, lousnum:", losinum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact failed, Lnode:", osi, ", err: ", err)
o.Rollback()
return 0, err
@@ -587,7 +587,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
lousist.Status = 1
if lousistnum, err := o.Insert(&lousist); err == nil {
logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score failed, lousist:", lousist, ", err: ", err)
o.Rollback()
return 0, err
@@ -619,7 +619,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
}
if lousistnumv3, err := o.Insert(&lousisv3); err == nil {
logs.Info("insert cve_origin_upstream_impact_score_v3 success, lousistnumv3:", lousistnumv3, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score_v3 failed, lousisv3:", lousisv3, ", err: ", err)
o.Rollback()
return 0, err
@@ -633,7 +633,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
lousistv2.Status = 1
if lousistnum, err := o.Insert(&lousistv2); err == nil {
logs.Info("insert cve_origin_upstream_impact_score success, lousistnum:", lousistnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score failed, lousistv2:", lousistv2, ", err: ", err)
o.Rollback()
return 0, err
@@ -669,7 +669,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
}
if lousistnumv2, err := o.Insert(&lousisv2); err == nil {
logs.Info("insert cve_origin_upstream_impact_score_v2 success, lousistnumv2:", lousistnumv2, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert cve_origin_upstream_impact_score_v2 failed, lousisv2:", lousisv2, ", err: ", err)
o.Rollback()
return 0, err
@@ -678,15 +678,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osp.CveId = num
losp := OriginUpstreamPoc{CveId: num}
errxxx := o.Read(&losp, "CveId")
- if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK{
+ if errxxx == orm.ErrNoRows || errxxx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_impact 不存在, cveId: ", num)
- }else {
+ } else {
lospd := OriginUpstreamPoc{CveId: num}
o.Delete(&lospd, "CveId")
}
if ospnum, err := o.Insert(osp); err == nil {
logs.Info("insert Table: cve_origin_upstream_poc success, ospnum:", ospnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_poc failed, osp:", osp, ", err: ", err)
o.Rollback()
return 0, err
@@ -695,15 +695,15 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ose.CveId = num
lose := OriginUpstreamEvent{CveId: num}
errx := o.Read(&lose, "CveId")
- if errx == orm.ErrNoRows || errx == orm.ErrMissPK{
+ if errx == orm.ErrNoRows || errx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_event 不存在, cveId: ", num)
- }else {
+ } else {
losed := OriginUpstreamEvent{CveId: num}
o.Delete(&losed, "CveId")
}
if osenum, err := o.Insert(ose); err == nil {
logs.Info("insert Table: cve_origin_upstream_event success, osenum:", osenum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_event failed, ose:", ose, ", err: ", err)
o.Rollback()
return 0, err
@@ -723,12 +723,12 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
for _, ta := range ref.Tags {
tags = tags + string(ta) + ","
}
- tags = tags[:len(tags) - 1]
+ tags = tags[:len(tags)-1]
}
lousrd.Tags = tags
if lousrdnum, err := o.Insert(&lousrd); err == nil {
logs.Info("insert Table: cve_origin_upstream_reference success, lousrdnum:", lousrdnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_reference failed, lousrd:", lousrd, ", err: ", err)
o.Rollback()
return 0, err
@@ -740,7 +740,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osv.CveId = num
if osvnum, err := o.Insert(osv); err == nil {
logs.Info("insert Table: cve_origin_upstream_vul_type success, osvnum:", osvnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_vul_type failed, osv:", osv, ", err: ", err)
o.Rollback()
return 0, err
@@ -748,9 +748,9 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
ose.CveId = num
lousfs := OriginUpstreamFixSuggest{CveId: num}
errxxsx := o.Read(&lousfs, "CveId")
- if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK{
+ if errxxsx == orm.ErrNoRows || errxxsx == orm.ErrMissPK {
logs.Info("cve_origin_upstream_fix_suggest 不存在, cveId: ", num)
- }else {
+ } else {
var lousfst []OriginUpstreamFixSuggestRef
louscNum, err := o.Raw("select * from cve_origin_upstream_fix_suggest_ref where fix_id = ?", lousfs.FixId).QueryRows(&lousfst)
if err != nil {
@@ -769,7 +769,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
osf.CveId = num
if osfnum, err := o.Insert(osf); err == nil {
logs.Info("insert Table: cve_origin_upstream_fix_suggest success, osfnum:", osfnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_fix_suggest failed, osf:", osf, ", err: ", err)
o.Rollback()
return 0, err
@@ -783,7 +783,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
lousfstr.Url = refer.Url
if osfstrnum, err := o.Insert(&lousfstr); err == nil {
logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref success, osfstrnum:", osfstrnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref failed, lousfstr:", lousfstr, ", err: ", err)
o.Rollback()
return 0, err
@@ -795,7 +795,7 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
loufsrtg.Name = refertag
if osfstgrnum, err := o.Insert(&loufsrtg); err == nil {
logs.Info("insert Table: cve_origin_upstream_fix_suggest_ref_tag success, osfstgrnum:", osfstgrnum, ", cveNum", ou.Ids)
- }else {
+ } else {
logs.Error("insert Table: cve_origin_upstream_fix_suggest_ref_tag failed, loufsrtg:", loufsrtg, ", err: ", err)
o.Rollback()
return 0, err
@@ -813,24 +813,24 @@ func CreateOriginCve(CveData common.CveOriginData, ou *OriginUpstream, od *Origi
return 0, nil
}
-func QueryCveErrorInfo(issueStatus int8, startDate, endDate string)([]IssueTemplate, bool){
+func QueryCveErrorInfo(issueStatus int8, startDate, endDate string) ([]IssueTemplate, bool) {
o := orm.NewOrm()
var it []IssueTemplate
var num int64
var err error
if startDate != "" {
- num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template " +
+ num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template "+
"where issue_status = ? and create_time >= ? and create_time <= ?", issueStatus, startDate, endDate).QueryRows(&it)
} else {
- num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template " +
+ num, err = o.Raw("select cve_num,error_description,create_time from cve_issue_template "+
"where issue_status = ? and create_time <= ?", issueStatus, endDate).QueryRows(&it)
}
- if err != nil || num == 0{
+ if err != nil || num == 0 {
logs.Info(issueStatus, startDate, endDate, ", cve_issue_template 无对应数据")
- return it,false
+ return it, false
} else {
logs.Info(issueStatus, startDate, endDate, ", cve_issue_template 查询成功")
- return it,true
+ return it, true
}
-}
\ No newline at end of file
+}
diff --git a/models/user.go b/models/user.go
index 99dbfc5..3952c04 100644
--- a/models/user.go
+++ b/models/user.go
@@ -12,7 +12,8 @@ var (
func init() {
UserList = make(map[string]*User)
- u := User{"user_11111", "astaxie", "11111", Profile{"male", 20, "Singapore", "astaxie@gmail.com"}}
+ u := User{"user_11111", "astaxie", "11111",
+ Profile{"male", 20, "Singapore", "astaxie@gmail.com"}}
UserList["user_11111"] = &u
}
diff --git a/models/ymal.go b/models/ymal.go
index 6ef2f88..2c3c0f4 100644
--- a/models/ymal.go
+++ b/models/ymal.go
@@ -7,7 +7,7 @@ import (
func GetYamlTable(gt *[]GitPackageTable) (int64, error) {
o := orm.NewOrm()
- num, errx := o.Raw("select *"+
+ num, errx := o.Raw("select *" +
" from cve_git_package_table").QueryRows(gt)
if errx != nil {
logs.Error("获取数据失败或者不存在, err: ", errx)
@@ -34,7 +34,6 @@ func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) {
errx := o.Raw("select *"+
" from cve_git_package_table where table_name = ? ", gt.TableName).QueryRow(&localgt)
if errx != nil {
- // 创建
var TableId int64
if TableId, err = o.Insert(gt); err == nil {
logs.Info("insert cve_git_package_table success, TableId: ", TableId, "tableName: ", gt.TableName)
@@ -44,7 +43,6 @@ func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) {
}
return TableId, nil
} else {
- // 更新
gt.TableId = localgt.TableId
gt.Brands = localgt.Brands
if num, err := o.Update(gt); err == nil {
@@ -57,10 +55,10 @@ func CreateYamlTable(gt *GitPackageTable) (TableId int64, err error) {
}
}
-func GetSingleYaml(ge *GitOpenEuler) (bool, error){
+func GetSingleYaml(ge *GitOpenEuler) (bool, error) {
o := orm.NewOrm()
if ge.Version != "" && ge.Release != "" {
- localge := GitOpenEuler{PackageName: ge.PackageName, Version:ge.Version, Release:ge.Release}
+ localge := GitOpenEuler{PackageName: ge.PackageName, Version: ge.Version, Release: ge.Release}
err := o.Read(&localge, "PackageName", "Version", "Release")
logs.Info("查询yaml数据是否存在:", ge, ", localge: ", localge, ", err: ", err)
if err == orm.ErrNoRows {
@@ -91,7 +89,6 @@ func InsertOpenEulerRelate(getr *GitOpenEulerTableRelate) (id int64, typex strin
" from cve_git_open_euler_table_relate where git_id = ? and table_name = ?",
getr.GitId, getr.TableName).QueryRow(&localge)
if errx != nil {
- // 创建
var relateId int64
if relateId, err = o.Insert(getr); err == nil {
logs.Info("insert cve_git_open_euler_table_relate success, RelateId: ", relateId, "tableName: ", getr.TableName)
@@ -101,10 +98,9 @@ func InsertOpenEulerRelate(getr *GitOpenEulerTableRelate) (id int64, typex strin
}
return relateId, "insert", nil
} else {
- // 更新
getr.RelateId = localge.RelateId
if _, err := o.Update(getr); err == nil {
- logs.Info("update cve_git_open_euler_table_relate success, RelateId: ", getr.RelateId, "tableName: ", getr.TableName)
+ logs.Info("update cve_git_open_euler_table_relate success, RelateId: ", getr.RelateId, "tableName: ", getr.TableName)
} else {
logs.Error("update cve_git_open_euler_table_relate failed, ", "tableName: ", getr.TableName, "err: ", err)
return getr.RelateId, "update", err
@@ -120,10 +116,9 @@ func CreateYaml(ge *GitOpenEuler, tableValue GitPackageTable) (id int64, typex s
getr.TableName = tableValue.TableName
getr.Brands = tableValue.Brands
errx := o.Raw("select *"+
- " from cve_git_open_euler where package_name = ? and (version = ? or release = ?)",
- ge.PackageName, ge.Version, ge.Release).QueryRow(&localge)
+ " from cve_git_open_euler where package_name = ? and version = ?",
+ ge.PackageName, ge.Version).QueryRow(&localge)
if errx != nil {
- // 创建
logs.Info("createYaml: ", localge)
ge.Status = 0
var GitId int64
@@ -137,12 +132,11 @@ func CreateYaml(ge *GitOpenEuler, tableValue GitPackageTable) (id int64, typex s
InsertOpenEulerRelate(&getr)
return GitId, "insert", nil
} else {
- // 更新
logs.Info("createYaml: ", localge, "GitOpenEuler: ", ge)
ge.Status = 1
ge.GitId = localge.GitId
if _, err := o.Update(ge); err == nil {
- logs.Info("update cve_git_open_euler success, GitId: ", ge.GitId, "packName: ", ge.PackageName)
+ logs.Info("update cve_git_open_euler success, GitId: ", ge.GitId, "packName: ", ge.PackageName)
} else {
logs.Error("update cve_git_open_euler failed, ", "packName: ", ge.PackageName, "err: ", err)
return ge.GitId, "update", err
@@ -153,7 +147,6 @@ func CreateYaml(ge *GitOpenEuler, tableValue GitPackageTable) (id int64, typex s
}
}
-
func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex string, err error) {
o := orm.NewOrm()
var localgp GitPackageInfo
@@ -161,7 +154,6 @@ func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex stri
" from cve_git_package_info where git_id = ? and package_name = ? and version = ?",
ge.GitId, gp.PackageName, gp.Version).QueryRow(&localgp)
if errx != nil {
- // 创建
gp.Status = 0
var DetailId int64
if DetailId, err = o.Insert(gp); err == nil {
@@ -172,7 +164,6 @@ func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex stri
}
return DetailId, "insert", nil
} else {
- // 更新
gp.DetailId = localgp.DetailId
if _, err := o.Update(gp); err == nil {
logs.Info("update cve_git_package_info success, DetailId: ", gp.DetailId, ",packName: ", gp.PackageName)
@@ -184,7 +175,6 @@ func CreateYamlDetail(gp *GitPackageInfo, ge GitOpenEuler) (id int64, typex stri
}
}
-
func CreateYamlSubPack(gb *GitSubPack) (SubId int64, typex string, err error) {
o := orm.NewOrm()
var localgb GitSubPack
@@ -192,7 +182,6 @@ func CreateYamlSubPack(gb *GitSubPack) (SubId int64, typex string, err error) {
" from cve_git_sub_pack where detail_id = ? and ids = ? and sub_pack_name = ?",
gb.DetailId, gb.Ids, gb.SubPackName).QueryRow(&localgb)
if errx != nil {
- // 创建
var SubId int64
if SubId, err = o.Insert(gb); err == nil {
logs.Info("insert cve_git_sub_pack success, SubId: ", SubId, ",SubPackName: ", gb.SubPackName)
@@ -205,7 +194,6 @@ func CreateYamlSubPack(gb *GitSubPack) (SubId int64, typex string, err error) {
return localgb.SubId, "update", errx
}
-
func CreateYamlSubPackProvides(gs *GitSubPackProvides) (ProvideId int64, typex string, err error) {
o := orm.NewOrm()
var localgs GitSubPackProvides
@@ -213,7 +201,6 @@ func CreateYamlSubPackProvides(gs *GitSubPackProvides) (ProvideId int64, typex s
" from cve_git_sub_pack_provides where sub_id = ? and ids = ? and provide_name = ?",
gs.SubId, gs.Ids, gs.ProvideName).QueryRow(&localgs)
if errx != nil {
- // 创建
var ProvideId int64
if ProvideId, err = o.Insert(gs); err == nil {
logs.Info("insert cve_git_sub_pack_provides success, ProvideId: ", ProvideId, "ProvideName: ", gs.ProvideName)
@@ -226,7 +213,6 @@ func CreateYamlSubPackProvides(gs *GitSubPackProvides) (ProvideId int64, typex s
return localgs.ProvideId, "update", errx
}
-
func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex string, err error) {
o := orm.NewOrm()
var localgs GitSubPackRequiredby
@@ -234,7 +220,6 @@ func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex strin
" from cve_git_sub_pack_requiredby where provide_id = ? and requiredb = ?",
gs.ProvideId, gs.Requiredby).QueryRow(&localgs)
if errx != nil {
- // 创建
var Id int64
if Id, err = o.Insert(gs); err == nil {
logs.Info("insert cve_git_sub_pack_requiredby success, ID: ", Id, "requiredb: ", gs.Requiredby)
@@ -247,7 +232,6 @@ func CreateYamlSubPackRequiredb(gs *GitSubPackRequiredby) (Id int64, typex strin
return localgs.Id, "update", errx
}
-
func CreateYamlSubPackRequires(gs *GitSubPackRequire) (RequireId int64, typex string, err error) {
o := orm.NewOrm()
var localgs GitSubPackRequire
@@ -255,7 +239,6 @@ func CreateYamlSubPackRequires(gs *GitSubPackRequire) (RequireId int64, typex st
" from cve_git_sub_pack_require where sub_id = ? and ids = ? and require_name = ?",
gs.SubId, gs.Ids, gs.RequireName).QueryRow(&localgs)
if errx != nil {
- // 创建
var RequireId int64
if RequireId, err = o.Insert(gs); err == nil {
logs.Info("insert cve_git_sub_pack_require success, RequireId: ", RequireId, "RequireName: ", gs.RequireName)
@@ -266,4 +249,4 @@ func CreateYamlSubPackRequires(gs *GitSubPackRequire) (RequireId int64, typex st
return RequireId, "insert", nil
}
return localgs.RequireId, "update", errx
-}
\ No newline at end of file
+}
diff --git a/routers/router.go b/routers/router.go
index 16f1996..568a177 100644
--- a/routers/router.go
+++ b/routers/router.go
@@ -54,9 +54,9 @@ func init() {
beego.NSInclude(&controllers.HookEventControllers{},
),
),
- beego.NSNamespace("/download/excel",beego.NSInclude(
+ beego.NSNamespace("/download/excel", beego.NSInclude(
&controllers.FileController{},
- ),
+ ),
),
beego.NSNamespace("/cve/detail",
beego.NSInclude(
diff --git a/task/cve.go b/task/cve.go
index 3854eaf..e1be20e 100644
--- a/task/cve.go
+++ b/task/cve.go
@@ -8,19 +8,19 @@ import (
"github.com/astaxie/beego/logs"
)
-//ProcCveOriginData 处理api获取的原始数据
-func ProcCveOriginData(prcNum, days , openeulerNum int, cveRef, owner string)(bool, error) {
- // 处理api获取的原始数据
+//ProcCveOriginData Process raw data obtained by api
+func ProcCveOriginData(prcNum, days, openeulerNum int, cveRef, owner string) (bool, error) {
+ // Process raw data obtained by api
ok, err := taskhandler.GetCveOriginData(prcNum, days, openeulerNum, cveRef)
if !ok {
logs.Error("接口上的原始数据处理失败(GetCveOriginData), err: ", err)
}
- // 处理excel的原始数据
+ // Processing excel raw data
okx, err := taskhandler.GetCveOriginExcelData(prcNum, days, openeulerNum, cveRef)
if !okx {
logs.Error("excel数据处理失败(GetCveOriginExcelData), errx: ", err)
}
- // 兼容已创建的issue数据
+ // Compatible with created issue data
oki, err := taskhandler.GetCveIssueData(prcNum, days, openeulerNum, cveRef, owner)
if !oki {
logs.Error("issue数据处理失败(GetCveIssueData), erri: ", err)
@@ -28,28 +28,28 @@ func ProcCveOriginData(prcNum, days , openeulerNum int, cveRef, owner string)(bo
return true, nil
}
-//ParamsCveOriginData 处理cve原始数据
-func ParamsCveOriginData() error{
+//ParamsCveOriginData Processing cve raw data
+func ParamsCveOriginData() error {
defer common.Catchs()
- // 查询需要处理的cve, 1:新增;2:修改
+ // Query the cve to be processed, 1: add; 2: modify
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return err
}
- // 单次处理的数据量
+ // The amount of data processed at a time
prcnum, err := BConfig.Int("crontab::prcnum")
if err != nil {
- logs.Error("config crontab::prcnum error: invalid value is ",prcnum)
+ logs.Error("config crontab::prcnum error: invalid value is ", prcnum)
return errors.New("value is nil")
}
- // 处理多少天到现在的数据
+ // How many days have been processed to date data
days, ok := BConfig.Int("crontab::days")
if ok != nil {
logs.Error("config crontab::days error:", err)
return ok
}
- // openeuler 编号开始值
+ // openeuler Number start value
cveRef := BConfig.String("cve::cveref")
openeulernum, ok := BConfig.Int("cve::openeulernum")
if ok != nil {
@@ -57,7 +57,7 @@ func ParamsCveOriginData() error{
return ok
}
owner := BConfig.String("gitee::owner")
- // 获取表的数据源
+ // Get the data source of the table
_, errx := ProcCveOriginData(prcnum, days, openeulernum, cveRef, owner)
return errx
}
diff --git a/task/inittask.go b/task/inittask.go
index bffe416..8269c65 100644
--- a/task/inittask.go
+++ b/task/inittask.go
@@ -6,7 +6,7 @@ import (
"github.com/astaxie/beego/toolbox"
)
-//CheckOriCveTask 校验原始cve数据
+//CheckOriCveTask Verify the original cve data
func CheckOriCveTask(oriCveCheck string, ch *chan bool) {
logs.Info("校验原始cve数据 task start")
CheckTask := toolbox.NewTask("CheckOriCve", oriCveCheck, CheckOriCve)
@@ -17,13 +17,11 @@ func CheckOriCveTask(oriCveCheck string, ch *chan bool) {
}
toolbox.AddTask("CheckOriCve", CheckTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("校验原始cve数据 task end")
*ch <- true
- //defer toolbox.StopTask()
}
-//InitYamlTask 获取yaml数据源
+//InitYamlTask Get yaml data source
func InitYamlTask(getYaml string, ch *chan bool) {
logs.Info("获取yaml数据源 task start")
YamlTask := toolbox.NewTask("GetYamlData", getYaml, GetYamlData)
@@ -34,13 +32,11 @@ func InitYamlTask(getYaml string, ch *chan bool) {
}
toolbox.AddTask("GetYamlData", YamlTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("获取yaml数据源 task end")
*ch <- true
- //defer toolbox.StopTask()
}
-//InitCveTask 将cve原始数据生成cve库
+//InitCveTask Generate cve original data into cve library
func InitCveTask(getCve string, ch *chan bool) {
logs.Info("将cve原始数据生成cve库 task start")
CveTask := toolbox.NewTask("ParamsCveOriginData", getCve, ParamsCveOriginData)
@@ -51,16 +47,13 @@ func InitCveTask(getCve string, ch *chan bool) {
}
toolbox.AddTask("ParamsCveOriginData", CveTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("将cve原始数据生成cve库 task end")
*ch <- true
- //defer toolbox.StopTask()
}
-//InitIssueTask 获取已经创建的issue数据源
+//InitIssueTask Get the created issue data source
func InitIssueTask(getIssue string, ch *chan bool) {
logs.Info("获取已经创建的issue数据源 task start")
- //taskhandler.GrabIssueByOrg("8457c66db66955376519059b97e33dd1","src-openeuler")
issueTask := toolbox.NewTask("GetIssueData", getIssue, GetIssueData)
err := issueTask.Run()
if err != nil {
@@ -69,13 +62,11 @@ func InitIssueTask(getIssue string, ch *chan bool) {
}
toolbox.AddTask("GetIssueData", issueTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("获取已经创建的issue数据源 task end")
*ch <- true
- //defer toolbox.StopTask()
}
-//InitIssueToken 执行获取token任务开始
+//InitIssueToken Execute the token acquisition task to start
func InitIssueToken(issueOath string, ch *chan bool) {
logs.Info("执行获取token任务开始")
TokenTask := toolbox.NewTask("GetGiteeToken", issueOath, GetGiteeToken)
@@ -86,13 +77,11 @@ func InitIssueToken(issueOath string, ch *chan bool) {
}
toolbox.AddTask("GetGiteeToken", TokenTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("执行获取token任务结束")
*ch <- true
- //defer toolbox.StopTask()
}
-//CreatTask 执行创建issue任务开始
+//CreatTask Execute the create issue task to start
func CreatTask(createIssue string, ch *chan bool) {
logs.Info("执行创建issue任务开始")
cIssueTask := toolbox.NewTask("CreateIssue", createIssue, CreateIssue)
@@ -103,13 +92,11 @@ func CreatTask(createIssue string, ch *chan bool) {
}
toolbox.AddTask("CreateIssue", cIssueTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("执行创建issue任务结束")
*ch <- true
- //defer toolbox.StopTask()
}
-//GenSAExcelTask 执行issue生成excel任务开始
+//GenSAExcelTask Execute issue to generate excel task start
func GenSAExcelTask(genExcel string, ch *chan bool) {
logs.Info("执行issue生成excel任务开始")
genExcelTask := toolbox.NewTask("GenExcelData", genExcel, GenExcelData)
@@ -120,13 +107,11 @@ func GenSAExcelTask(genExcel string, ch *chan bool) {
}
toolbox.AddTask("GenExcelData", genExcelTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("执行issue生成excel任务结束")
*ch <- true
- //defer toolbox.StopTask()
}
-//打印日志到控制台上,同时删除多余日志
+// Print logs to the console and delete redundant logs
func PrintLogTask(printLog string, ch *chan bool) {
logs.Info("创建日志任务 task start")
printLogTask := toolbox.NewTask("ProcLogData", printLog, ProcLogData)
@@ -137,20 +122,18 @@ func PrintLogTask(printLog string, ch *chan bool) {
}
toolbox.AddTask("ProcLogData", printLogTask)
toolbox.StartTask()
- //time.Sleep(time.Minute * 1)
logs.Info("创建日志任务 task end")
*ch <- true
- //defer toolbox.StopTask()
}
-//InitTask 定时任务初始化
+//InitTask Timing task initialization
func InitTask() {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
logs.Error("config init error: file:conf/app.conf: ", err)
return
}
- // 获取原始的yaml数据
+ // Get the original yaml data
ymalflag, errxs := BConfig.Int("crontab::ymalflag")
if ymalflag == 1 && errxs == nil {
getymal := BConfig.String("crontab::getymal")
@@ -159,7 +142,7 @@ func InitTask() {
<-yamch
close(yamch)
}
- // 校验原始cve数据
+ // Verify the original cve data
oricveflag, errxs := BConfig.Int("crontab::oricveflag")
if oricveflag == 1 && errxs == nil {
oricvecheck := BConfig.String("crontab::oricvecheck")
@@ -168,22 +151,22 @@ func InitTask() {
<-checkch
close(checkch)
}
- // 定时刷新gittoken
+ // Refresh gittoken regularly
gittokenflag, errx := BConfig.Int("crontab::gittokenflag")
if gittokenflag == 1 && errx == nil {
issueoath := BConfig.String("crontab::issueoath")
- // 定时刷新token
+ // Refresh token regularly
//go InitIssueToken(issueoath, &ch)
- // 从环境变量获取token
+ // Get token from environment variable
gitToken := BConfig.String("gitee::git_token")
if gitToken == "xxx" {
var ch = make(chan bool)
go InitIssueToken(issueoath, &ch)
- <- ch
+ <-ch
close(ch)
}
}
- // 获取已经创建的issue
+ // Get the created issue
getissueflag, errxs := BConfig.Int("crontab::getissueflag")
if getissueflag == 1 && errxs == nil {
getissue := BConfig.String("crontab::getissue")
@@ -192,7 +175,7 @@ func InitTask() {
<-issuech
close(issuech)
}
- // 生成cve漏洞库
+ // Generate cve vulnerability library
cveflag, errxs := BConfig.Int("crontab::cveflag")
if cveflag == 1 && errxs == nil {
getcve := BConfig.String("crontab::getcve")
@@ -201,7 +184,7 @@ func InitTask() {
<-cvech
close(cvech)
}
- // 定时输出日志到控制台上
+ // Regularly output logs to the console
printLogFlag, errxs := BConfig.Int("crontab::printlogflag")
if printLogFlag == 1 && errxs == nil {
printLog := BConfig.String("crontab::printlog")
@@ -210,7 +193,7 @@ func InitTask() {
<-logch
close(logch)
}
- // 添加issue
+ // Add issue
taskFlag, errx := BConfig.Int("crontab::issueflag")
if taskFlag == 1 && errx == nil {
var ch = make(chan bool)
@@ -221,7 +204,7 @@ func InitTask() {
} else {
logs.Info("no task")
}
- // 将issue生成excel数据
+ // Generate excel data from issue
genexcelflag, errx := BConfig.Int("crontab::genexcelflag")
if genexcelflag == 1 && errx == nil {
var ch = make(chan bool)
diff --git a/task/issuetask.go b/task/issuetask.go
index de3c812..02a9ea7 100644
--- a/task/issuetask.go
+++ b/task/issuetask.go
@@ -12,10 +12,10 @@ import (
"strings"
)
-//GetGiteeToken 获取码云API TOKEN
+//GetGiteeToken Get Code Cloud API TOKEN
func GetGiteeToken() error {
defer common.Catchs()
- // 查询需要处理的cve, 1:新增;2:修改
+ // Query the cve to be processed, 1: add; 2: modify
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
logs.Error("config init error:", err)
@@ -31,13 +31,11 @@ func GetGiteeToken() error {
logs.Error("config gitee::clientSecret error: invalid value is ", clientSecret)
return errors.New("value is nil")
}
-
Email := BConfig.String("gitee::email")
if Email == "" {
logs.Error("config gitee::email error: value is nil")
return errors.New("value is nil")
}
-
password := BConfig.String("gitee::password")
if password == "" {
logs.Error("config gitee::password error: value is nil")
@@ -60,10 +58,10 @@ func GetGiteeToken() error {
return nil
}
-//CreateIssue 创建issue
+//CreateIssue Create issue
func CreateIssue() error {
defer common.Catchs()
- // 查询需要处理的cve, 1:新增;2:修改
+ // Query the cve to be processed, 1: add; 2: modify
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
logs.Error("config init error:", err)
@@ -96,7 +94,7 @@ func CreateIssue() error {
path := BConfig.String("gitee::path")
for index, issueValue := range cveData {
logs.Info("当前正在处理第:", index, "条cve数据, cveNum: ", issueValue.CveNum)
- // 判断issue是否已经处理过
+ // Determine whether the issue has been processed
goi, oks := models.QueryIssueCveByNum(issueValue.CveNum, issueValue.PackName)
if oks {
if strings.ToLower(goi.State) == "closed" || strings.ToLower(goi.State) == "rejected" {
@@ -105,14 +103,14 @@ func CreateIssue() error {
continue
}
}
- // 判断cve是否已经处理过
+ // Determine whether cve has been processed
issueExist := taskhandler.GetCveSecurityNotice(issueValue.CveNum)
if issueExist {
models.UpdateIssueStatus(issueValue, 2)
logs.Info("cve数据已经在官网上展示过,不需要在git上提交issue, cveData: ", issueValue)
continue
}
- // 处理每一条cve数据
+ // Process each piece of cve data
if issueValue.Status == 0 {
err := ProcIssue(issueValue, accessToken, owner, path)
if err != nil {
@@ -130,15 +128,15 @@ func CreateIssue() error {
return nil
}
-//ProcUpdateIssue 更新issue
+//ProcUpdateIssue Update issue
func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path string) error {
- // 查询修改评分
+ // Query and modify score
sr, err := models.QueryIssueScoreRecord(issueValue.CveId, 0)
if err != nil {
logs.Error("查询 评分记录失败, cveId: ", issueValue.CveId, "err: ", err)
return err
}
- // 查询issue模板
+ // Query issue template
var it models.IssueTemplate
it.CveId = issueValue.CveId
lit, bools := models.GetIssueTemplet(&it)
@@ -154,9 +152,9 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri
logs.Error("更新issue 模板失败, cveId: ", issueValue.CveId, "err: ", err)
return err
}
- // 更新issue状态
+ // Update issue status
models.UpdateIssueStatus(issueValue, 2)
- // 更新分数状态
+ // Update score status
models.UpdateIssueScore(issueValue, 2)
templetID, err := models.CreateIssueTemplate(&lit)
if err != nil {
@@ -169,7 +167,7 @@ func ProcUpdateIssue(issueValue models.VulnCenter, accessToken, owner, path stri
return nil
}
-//ProcIssue 处理issue
+//ProcIssue Deal with issue
func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) error {
assignee := ""
brandArry := []string{}
@@ -177,7 +175,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
if err == nil && len(sn.CveNum) > 0 {
path = issueValue.PackName
logs.Info("查询安全信息:sn: ", sn)
- // 获取issue处理人
+ // Get issue handler
gitYaml, ok := models.QueryCveOpeneulerdata(issueValue.PackName, issueValue.CveVersion)
if !ok || gitYaml.MainTainer == "" || len(gitYaml.MainTainer) < 1 {
assignee, err = taskhandler.GetCollaboratorInfo(accessToken, owner, path)
@@ -187,7 +185,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
}
} else {
assignee = gitYaml.MainTainer
- // 查询受影响的分支信息
+ // Query the affected branch information
gt, errgt := models.QueryCveBrands(gitYaml.GitId)
if errgt == nil {
for _, t := range gt {
@@ -208,7 +206,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
}
branchs := ""
errBrands := errors.New("")
- // 获取分支信息
+ // Get branch information
if len(brandArry) > 0 {
for _, b := range brandArry {
if b != "" && len(b) > 1 {
@@ -230,7 +228,7 @@ func ProcIssue(issueValue models.VulnCenter, accessToken, owner, path string) er
logs.Error("创建issue失败, err: ", err, "resp: ", resp, "cveId: ", issueValue.CveId)
return err
}
- // 存储安全公告相关信息
+ // Store security bulletin related information
var sec models.SecurityNotice
taskhandler.CreateSecNoticeData(&sec, issueValue, path, branchs)
secID, err := models.UpdateSecNotice(&sec)
diff --git a/task/oricvecheck.go b/task/oricvecheck.go
index 4b0cee6..33ceab3 100644
--- a/task/oricvecheck.go
+++ b/task/oricvecheck.go
@@ -8,22 +8,22 @@ import (
"github.com/astaxie/beego/logs"
)
-//CheckOriCve 检查原始数据的CVE
+//CheckOriCve Check the CVE of the original data
func CheckOriCve() error {
defer common.Catchs()
- // 查询需要处理的cve, 1:新增;2:修改
+ // Query the cve to be processed, 1: add; 2: modify
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
logs.Error("config init error:", err)
return err
}
- // 单次处理的数据量
+ // The amount of data processed at a time
prcNum, err := BConfig.Int("crontab::prcNum")
if err != nil {
logs.Error("config crontab::prcNum error: invalid value is ", prcNum)
return errors.New("value is nil")
}
- // 获取表的数据源
+ // Get the data source of the table
_, err = taskhandler.CheckCveOriginData(prcNum)
return err
}
diff --git a/task/printlog.go b/task/printlog.go
index 5c505c2..5641ff6 100644
--- a/task/printlog.go
+++ b/task/printlog.go
@@ -9,14 +9,14 @@ import (
"os"
)
-func DeletLogs() error{
+func DeletLogs() error {
BConfig, err := config.NewConfig("ini", "conf/app.conf")
- if err != nil{
+ if err != nil {
logs.Error("config init error:", err)
return err
}
logDir := BConfig.String("log::log_dir")
- if logDir == ""{
+ if logDir == "" {
logs.Error("config excel::log_dir error: invalid value is ", logDir)
return errors.New("value is nil")
}
@@ -36,15 +36,13 @@ func DeletLogs() error{
}
return nil
}
-//ProcCveOriginData 处理api获取的原始数据
-func ProcLogData() error{
+
+// ProcLogData Processing log
+func ProcLogData() error {
// delete logs
err := DeletLogs()
if err != nil {
logs.Error(err)
}
-
- // 打印日志
return err
}
-
diff --git a/task/yaml.go b/task/yaml.go
index 57c9c33..14580fc 100644
--- a/task/yaml.go
+++ b/task/yaml.go
@@ -8,10 +8,10 @@ import (
"github.com/astaxie/beego/logs"
)
-//GetYamlData 获取yaml数据源
+// GetYamlData Get yaml data source
func GetYamlData() error {
defer common.Catchs()
- // 查询需要处理的cve, 1:新增;2:修改
+ // Query the cve to be processed, 1: add; 2: modify
BConfig, err := config.NewConfig("ini", "conf/app.conf")
if err != nil {
logs.Error("config init error:", err)
@@ -22,9 +22,9 @@ func GetYamlData() error {
logs.Error("config yaml::apiurl error: invalid value is ", apiUrl)
return errors.New("value is nil")
}
- // 获取表的数据源
+ // Get the data source of the table
_, err = taskhandler.GetYamlTables(apiUrl)
- // 获取yaml
+ // Get yaml
if err == nil {
_, err = taskhandler.GetYamlByGit(apiUrl)
}
diff --git a/taskhandler/assist.go b/taskhandler/assist.go
index fc2c72b..dc92987 100644
--- a/taskhandler/assist.go
+++ b/taskhandler/assist.go
@@ -9,7 +9,6 @@ import (
"strings"
)
-
func GetOautToken(gt GiteeToken) {
url := "https://gitee.com/oauth/token"
var req util.RequestInfo
@@ -27,7 +26,7 @@ func GetOautToken(gt GiteeToken) {
return
}
var respDict map[string]interface{}
- err =json.Unmarshal(resp, &respDict)
+ err = json.Unmarshal(resp, &respDict)
if err != nil {
logs.Error(err)
return
@@ -40,11 +39,10 @@ func GetOautToken(gt GiteeToken) {
os.Setenv("GITEE_TOKEN", GitToken)
}
-
-func GetCollaboratorInfo(accessToken string, owner string, path string) (string, error){
- if accessToken != "" && owner != "" && path !="" {
+func GetCollaboratorInfo(accessToken string, owner string, path string) (string, error) {
+ if accessToken != "" && owner != "" && path != "" {
url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/collaborators?access_token=" + accessToken
- collabor, err:= util.HTTPGet(url)
+ collabor, err := util.HTTPGet(url)
if err == nil && collabor != nil {
for _, value := range collabor {
if _, ok := value["id"]; !ok {
@@ -60,7 +58,7 @@ func GetCollaboratorInfo(accessToken string, owner string, path string) (string,
if mapKey == "permissions" {
mapValuex := mapValue.(map[string]interface{})
for perKey, perValue := range mapValuex {
- if perKey == "admin" && perValue.(bool) == true{
+ if perKey == "admin" && perValue.(bool) == true {
flag = true
}
}
@@ -78,20 +76,20 @@ func GetCollaboratorInfo(accessToken string, owner string, path string) (string,
return "", errors.New("参数错误")
}
-func GetBranchesInfo(accessToken string, owner string, path string) (string, error){
+func GetBranchesInfo(accessToken string, owner string, path string) (string, error) {
branchName := ""
if accessToken != "" && owner != "" && path != "" {
- url := "https://gitee.com/api/v5/repos/"+ owner +"/"+ path +"/branches?access_token=" + accessToken
- branch, err:= util.HTTPGet(url)
+ url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/branches?access_token=" + accessToken
+ branch, err := util.HTTPGet(url)
if err == nil && branch != nil {
- for _, value := range(branch) {
+ for _, value := range (branch) {
if _, ok := value["name"]; !ok {
logs.Error("branches, err: ", ok, "url: ", url)
continue
}
mapValue := value["name"].(string)
if mapValue != "" && len(mapValue) > 3 {
- subStr := mapValue[len(mapValue) - 3:]
+ subStr := mapValue[len(mapValue)-3:]
if strings.ToUpper(subStr) == "LTS" {
branchName = mapValue
break
diff --git a/taskhandler/comment.go b/taskhandler/comment.go
index a1e2822..597e2d5 100644
--- a/taskhandler/comment.go
+++ b/taskhandler/comment.go
@@ -1,29 +1,29 @@
package taskhandler
import (
- "cvevulner/util"
- "fmt"
- "github.com/astaxie/beego/logs"
+ "cvevulner/util"
+ "fmt"
+ "github.com/astaxie/beego/logs"
)
//AddCommentToIssue Add a comment to the issue
-func AddCommentToIssue(msg,issueNum,owner,repo ,access string) {
- url := fmt.Sprintf(`https://gitee.com/api/v5/repos/%v/%v/issues/%v/comments`,owner,repo,issueNum)
- param := fmt.Sprintf(`{"access_token": "%s","body":"%s"}`,access,msg)
- res, err := util.HTTPPost(url, param)
- if err != nil {
- logs.Error(err)
- }
- logs.Info("添加评论返回:",res)
+func AddCommentToIssue(msg, issueNum, owner, repo, access string) {
+ url := fmt.Sprintf(`https://gitee.com/api/v5/repos/%v/%v/issues/%v/comments`, owner, repo, issueNum)
+ param := fmt.Sprintf(`{"access_token": "%s","body":"%s"}`, access, msg)
+ res, err := util.HTTPPost(url, param)
+ if err != nil {
+ logs.Error(err)
+ }
+ logs.Info("添加评论返回:", res)
}
//SendPrivateLetters Send a private message to a gitee user
-func SendPrivateLetters(access,content,useName string) {
- url := "https://gitee.com/api/v5/notifications/messages"
- param := fmt.Sprintf(`{"access_token":"%s","username":"%s","content":"%s"}`,access,useName,content)
- res,err := util.HTTPPost(url,param)
- if err != nil {
- logs.Error(err)
- }
- logs.Info("发送私信:",res)
+func SendPrivateLetters(access, content, useName string) {
+ url := "https://gitee.com/api/v5/notifications/messages"
+ param := fmt.Sprintf(`{"access_token":"%s","username":"%s","content":"%s"}`, access, useName, content)
+ res, err := util.HTTPPost(url, param)
+ if err != nil {
+ logs.Error(err)
+ }
+ logs.Info("发送私信:", res)
}
diff --git a/taskhandler/common.go b/taskhandler/common.go
index 78b0598..0da4436 100644
--- a/taskhandler/common.go
+++ b/taskhandler/common.go
@@ -70,13 +70,6 @@ const bodyUpTpl = `一、漏洞信息
`
func CommentTemplate(assignee, commentCmd, affectedVersion string) string {
- //commentTemplate := ""
- //commentTemplate := "Hey @" + assignee + "\n" +
- // "以下内容需要您填写, 请复制到评论区回复喔" + "\n" +
- // "影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n" +
- // "openEulerScore: \n" + "openEulerVector: \n\n" +
- // "受影响版本排查(受影响/不受影响): \n" + affectedVersion +
- // "\n也可以参考: " + commentCmd + "\n"
commentTemplate := "Hey @" + assignee + "\n" +
"以下内容需要您填写, 请复制到评论区回复喔" + "\n" +
"影响性分析说明: \n\n" + "openEuler评分: (评分和向量)\n\n" +
@@ -327,7 +320,6 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
cveAnalysis := ""
if its.CveAnalysis != "" && len(its.CveAnalysis) > 1 {
cveAnalysis = strings.Replace(its.CveAnalysis, "\n", "", -1)
- //cveAnalysis = strings.Replace(cveAnalysis, "\n", "", 0)
}
updateTime := cve.UpdateTime.String()
if updateTime != "" && len(updateTime) > 19 {
@@ -366,16 +358,6 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
body := fmt.Sprintf(bodyUpTpl, cveNumber, path, cve.CveVersion, scoreType, nveScore, nveVector,
cve.Description, cve.RepairTime, updateTime, cve.CveDetailUrl, commentCmd,
cveAnalysis, openEulerScore, oVector, affectedVersion)
- /*body := "一、漏洞信息" + "
漏洞编号: " + "[" + cve.CveNum + "](https://nvd.nist.gov/vuln/detail/" + cve.CveNum + ")" + "" +
- "
漏洞归属组件: " + path + "" +
- "
漏洞归属的版本: " + cve.CveVersion + "" + "
CVSS V" + scoreType + "分值: " +
- "
BaseScore: " + score + " " + cve.CveLevel + "" +
- "
Vector: CVSS:" + scoreType + "/" + sc.NvectorVule + "" + "
漏洞简述: " +
- "
" + cve.Description + "" + "
二、漏洞分析结构反馈" + "
影响性分析说明: " +
- "
" + cveAnalysis + " " +
- "
openEuler评分: " + "
" + openEulerScore + "" +
- "
Vector: CVSS:" + scoreType + "/" + its.OpenEulerVector + "" +
- "
受影响版本排查(受影响/不受影响): " + affectedVersion + "
"*/
requestBody = fmt.Sprintf(`{
"access_token": "%s",
"repo": "%s",
@@ -487,7 +469,6 @@ func CreateIssueBody(accessToken string, owner string, path string, assignee str
"security_hole": "false"
}`, accessToken, path, cve.CveNum, StatusName, body, its.Assignee, labels)
}
-
} else {
openEulerScore = " "
if len(cveAnalysis) > 1 {
diff --git a/taskhandler/createissue.go b/taskhandler/createissue.go
index e6d926b..1c1df10 100644
--- a/taskhandler/createissue.go
+++ b/taskhandler/createissue.go
@@ -7,6 +7,7 @@ import (
"encoding/json"
"errors"
"fmt"
+ "github.com/astaxie/beego"
"github.com/astaxie/beego/config"
"github.com/astaxie/beego/logs"
"strconv"
@@ -87,44 +88,34 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
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 + ":")
+ brandArryTmp = append(brandArryTmp, brand+":")
}
brandStr := strings.Join(brandArryTmp, ",")
issueTemp.AffectedVersion = brandStr
}
- // 存储issue数据
+ // 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)
- // 构建回调
- //err = CreateIssueHooks(accessToken, owner, path, cve, resp)
- //if err != nil {
- // logs.Error("创建hooks 失败, cveNum: ", cve.CveNum, "err: ", err)
- // return "", err
- //} else {
- // logs.Info("创建hooks 成功, cveNum: ", cve.CveNum)
- //}
- //CreateIssueLabel(accessToken, owner, path, resp["number"].(string))
- // 更新issue状态
+ // Update issue status
models.UpdateIssueStatus(cve, 2)
- // 更新分数状态
+ // Update score status
models.UpdateIssueScore(cve, 2)
- // 更新分数记录状态
+ // Update score record status
models.UpdateIssueScoreRe(cve, 1)
}
} else {
issueType := "CVE和安全问题"
- //labels := "CVE/Bug,CVE/Undisclosed,CVE/Disclosed"
- labels := "CVE/Undisclosed"
+ labels := beego.AppConfig.String("labelUnFix")
if accessToken != "" && owner != "" && path != "" {
url := "https://gitee.com/api/v5/repos/" + owner + "/issues"
score := strconv.FormatFloat(sc.NVDScore, 'f', 1, 64)
@@ -140,15 +131,14 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
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)
- // 存储issue数据
+ // Store issue data
issTempID, err := models.CreateIssueTemplate(&issueTemp)
if len(brandArray) > 0 {
var brandArrayTmp []string
for _, brand := range brandArray {
- brandArrayTmp = append(brandArrayTmp, brand + ":")
+ brandArrayTmp = append(brandArrayTmp, brand+":")
}
brandStr := strings.Join(brandArrayTmp, ",")
issueTemp.AffectedVersion = brandStr
@@ -158,7 +148,7 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
return "", err
}
logs.Info("创建issue 模板的数据成功, issTempID: ", issTempID, "cveNum: ", cve.CveNum)
- // 创建issue评论
+ // Create issue comment
affectedVersion := ""
if len(brandArray) > 0 {
for i, brand := range brandArray {
@@ -172,7 +162,6 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
}
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)
@@ -181,13 +170,11 @@ func CreateIssueToGit(accessToken string, owner string, path string, assignee st
return "", err
}
logs.Info("创建hooks 成功, cveNum: ", cve.CveNum)
- // 创建issue标签
- //CreateIssueLabel(accessToken, owner, path, resp["number"].(string))
- // 更新issue状态
+ // Update issue status
models.UpdateIssueStatus(cve, 2)
- // 更新分数状态
+ // Update score status
models.UpdateIssueScore(cve, 2)
- // 更新分数记录状态
+ // Update score record status
models.UpdateIssueScoreRe(cve, 1)
}
}
@@ -196,7 +183,6 @@ 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) {
- //issueType := its.IssueType
logs.Info("更新模板请求参数: cve: ", cve, ",its: ", its, ", owner: ", owner, ",path: ", path)
labels := its.IssueLabel
pkgList, err := models.QueryPackageByCveId(its.CveId)
@@ -228,7 +214,7 @@ func UpdateIssueToGit(accessToken string, owner string, path string,
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)
secId, err := models.UpdateSecNotice(&sec)
@@ -242,11 +228,6 @@ func UpdateIssueToGit(accessToken string, owner string, path string,
return "", nil
}
-//func UpdateCommentInfo(owner, path, issueNumber string) {
-// issueUrl := "https://gitee.com/" + owner + "/" + path + "/issues/" + issueNumber
-// util.HTTPGet(issueUrl)
-//}
-
func CreateIssueHookData(issHook *models.IssueHooks, cve models.VulnCenter, resp map[string]interface{},
path, owner string, issueNum string, issueId int64) *models.IssueHooks {
issHook.CveId = cve.CveId
@@ -300,7 +281,6 @@ func CreateDepositHooks(accessToken string, owner string, path string,
logs.Error("config init error:", err)
return err
}
- //pwd := os.Getenv("hookpwd")
pwd := BConfig.String("hook::hookpwd")
hookurl := BConfig.String("hook::hookurl")
ihs, errh := models.GetIssueHook(&ih)
@@ -336,12 +316,10 @@ func CreateDepositHooks(accessToken string, owner string, path string,
logs.Error("创建仓库 hook失败, err: ", ok, "url: ", url)
return errors.New("创建仓库 hook失败")
}
- // 构建数据
if resp["password"].(string) == pwd {
var issHook models.IssueHooks
CreateIssueHookData(&issHook, cve, resp,
path, owner, issueNum, issueId)
- // 存储issue数据
hookId, err := models.CreateDepositHooks(&issHook)
if err != nil {
logs.Error("创建仓库 hook数据失败, cveNum: ", cve.CveNum, "err: ", err)
@@ -381,12 +359,11 @@ func CreateDepositHooks(accessToken string, owner string, path string,
logs.Error("创建仓库hook失败, err: ", ok, "url: ", url)
return errors.New("创建仓库hook失败")
}
- // 构建数据
if resp["password"].(string) == pwd {
var issHook models.IssueHooks
CreateIssueHookData(&issHook, cve, resp,
path, owner, issueNum, issueId)
- // 存储issue数据
+ // Store issue data
hookId, err := models.CreateDepositHooks(&issHook)
if err != nil {
logs.Error("创建仓库hook失败, cveNum: ", cve.CveNum, "err: ", err)
@@ -425,12 +402,11 @@ func CreateDepositHooks(accessToken string, owner string, path string,
logs.Error("创建仓库hook失败, err: ", ok, "url: ", url)
return errors.New("创建仓库hook失败")
}
- // 构建数据
if resp["password"].(string) == pwd {
var issHook models.IssueHooks
CreateIssueHookData(&issHook, cve, resp,
path, owner, issueNum, issueId)
- // 存储issue数据
+ // Store issue data
hookID, err := models.CreateDepositHooks(&issHook)
if err != nil {
logs.Error("创建仓库hook失败, cveNum: ", cve.CveNum, "err: ", err)
@@ -454,8 +430,6 @@ func CreateIssueComment(accessToken, owner, path, Assignee string,
return err
}
commentCmd := BConfig.String("reflink::comment_cmd")
- //commentBody := "Hey @" + Assignee + " , Please complete the content of the issue template in the issue comment. Please refer to the format:" +
- // commentCmd
commentBody := CommentTemplate(Assignee, commentCmd, affectedVersion)
requestBody := fmt.Sprintf(`{
"access_token": "%s",
@@ -510,7 +484,6 @@ func CreateSecNoticeData(sec *models.SecurityNotice, iss models.VulnCenter, path
sec.CveId = iss.CveId
sec.CveNum = iss.CveNum
sec.Introduction = "An update for " + path + " is now available for " + branchs
- //sec.Summary = "An update for " + path + " is now available for " + branchs
sec.Theme = sec.Introduction + ";\n\n" + "openEuler Security has rated this" +
" update as having a security impact of medium. A Common Vunlnerability" +
" Scoring System(CVSS)base score,which gives a detailed severity rating," +
@@ -522,18 +495,9 @@ func CreateIssueLabel(accessToken string, owner string, path string,
issNum string) error {
if accessToken != "" && owner != "" && path != "" {
url := "https://gitee.com/api/v5/repos/" + owner + "/" + path + "/issues/" + issNum + "/labels"
- //label := []string{"CVE/Undisclosed","CVE/Disclosed"}
- //reqs ,err:= json.Marshal(&requestBody)
- //if err != nil {
- // return err
- //}
- //requestBody := fmt.Sprintf(`{
- // "access_token": "%s",
- // "body": ["CVE/Undisclosed","CVE/Disclosed"]
- // }`, accessToken)
body := make(map[string]interface{})
body["access_token"] = accessToken
- body["body"] = "[\"CVE/Undisclosed\",\"CVE/Disclosed\"]"
+ body["body"] = fmt.Sprintf(`[%s,%s]`,beego.AppConfig.String("labelUnFix"),beego.AppConfig.String("labelFixed"))
requestBody, _ := json.Marshal(body)
logs.Info("create issue label: ", string(requestBody))
resp, err := util.HTTPPost1(url, string(requestBody))
diff --git a/taskhandler/cve.go b/taskhandler/cve.go
index e9b09a4..1824156 100644
--- a/taskhandler/cve.go
+++ b/taskhandler/cve.go
@@ -6,6 +6,7 @@ import (
"encoding/json"
"errors"
"fmt"
+ "github.com/astaxie/beego"
"github.com/astaxie/beego/logs"
"io/ioutil"
"net/http"
@@ -675,11 +676,8 @@ func GenCveVuler(cveData models.OriginUpstream, cveRef string, openeulernum int)
cveScV3, ok := models.QueryCveCvssV3(cveScore.ScoreId)
if !ok {
scopeType = "v2"
- //logs.Error("cveScore, data: ", cveData, ",cveScore: ", cveScore)
- //models.UpdateOriginStatus(common.GetCurTime(), cveData.PackName, cveData.Version, cveData.CveId, 3)
- //return false, errors.New("数据错误,暂时不处理")
}
- if cveScV3.VectorString == "" || len(cveScV3.VectorString) == 0 || cveScV3.BaseScore == 0.0{
+ if cveScV3.VectorString == "" || len(cveScV3.VectorString) == 0 || cveScV3.BaseScore == 0.0 {
scopeType = "v2"
}
cveScoreV2, ok2 := models.QueryCveScore(cveImpact.ImpactId, "v2")
@@ -791,8 +789,6 @@ func SyncCveVuler(cveData models.OriginExcel, cveRef string, openeulerNum int) (
goe, ok := models.QueryCveOpeneulerDetaildata(cveData.PackName, cveData.CveVersion)
if !ok {
logs.Error("仓库存在,yaml数据源不存在,god: ", god, ", cveData: ", cveData)
- //models.UpdateOriginExcelStatus(common.GetCurTime(), cveData.CveId, 4)
- //return false, errors.New("仓库不存在,暂时不处理")
}
CveRes, err := models.QueryCveByNum(cveData.CveNum, cveData.PackName, cveData.CveVersion)
if err {
@@ -920,7 +916,6 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + RemoveSubstring(lop.BriefIntroduction, "
")
sec.ReferenceLink = cveRef + cveData.CveNumber
sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct
- //sec.Summary = "An update for " + path + " is now available for " + branchs
sec.Theme = sec.Introduction + ";\n\n" + "openEuler Security has rated this" +
" update as having a security impact of medium. A Common Vunlnerability" +
" Scoring System(CVSS)base score,which gives a detailed severity rating," +
@@ -1024,7 +1019,7 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
issueTemp.IssueStatus = 6
}
issueTemp.StatusName = cveData.State
- issueTemp.IssueLabel = "cve/Undisclosed"
+ issueTemp.IssueLabel = beego.AppConfig.String("labelUnFix")
issueTemp.Owner = owner
issueTemp.Repo = lop.Repo
if cveData.Title != "" {
@@ -1032,7 +1027,6 @@ func InsertIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
}
issueTemp.IssueType = cveData.IssueType
issueTemp.CveLevel = vul.CveLevel
- // 存储issue数据
issTempId, issError := models.CreateIssueTemplate(&issueTemp)
if issError != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cveData.CveNumber, "err: ", issError)
@@ -1069,7 +1063,6 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
sec.Description = goe.Decription + "\n\n" + "Security Fix(es):" + "\n\n" + RemoveSubstring(lop.BriefIntroduction, "
")
sec.ReferenceLink = cveRef + cveData.CveNumber
sec.Introduction = "An update for " + lop.Components + " is now available for " + lop.InfProduct
- //sec.Summary = "An update for " + path + " is now available for " + branchs
sec.Theme = sec.Introduction + ";\n\n" + "openEuler Security has rated this" +
" update as having a security impact of medium. A Common Vunlnerability" +
" Scoring System(CVSS)base score,which gives a detailed severity rating," +
@@ -1160,23 +1153,8 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
if openError == nil {
score.OpenEulerScore = openEulerScore
}
- //sc.NvectorVule = lop.CvsVector
score.OvectorVule = lop.OpVector
-
- //sc.Ostatus = 0
score.ScoreType = "v3"
- //vectorN := models.VectorValue{}
- //ok := vectorN.VctToVectorValue(lop.CvsVector)
- //if ok {
- // sc.NattackVector = vectorN.AttackVector
- // sc.NattackComplexity = vectorN.AttackComplexity
- // sc.NprivilegeRequired = vectorN.PrivilegesRequired
- // sc.NuserInteraction = vectorN.UserInteraction
- // sc.Nscope = vectorN.Scope
- // sc.Nconfidentiality = vectorN.Confidentiality
- // sc.Nintegrity = vectorN.Integrity
- // sc.Navailability = vectorN.Availability
- //}
vectorO := models.VectorValue{}
okx := vectorO.VctToVectorValue(lop.OpVector)
if okx {
@@ -1317,7 +1295,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
issueTemp.IssueStatus = 6
}
issueTemp.StatusName = cveData.State
- issueTemp.IssueLabel = "cve/Undisclosed"
+ issueTemp.IssueLabel = beego.AppConfig.String("labelUnFix")
issueTemp.Owner = owner
issueTemp.Repo = lop.Repo
if cveData.Title != "" {
@@ -1326,7 +1304,7 @@ func UpdateIssueCveGroups(cveData models.GiteOriginIssue, lop models.Loophole, c
issueTemp.IssueType = cveData.IssueType
issueTemp.CveLevel = vul.CveLevel
}
- // 存储issue数据
+ // Store issue data
issTempId, issError := models.CreateIssueTemplate(&issueTemp)
if issError != nil {
logs.Error("创建issue 模板的数据失败, cveNum: ", cveData.CveNumber, "err: ", issError)
@@ -1378,7 +1356,6 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler
upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, cvd, owner)
logs.Info(upOk, upError)
lock.Unlock()
- //models.UpdateCveStatusExportByNum(common.GetCurTime(), cveData.CveNumber, 2, 2)
} else {
lock.Lock()
okx, errx := InsertIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, owner)
@@ -1399,7 +1376,6 @@ func GenCveVulerByIssue(cveData models.GiteOriginIssue, cveRef string, openeuler
upOk, upError := UpdateIssueCveGroups(cveData, hole, cveRef, openeulernum, 1, goe, cvd, owner)
logs.Info(upOk, upError)
lock.Unlock()
- //models.UpdateCveStatusExportByNum(common.GetCurTime(), cveData.CveNumber, 2, 2)
} else {
lock.Lock()
okx, errx := InsertIssueCveGroups(cveData, hole, cveRef, openeulernum, 2, goe, owner)
diff --git a/taskhandler/excel.go b/taskhandler/excel.go
index 1b39b31..fd6f913 100644
--- a/taskhandler/excel.go
+++ b/taskhandler/excel.go
@@ -14,15 +14,15 @@ import (
//CveExcel Excel export client
type CveExcel struct {
- ExcelName string //excel 名字
- ExcelHandel *excelize.File //excel 文件句柄
+ ExcelName string //excel name
+ ExcelHandel *excelize.File //excel File handle
CveSheetIdx int //CVE sheet index
CveSheetName string // CVE sheet Name
- SecNoticeSheetIdx int //安全公告index
- SecNoticeSheetName string //安全公告sheet名字
- SecNoticePrefix string //安全公告前缀
- SecNoticeSuffixIdx int64 //安全公告后缀起始值
- InfProductSheetName string //CVE 影响的产品
+ SecNoticeSheetIdx int //Security bulletin index
+ SecNoticeSheetName string //Security bulletin sheet name
+ SecNoticePrefix string //Security bulletin prefix
+ SecNoticeSuffixIdx int64 //Security bulletin suffix start value
+ InfProductSheetName string //CVE Affected products
InfProductSheetIndex int
PackageURLSheetName string
PackageURLSheetIndex int
@@ -301,7 +301,7 @@ func (ec *CveExcel) FillHeader() (err error) {
if err != nil {
return
}
- //安全公告表头生成
+ //Security bulletin header generation
sh := []interface{}{"公告编号", "CVE编号", "简介", "概要", "主题", "描述", "影响组件", "影响产品", "影响包名", "参考", "公告时间"}
err = ec.ExcelHandel.SetSheetRow(ec.SecNoticeSheetName, "A1", &sh)
if err != nil {
@@ -347,8 +347,7 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) {
if v.Num == 1 {
ec.setContentRow(v)
} else if v.Num > 1 {
- //处理CVE_NUM 重复
- //1.根据cve_num 获取issue_tpl 如果所有的issue_status ==2 0r issue_status == 6 则可以导出数据
+ //1.Obtain issue_tpl according to cve_num, if all issue_status == 2 0r issue_status == 6, then data can be exported
list, err := models.GetIssueTplByCveNum(v.CveNum)
if err != nil {
logs.Error(err)
@@ -366,7 +365,7 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) {
}
}
- //2.从issue_status == 2 的模板数据中找到评分最高的对应的ExcelExport数据
+ //2.Find the corresponding ExcelExport data with the highest score from the template data of issue_status == 2
if canMerger && len(mergerList) > 0 {
canExport, err := models.GetCanExportCveDataSameNum(strings.Join(mergerList, ","))
if err != nil {
@@ -384,12 +383,10 @@ func (ec *CveExcel) handleWriteContent(off int64, size int) (err error) {
ep.InfluenceComponent = ep.InfluenceComponent + "\n" + ex.InfluenceComponent
ep.AffectProduct = ep.AffectProduct + "\n" + ex.AffectProduct
}
-
}
ec.setContentRow(ep)
}
}
-
}
}
return nil
diff --git a/taskhandler/grabissue.go b/taskhandler/grabissue.go
index cc382f2..8bcc0ce 100644
--- a/taskhandler/grabissue.go
+++ b/taskhandler/grabissue.go
@@ -14,23 +14,23 @@ import (
const (
//GiteOrgInfoURL get gitee org info url
- GiteOrgInfoURL = `https://gitee.com/api/v5/orgs/%v?access_token=%v`
+ GiteOrgInfoURL = `https://gitee.com/api/v5/orgs/%v?access_token=%v`
//GiteOrgReposURL get all repository url
- GiteOrgReposURL = `https://gitee.com/api/v5/orgs/%v/repos?access_token=%v&type=all&page=%v&per_page=%v`
+ GiteOrgReposURL = `https://gitee.com/api/v5/orgs/%v/repos?access_token=%v&type=all&page=%v&per_page=%v`
//GiteRepoIssuesURL get issue list url
GiteRepoIssuesURL = `https://gitee.com/api/v5/repos/%v/%v/issues?state=%v&sort=created&direction=desc&page=%v&per_page=%v`
//GiteRepoBranch get repo branch url
- GiteRepoBranch = `https://gitee.com/api/v5/repos/%v/%v/branches?access_token=%v`
+ GiteRepoBranch = `https://gitee.com/api/v5/repos/%v/%v/branches?access_token=%v`
//RepoInfoURL get repo info url
- RepoInfoURL = "https://api.openeuler.org/pkgmanagedebug/packages/packageInfo?table_name=mainline&pkg_name=%s"
- perPage = 50
+ RepoInfoURL = "https://api.openeuler.org/pkgmanagedebug/packages/packageInfo?table_name=mainline&pkg_name=%s"
+ perPage = 50
//IssueType Types of issues crawled
- IssueType = "CVE和安全问题"
+ IssueType = "CVE和安全问题"
)
var wg sync.WaitGroup
-//OrgInfo 组织
+//OrgInfo
type OrgInfo struct {
ID int32 `json:"id,omitempty"`
Login string `json:"login,omitempty"`
@@ -47,7 +47,7 @@ type OrgInfo struct {
PrivateRepos int64 `json:"private_repos,omitempty"`
}
-//Branch 获取所有分支
+//Branch Get all branches
type Branch struct {
Name string `json:"name,omitempty"`
Protected bool `json:"protected,omitempty"`
@@ -57,7 +57,7 @@ type Branch struct {
//PackageInfo package info model
type PackageInfo struct {
Code string
- Msg string
+ Msg string
Data Info
}
@@ -105,7 +105,7 @@ func GrabIssueByRepo(accToken, owner, repo, state string) {
logs.Error(err)
break
}
- handleIssueList(list, product,desc)
+ handleIssueList(list, product, desc)
if len(list) < perPage {
break
}
@@ -137,7 +137,7 @@ func getInfProduct(token string, owner string, repo string) (infPro string, err
return
}
-func handleIssueList(list []models.HookIssue, product,desc string) {
+func handleIssueList(list []models.HookIssue, product, desc string) {
if len(list) == 0 {
return
}
@@ -150,7 +150,7 @@ 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: v.Repository.Path,
- RepoUrl: v.Repository.Url, InfProduct: product,RepoDesc: desc}
+ RepoUrl: v.Repository.Url, InfProduct: product, RepoDesc: desc}
vt := util.TrimString(v.Title)
if strings.HasPrefix(vt, "CVE") {
item.CveNumber = vt
diff --git a/taskhandler/oricvecheck.go b/taskhandler/oricvecheck.go
index e9f48f5..f9b40c6 100644
--- a/taskhandler/oricvecheck.go
+++ b/taskhandler/oricvecheck.go
@@ -18,7 +18,7 @@ func CheckCveOriginData(prcnum int) (string, error) {
}
for {
os, num, err := models.QueryOriginCveE(prcnum)
- if err != nil || num == 0{
+ if err != nil || num == 0 {
logs.Info("当前无异常cve原始数据处理, err: ", err,
", 处理时间范围: beforetime: ",
"curtime: ", common.GetCurTime())
@@ -53,8 +53,8 @@ func CheckCveOriginData(prcnum int) (string, error) {
ch <- idx
}(i, cveOrg)
}
- for i :=0; i < cap(ch); i++ {
- <- ch
+ for i := 0; i < cap(ch); i++ {
+ <-ch
}
close(ch)
}
diff --git a/taskhandler/yaml.go b/taskhandler/yaml.go
index e94b373..4dee8af 100644
--- a/taskhandler/yaml.go
+++ b/taskhandler/yaml.go
@@ -12,18 +12,19 @@ import (
"sync"
)
-func GetYamlTables(url string) (string, error){
+
+func GetYamlTables(url string) (string, error) {
compURL := url + "/lifeCycle/tables"
- body, err:= util.HTTPGetCom(compURL)
+ body, err := util.HTTPGetCom(compURL)
if err == nil && body != nil {
var respBody map[string]interface{}
- err =json.Unmarshal(body, &respBody)
+ err = json.Unmarshal(body, &respBody)
if err != nil {
logs.Error(err)
return "", err
}
logs.Info(respBody)
- if respBody["code"].(string) == "2001"{
+ if respBody["code"].(string) == "2001" {
for i, values := range respBody["data"].([]interface{}) {
var gt models.GitPackageTable
gt.TableName = values.(string)
@@ -60,24 +61,23 @@ func GetYamlByGit(url string) (string, error) {
var ch = make(chan int, len(gt))
for i, tableValue := range gt {
logs.Info("查询第 ", i, "tableName: ", tableValue.TableName, "开始...")
- go func(tv models.GitPackageTable,idx int) {
+ go func(tv models.GitPackageTable, idx int) {
ok, err := GetYaml(url, compURL1, page, size, tv, &ch)
if err == nil {
logs.Info("当前数据处理成功,i: ", idx)
} else {
logs.Error("当前数据处理失败, ok: ", ok, ",i: ", idx, ", err: ", err)
}
- }(tableValue,i)
+ }(tableValue, i)
}
- for i:=0; i< len(gt); i++ {
+ for i := 0; i < len(gt); i++ {
<-ch
}
close(ch)
return "", nil
}
-func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageTable, ch *chan int) (string, error){
- //defer wg.Done()
+func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageTable, ch *chan int) (string, error) {
defer common.Catchs()
var tc GitTablePackCount
tc.TableName = tableValue.TableName
@@ -86,46 +86,45 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT
tc.Page = page
tc.Size = size
compURL2 := compURL1 + "?table_name=" + tableValue.TableName
- for ;; {
+ for ; ; {
compURL := compURL2 +
"&page_num=" + strconv.Itoa(tc.Page) + "&page_size=" + strconv.Itoa(size)
- body, err:= util.HTTPGetCom(compURL)
+ body, err := util.HTTPGetCom(compURL)
var respBody map[string]interface{}
if err == nil && body != nil {
- err =json.Unmarshal(body, &respBody)
+ err = json.Unmarshal(body, &respBody)
if err != nil {
logs.Error(err)
return "", err
}
} else {
- logs.Error( "http 请求失败, url: ", compURL)
+ logs.Error("http 请求失败, url: ", compURL)
return "", err
}
logs.Info("start: ", tc)
- if respBody["code"].(string) == "2001"{
- //chx := make(chan int)
+ if respBody["code"].(string) == "2001" {
curCount := 0
- if respBody == nil || respBody["data"] == nil || len(respBody["data"].([]interface{})) == 0{
+ if respBody == nil || respBody["data"] == nil || len(respBody["data"].([]interface{})) == 0 {
logs.Error("数据为空, url: ", compURL)
return "", err
}
for i, values := range respBody["data"].([]interface{}) {
tc.Count = tc.Count + 1
- logs.Info("第:",tc.Page,"页, 到: ", tc.Size, "条, tableName: ",tc.TableName,
+ logs.Info("第:", tc.Page, "页, 到: ", tc.Size, "条, tableName: ", tc.TableName,
",已处理到第count: ", tc.Count, "条, yaml values: ", values)
- if values == nil || values == "" || len(values.(map[string]interface{})) == 0{
- logs.Error("第:",tc.Page,"页, 到: ", tc.Size, "条, tableName: ",tc.TableName,
+ if values == nil || values == "" || len(values.(map[string]interface{})) == 0 {
+ logs.Error("第:", tc.Page, "页, 到: ", tc.Size, "条, tableName: ", tc.TableName,
",已处理到第count: ", tc.Count, "条, yaml values: ", values, ", 处理失败")
curCount = curCount + 1
continue
}
valuesX := values.(map[string]interface{})
+ lock.Lock()
ok, err := ProcPackDetail(url, valuesX, tableValue, i)
+ lock.Unlock()
logs.Info("ok: ", ok, ", err: ", err)
- //<- chx
curCount = curCount + 1
}
- //close(chx)
totalPage := 0
switch respBody["total_page"].(type) {
case string:
@@ -152,20 +151,20 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT
default:
totalCount = 1
}
- if tc.Page > totalPage || tc.Size >= totalCount{
- logs.Info("已处理完成:tableName: ", tc.TableName, "数据获取完成, " +
+ if tc.Page > totalPage || tc.Size >= totalCount {
+ logs.Info("已处理完成:tableName: ", tc.TableName, "数据获取完成, "+
"总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n",
",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL)
break
} else {
- logs.Info("当前: tableName: ", tc.TableName, "数据获取完成, " +
+ logs.Info("当前: tableName: ", tc.TableName, "数据获取完成, "+
"总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n",
",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL)
lock.Lock()
tc.Page = tc.Page + page
tc.Size = tc.Size + curCount
lock.Unlock()
- logs.Info("增加后: tableName: ", tc.TableName, "数据获取完成, " +
+ logs.Info("增加后: tableName: ", tc.TableName, "数据获取完成, "+
"总页数(page_num):", totalPage, ", 总条数(page_size):", totalCount, "\n",
",当前页数Page:", tc.Page, ",当前条数size: ", tc.Size, ",url: ", compURL)
}
@@ -179,16 +178,17 @@ func GetYaml(url, compURL1 string, page, size int, tableValue models.GitPackageT
return "", nil
}
-
-func ProcPackDetail(url string, values map[string]interface{}, tableValue models.GitPackageTable, i int) (string, error){
+func ProcPackDetail(url string, value map[string]interface{}, tableValue models.GitPackageTable, i int) (string, error) {
+ values := value
var ge models.GitOpenEuler
GitOpenEulerData(values, &ge, tableValue)
- // 查询cpe数据
+ // Query cpe data
var pc models.PackageCpe
pcError := models.GetCpePackName(&pc, ge.PackageName)
if pcError == nil && pc.Id > 0 {
ge.CpePackName = pc.CpePackName
}
+ logs.Info("正在处理的 packageName: ", ge.PackageName)
ok, _ := models.GetSingleYaml(&ge)
if ok {
logs.Info("第 ", i, "条数据, PackageName: ", ge.PackageName, "已经存在,不需要再次插入")
@@ -234,22 +234,23 @@ func ProcPackDetail(url string, values map[string]interface{}, tableValue models
return "", nil
}
-func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.GitOpenEuler) (string, error){
+func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.GitOpenEuler) (string, error) {
scpURL := url + "/packages/packageInfo" + "?table_name=" + tableValue.TableName + "&pkg_name=" + ge.PackageName
- body, err:= util.HTTPGetCom(scpURL)
+ logs.Info("PackageName: ", ge.PackageName, "获取packageInfo, 请求参数: ", scpURL)
+ body, err := util.HTTPGetCom(scpURL)
var respBody map[string]interface{}
if err == nil && body != nil {
- err =json.Unmarshal(body, &respBody)
+ err = json.Unmarshal(body, &respBody)
if err != nil {
logs.Error(err)
return "", err
}
} else {
- logs.Error( "http 请求失败, scpURL: ", scpURL)
+ logs.Error("http 请求失败, scpURL: ", scpURL)
return "", err
}
logs.Info(respBody)
- if respBody["code"].(string) == "2001"{
+ if respBody["code"].(string) == "2001" {
if respBody["data"] == nil || respBody["data"] == "" {
logs.Error("获取包详情失败, scpURL: ", scpURL)
return "", errors.New("数据错误")
@@ -257,7 +258,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
var gp models.GitPackageInfo
GitOpenEulerInfoData(respBody["data"].(map[string]interface{}), &gp, ge)
detailid, typex, err := models.CreateYamlDetail(&gp, ge)
- if detailid >0 && typex == "insert" && err == nil {
+ if detailid > 0 && typex == "insert" && err == nil {
subdata := respBody["data"].(map[string]interface{})
if subdata["subpack"] == nil {
return "", err
@@ -293,7 +294,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
SubID, typex, err := models.CreateYamlSubPack(&gb)
if SubID > 0 && typex == "insert" && err == nil {
- if packValue["provides"] != nil && len(packValue["provides"].([]interface{})) > 0{
+ if packValue["provides"] != nil && len(packValue["provides"].([]interface{})) > 0 {
provides := packValue["provides"].([]interface{})
for _, provValuex := range provides {
logs.Info("yaml provValuex: ", provValuex)
@@ -320,11 +321,10 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
} else {
gs.ProvideName = provValue["name"].(string)
}
-
gs.Requiredby = ""
ProvideID, typexx, err := models.CreateYamlSubPackProvides(&gs)
if ProvideID > 0 && typexx == "insert" && err == nil {
- if provValue["requiredby"] != nil && len(provValue["requiredby"].([]interface{})) > 0{
+ if provValue["requiredby"] != nil && len(provValue["requiredby"].([]interface{})) > 0 {
requiredby := provValue["requiredby"].([]interface{})
for _, reqValue := range requiredby {
if reqValue != nil && reqValue.(string) != "" {
@@ -339,7 +339,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
}
}
- if packValue["requires"] != nil && len(packValue["requires"].([]interface{})) > 0{
+ if packValue["requires"] != nil && len(packValue["requires"].([]interface{})) > 0 {
requires := packValue["requires"].([]interface{})
for _, reqValuexx := range requires {
logs.Info("reqValuexx: ", reqValuexx)
@@ -348,7 +348,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
reqValuex := reqValuexx.(map[string]interface{})
reqStr := ""
- if reqValuex["providedby"] != nil && len(reqValuex["providedby"].([]interface{})) > 0{
+ if reqValuex["providedby"] != nil && len(reqValuex["providedby"].([]interface{})) > 0 {
providedby := reqValuex["providedby"].([]interface{})
for _, reqValue := range providedby {
if reqValue != nil && reqValue.(string) != "" {
@@ -357,7 +357,7 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
}
if reqStr != "" {
- reqStr = reqStr[:len(reqStr) -1]
+ reqStr = reqStr[:len(reqStr)-1]
}
var gs models.GitSubPackRequire
gs.SubId = SubID
@@ -388,4 +388,4 @@ func GetPackageInfo(url string, tableValue models.GitPackageTable, ge models.Git
}
}
return "", nil
-}
\ No newline at end of file
+}
diff --git a/util/http.go b/util/http.go
index 38a6b0d..02957de 100644
--- a/util/http.go
+++ b/util/http.go
@@ -15,7 +15,7 @@ import (
//RequestInfo http request information
type RequestInfo struct {
URL string
- Data map[string]string //post要传输的数据,必须key value必须都是string
+ Data map[string]string //The data to be transmitted by the post, the key value must be both string
DataInterface map[string]interface{}
}
@@ -136,7 +136,7 @@ func HTTPPost1(url string, requestBody string) ([]map[string]interface{}, error)
//PostURLEncoded request params encode
func PostURLEncoded(this RequestInfo) ([]byte, error) {
client := &http.Client{}
- //post要提交的数据
+ //post data to be submitted
DataURLVal := url.Values{}
for key, val := range this.Data {
DataURLVal.Add(key, val)
@@ -146,18 +146,18 @@ func PostURLEncoded(this RequestInfo) ([]byte, error) {
logs.Error(err)
return nil, err
}
- //伪装头部
+ //Camouflage head
req.Header.Set("Accept", "application/json")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
- //提交请求
+ //Submit request
resp, err := client.Do(req)
if err != nil {
logs.Error(err)
return nil, err
}
defer resp.Body.Close()
- //读取返回值
+ //Read return value
result, err := ioutil.ReadAll(resp.Body)
if err != nil {
logs.Error(err)
diff --git a/util/parsepayload.go b/util/parsepayload.go
index f41f8d0..25dad53 100644
--- a/util/parsepayload.go
+++ b/util/parsepayload.go
@@ -18,16 +18,6 @@ const (
)
var (
- //LAC 漏洞组件标签
- //LAC = "LAC"
- //LN 漏洞编号标签
- //LN = "LN"
- //LAV 漏洞版本标签
- //LAV = "LAV"
- //CVS cvss 3.0分值标签
- //CVS = "CVS"
- //CVV cvss 3.1向量标签
- //CVV = "CVV"
//LD 漏洞描述标签
LD = "LD"
//IAD 影响分析说明标签
@@ -64,6 +54,8 @@ var (
RegexpCveScore = regexp.MustCompile(`CVSS V[23].0分值[::](?s:(.*?))漏洞[简描]述[::]`)
//RegexpCveBriefDesc brief description extract regexp
RegexpCveBriefDesc = regexp.MustCompile(`漏洞[简描]述[::](?s:(.*?))影响性分析说明[::]`)
+ //RegexpCveBriefDesc new tpl brief description extract regexp
+ RegexpCveBriefDescNew = regexp.MustCompile(`漏洞[简描]述[::](?s:(.*?))漏洞公开时间[::]`)
//RegexpCveInfluencesDesc influences description regexp
RegexpCveInfluencesDesc = regexp.MustCompile(`影响性分析说明[::](?s:(.*?))原理分析[::]`)
//RegexpCveInfluencesDescNew new tpl influences description regexp
@@ -85,16 +77,16 @@ var (
//RegexpCveInfluencesPkg the cve influences package regexp
RegexpCveInfluencesPkg = regexp.MustCompile(`受影响的包[::](?s:(.*?))$`)
//RegexpDigital digital regexp
- RegexpDigital = regexp.MustCompile(`(\d){1,}(\.\d+)?`)
- RegexpSpecialDigital = regexp.MustCompile(`(CVSS[::]3.0|CVSS[::]2.0|cvss[::]3.0|cvss[::]2.0|3.0/|2.0/|3.0 /|2.0 /)*`) //^((CVSS:3.0|CVSS:2.0|3.0/|2.0/|3.0 /|2.0 /).)*$
- RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`)
- RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`)
- RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`)
- RegexpScoreTypeV3 = regexp.MustCompile(`(?mi)^CVSS v3.0分值\s*`)
- RegexpIsNewTpl = regexp.MustCompile(`(?mi)^原理分析[::]\s*`)
- RegexpIsNewTpl2 = regexp.MustCompile(`(?mi)^规避方案或消减措施[::]\s*`)
- regexpEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]受影响`)
- regexpNoEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]不受影响`)
+ RegexpDigital = regexp.MustCompile(`(\d){1,}(\.\d+)?`)
+ RegexpSpecialDigital = regexp.MustCompile(`(CVSS[::]3.0|CVSS[::]2.0|cvss[::]3.0|cvss[::]2.0|3.0/|2.0/|3.0 /|2.0 /)*`) //^((CVSS:3.0|CVSS:2.0|3.0/|2.0/|3.0 /|2.0 /).)*$
+ RegexpVector = regexp.MustCompile(`AV:[NLAP](?s:(.*?))/A:[LNH]`)
+ RegexpVectorV2 = regexp.MustCompile(`AV:[LAN](?s:(.*))/Au:[MSN](?s:(.*))/A:[NPC]`)
+ RegexpScoreTypeV2 = regexp.MustCompile(`(?mi)^CVSS v2.0分值\s*`)
+ RegexpScoreTypeV3 = regexp.MustCompile(`(?mi)^CVSS v3.0分值\s*`)
+ RegexpIsNewTpl = regexp.MustCompile(`(?mi)^原理分析[::]\s*`)
+ RegexpIsNewTpl2 = regexp.MustCompile(`(?mi)^规避方案或消减措施[::]\s*`)
+ regexpEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]受影响`)
+ regexpNoEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]不受影响`)
regexpOtherEffectVersion = regexp.MustCompile(`(?mi)[\d]{1,}\.(.*?)[::]`)
)
@@ -127,7 +119,6 @@ func (a CaSlice) Less(i, j int) bool {
}
func init() {
- //pattenStr := `/AV:[NLAP]/AC:[HL]/PR:[NLH]/UI:[NR]/S:[UC]/C:[NLH]/I:[HNL]/A:[LNH]`
VectorMap = make(map[string]map[string]string)
mAv := make(map[string]string)
mAv["N"] = "Network"
--
Gitee