From 6227fa1642e02114740d766bc8051164901a00dc Mon Sep 17 00:00:00 2001 From: MaineK00n Date: Wed, 8 May 2024 02:58:45 +0900 Subject: [PATCH] feat(models): add AffectedResolution --- db/rdb.go | 2 ++ models/models.go | 18 ++++++++++++++++++ models/redhat/redhat.go | 29 +++++++++++++++++++++++------ models/redhat/types.go | 2 +- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/db/rdb.go b/db/rdb.go index 0f23a532..bd1194b6 100644 --- a/db/rdb.go +++ b/db/rdb.go @@ -132,6 +132,8 @@ func (r *RDBDriver) MigrateDB() error { &models.Advisory{}, &models.Cve{}, &models.Bugzilla{}, + &models.Resolution{}, + &models.Component{}, &models.Cpe{}, &models.Debian{}, ); err != nil { diff --git a/models/models.go b/models/models.go index 87e0517b..28243967 100644 --- a/models/models.go +++ b/models/models.go @@ -75,6 +75,7 @@ type Advisory struct { Severity string `gorm:"type:varchar(255)"` Cves []Cve Bugzillas []Bugzilla + AffectedResolution []Resolution AffectedCPEList []Cpe AffectedRepository string `gorm:"type:varchar(255)"` // Amazon Linux 2 Only Issued time.Time @@ -105,6 +106,23 @@ type Bugzilla struct { Title string `gorm:"type:varchar(255)"` } +// Resolution : >definitions>definition>metadata>advisory>affected>resolution +type Resolution struct { + ID uint `gorm:"primary_key" json:"-"` + AdvisoryID uint `gorm:"index:idx_resolution_advisory_id" json:"-" xml:"-"` + + State string `gorm:"type:varchar(255)"` + Components []Component +} + +// Component : >definitions>definition>metadata>advisory>affected>resolution>component +type Component struct { + ID uint `gorm:"primary_key" json:"-"` + ResolutionID uint `gorm:"index:idx_component_resolution_id" json:"-" xml:"-"` + + Component string `gorm:"type:varchar(255)"` +} + // Cpe : >definitions>definition>metadata>advisory>affected_cpe_list type Cpe struct { ID uint `gorm:"primary_key" json:"-"` diff --git a/models/redhat/redhat.go b/models/redhat/redhat.go index 20de3c65..5e7736e6 100644 --- a/models/redhat/redhat.go +++ b/models/redhat/redhat.go @@ -60,6 +60,22 @@ func ConvertToModel(v string, roots []Root) []models.Definition { }) } + var ress = make([]models.Resolution, 0, len(d.Advisory.Affected.Resolution)) + for _, r := range d.Advisory.Affected.Resolution { + ress = append(ress, models.Resolution{ + State: r.State, + Components: func() []models.Component { + var comps = make([]models.Component, 0, len(r.Component)) + for _, c := range r.Component { + comps = append(comps, models.Component{ + Component: c, + }) + } + return comps + }(), + }) + } + issued := util.ParsedOrDefaultTime([]string{"2006-01-02"}, d.Advisory.Issued.Date) updated := util.ParsedOrDefaultTime([]string{"2006-01-02"}, d.Advisory.Updated.Date) @@ -68,12 +84,13 @@ func ConvertToModel(v string, roots []Root) []models.Definition { Title: d.Title, Description: d.Description, Advisory: models.Advisory{ - Severity: d.Advisory.Severity, - Cves: cves, - Bugzillas: bs, - AffectedCPEList: cpes, - Issued: issued, - Updated: updated, + Severity: d.Advisory.Severity, + Cves: cves, + Bugzillas: bs, + AffectedResolution: ress, + AffectedCPEList: cpes, + Issued: issued, + Updated: updated, }, AffectedPacks: collectRedHatPacks(v, d.Criteria), References: rs, diff --git a/models/redhat/types.go b/models/redhat/types.go index 1b22c1e1..0f89f832 100644 --- a/models/redhat/types.go +++ b/models/redhat/types.go @@ -110,7 +110,7 @@ type Bugzilla struct { // AffectedPkgs : >definitions>definition>metadata>advisory>affected type AffectedPkgs struct { - Resolution struct { + Resolution []struct { State string `xml:"state,attr"` Component []string `xml:"component"` } `xml:"resolution"`