model

package
v0.0.0-...-0a3c54e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2025 License: MIT Imports: 5 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Ptr

func Ptr[T any](v T) *T

Types

type BaseMetricV3Data

type BaseMetricV3Data struct {
	CVSSV3 CVSSV3Data `json:"cvssV3,omitempty"`
}

type CPEInfo

type CPEInfo struct {
	CPEPrefix         *string `json:"cpe_prefix"`
	CPEVersion        *string `json:"cpe_version"`
	CPEPart           *string `json:"cpe_part"`
	CPEVendor         *string `json:"cpe_vendor"`
	CPEProduct        *string `json:"cpe_product" gorm:"column:cpe_product"`
	CPEProductVersion *string `json:"cpe_product_version"`
	CPEUpdate         *string `json:"cpe_update"`
	CPEEdition        *string `json:"cpe_edition"`
	CPELanguage       *string `json:"cpe_language"`
	CPESWEdition      *string `json:"cpe_sw_edition"`
	CPETargetSW       *string `json:"cpe_target_sw" gorm:"column:cpe_target_sw"`
	CPETargetHW       *string `json:"cpe_target_hw"`
	CPEOther          *string `json:"cpe_other"`
}

CPEInfo [CPE 2.3 format] cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

type CPEMatchData

type CPEMatchData struct {
	Vulnerable            bool   `json:"vulnerable"`
	CPE23Uri              string `json:"cpe23Uri"`
	VersionStartIncluding string `json:"versionStartIncluding,omitempty"`
	VersionStartExcluding string `json:"versionStartExcluding,omitempty"`
	VersionEndIncluding   string `json:"versionEndIncluding,omitempty"`
	VersionEndExcluding   string `json:"versionEndExcluding,omitempty"`
}

func (*CPEMatchData) MatchVersion

func (c *CPEMatchData) MatchVersion(cpeVendor, cpeProduct, versionStr string) bool

type CVE

type CVE struct {
	CVEID            *string    `json:"cve_id,omitempty" gorm:"column:cve_id;primaryKey"`
	Assigner         *string    `json:"assigner,omitempty" gorm:"column:assigner"`
	Description      *string    `json:"description,omitempty" gorm:"column:description"`
	PublishedDate    *string    `json:"published_date,omitempty" gorm:"column:published_date"`
	LastModifiedDate *string    `json:"last_modified_date,omitempty" gorm:"column:last_modified_date"`
	BaseScore        *float64   `json:"base_score,omitempty" gorm:"column:base_score"`
	BaseSeverity     *string    `json:"base_severity,omitempty" gorm:"column:base_severity"`
	VectorString     *string    `json:"vector_string,omitempty" gorm:"column:vector_string"`
	CPEProduct       *string    `json:"cpe_product,omitempty" gorm:"column:cpe_product"`
	CPETargetSW      *string    `json:"cpe_target_sw,omitempty" gorm:"column:cpe_target_sw"`
	Data             *string    `json:"data,omitempty" gorm:"column:data"`
	CreatedAt        *time.Time `json:"created_at,omitempty" gorm:"column:created_at"`
	UpdatedAt        *time.Time `json:"updated_at,omitempty" gorm:"column:updated_at"`
}

func ConvertCVEJsonToCVE

func ConvertCVEJsonToCVE(cveJson *Vulnerability) (*CVE, error)

type CVEData

type CVEData struct {
	DataType    string          `json:"data_type"`
	DataFormat  string          `json:"data_format"`
	DataVersion string          `json:"data_version"`
	CVEDataMeta CVEDataMetaData `json:"CVE_data_meta"`
	Description DescriptionData `json:"description"`
}

type CVEDataMetaData

type CVEDataMetaData struct {
	ID       string `json:"ID"`
	ASSIGNER string `json:"ASSIGNER"`
}

type CVEResponse

type CVEResponse struct {
	// Processed vulnerabilities (populated from CveItems)
	Vulnerabilities []*Vulnerability `json:"CVE_Items"`

	// fkie-cad/nvd-json-data-feeds format fields
	Timestamp *string                  `json:"timestamp"`
	CveCount  *int                     `json:"cve_count"`
	FeedName  *string                  `json:"feed_name"`
	Source    *string                  `json:"source"`
	CveItems  []*NVDAPI20Vulnerability `json:"cve_items"`
}

type CVSSV3Data

type CVSSV3Data struct {
	VectorString string  `json:"vectorString,omitempty"`
	BaseScore    float64 `json:"baseScore,omitempty"`
	BaseSeverity string  `json:"baseSeverity,omitempty"`
}

type ConfigurationsData

type ConfigurationsData struct {
	Nodes []NodeData `json:"nodes,omitempty"`
}

func (*ConfigurationsData) MatchVersion

func (c *ConfigurationsData) MatchVersion(cpeVendor, cpeProduct, versionStr string) bool

type DescriptionData

type DescriptionData struct {
	DescriptionData []DescriptionDataItem `json:"description_data"`
}

type DescriptionDataItem

type DescriptionDataItem struct {
	Lang  string `json:"lang"`
	Value string `json:"value"`
}

type EKVJson

type EKVJson struct {
	Title           *string `json:"title,omitempty"`
	CatalogVersion  *string `json:"catalogVersion,omitempty"`
	DateReleased    *string `json:"dateReleased,omitempty"`
	Count           *int    `json:"count,omitempty"`
	Vulnerabilities []*KEV  `json:"vulnerabilities,omitempty"`
}

type EPSS

type EPSS struct {
	CVEID      *string    `json:"cve_id,omitempty" gorm:"column:cve_id;primaryKey"`
	Epss       *float64   `json:"epss,omitempty" gorm:"column:epss"`
	Percentile *float64   `json:"percentile,omitempty" gorm:"column:percentile"`
	CreatedAt  *time.Time `json:"created_at,omitempty" gorm:"column:created_at"`
	UpdatedAt  *time.Time `json:"updated_at,omitempty" gorm:"column:updated_at"`
}

type EPSSCsv

type EPSSCsv struct {
	CVE        *string  `csv:"cve"`
	Epss       *float64 `csv:"epss"`
	Percentile *float64 `csv:"percentile"`
}

type GetVulnerabilityRequest

type GetVulnerabilityRequest struct {
	CVEID *string `uri:"cve_id" binding:"required,min=13"`      // CVE-YYYY-NNNNN
	Full  *bool   `form:"full" json:"full" binding:"omitempty"` // Amount of information in the response
}

type GetVulnerabilityResponse

type GetVulnerabilityResponse struct {
	Vulnerability *Vulnerability `json:"vulnerability,omitempty"`
}

type ImpactData

type ImpactData struct {
	BaseMetricV3 BaseMetricV3Data `json:"baseMetricV3,omitempty"`
}

type ImportRequest

type ImportRequest struct {
	Modified *bool `form:"modified" json:"modified" binding:"omitempty"`
	Year     *int  `form:"year" json:"year" binding:"omitempty,min=2002"`
	SkipEPSS *bool `form:"skip_epss" json:"skip_epss" binding:"omitempty"`
	SkipKEV  *bool `form:"skip_kev" json:"skip_kev" binding:"omitempty"`
}

type ImportResponse

type ImportResponse struct {
	Message string `json:"message"`
}

type KEV

type KEV struct {
	CveID                       *string    `json:"cveID,omitempty" gorm:"column:cve_id;primary_key"`
	VenderProject               *string    `json:"vendorProject,omitempty" gorm:"column:vender_project"`
	Product                     *string    `json:"product,omitempty" gorm:"column:product"`
	VulnerabilityName           *string    `json:"vulnerabilityName,omitempty" gorm:"column:vulnerability_name"`
	DateAdded                   *string    `json:"dateAdded,omitempty" gorm:"column:date_added"`
	ShortDescription            *string    `json:"shortDescription,omitempty" gorm:"column:short_description"`
	RequiredAction              *string    `json:"requiredAction,omitempty" gorm:"column:required_action"`
	DueDate                     *string    `json:"dueDate,omitempty" gorm:"column:due_date"`
	KnownRansomewareCampaignUse *string    `json:"knownRansomwareCampaignUse,omitempty" gorm:"column:known_ransomeware_campaign_use"`
	Notes                       *string    `json:"notes,omitempty" gorm:"column:notes"`
	CWEs                        *string    `json:"-" gorm:"column:cwes"`
	CWEArray                    []string   `json:"cwes,omitempty" gorm:"-"` // for JSON parsing
	CreatedAt                   *time.Time `json:"created_at,omitempty" gorm:"column:created_at"`
	UpdatedAt                   *time.Time `json:"updated_at,omitempty" gorm:"column:updated_at"`
}

type ListProductVulnerabilityRequest

type ListProductVulnerabilityRequest struct {
	CPEVendor   *string `form:"cpe_vendor" json:"cpe_vendor" binding:"required"`
	CPEProduct  *string `form:"cpe_product" json:"cpe_product" binding:"required"`
	CPETargetSw *string `form:"cpe_target_sw" json:"cpe_target_sw" binding:"omitempty"`
	Version     *string `form:"version" json:"version" binding:"required"`

	// Amount of information in the response
	Full *bool `form:"full" json:"full" binding:"omitempty"`
}

type ListProductVulnerabilityResponse

type ListProductVulnerabilityResponse struct {
	Total           int64            `json:"total"`
	Vulnerabilities []*Vulnerability `json:"vulnerabilities"`
}

type ListVulnerabilityRequest

type ListVulnerabilityRequest struct {
	// Filter
	CVEID                *string `form:"cve_id" json:"cve_id" binding:"omitempty,min=13"`
	BaseSeverity         *string `form:"base_severity" json:"base_severity" binding:"omitempty"`
	BaseScore            *string `form:"base_score" json:"base_score" binding:"omitempty,min=0,max=10"`
	CPEPart              *string `form:"cpe_part" json:"cpe_part" binding:"omitempty,oneof=a h p"`
	CPEVendor            *string `form:"cpe_vendor" json:"cpe_vendor" binding:"omitempty"`
	CPEProduct           *string `form:"cpe_product" json:"cpe_product" binding:"omitempty"`
	CPETargetSw          *string `form:"cpe_target_sw" json:"cpe_target_sw" binding:"omitempty"`
	Description          *string `form:"description" json:"description" binding:"omitempty"`
	PublishedDateFrom    *string `form:"published_date_from" json:"published_date_from" binding:"omitempty,datetime=2006-01-02T15:04:05Z"`
	PublishedDateTo      *string `form:"published_date_to" json:"published_date_to" binding:"omitempty,datetime=2006-01-02T15:04:05Z"`
	LastModifiedDateFrom *string `form:"last_modified_date_from" json:"last_modified_date_from" binding:"omitempty,datetime=2006-01-02T15:04:05Z"`
	LastModifiedDateTo   *string `form:"last_modified_date_to" json:"last_modified_date_to" binding:"omitempty,datetime=2006-01-02T15:04:05Z"`

	// Pagination
	Limit  *int `form:"limit" json:"limit" binding:"omitempty,min=1,max=1000"`
	Offset *int `form:"offset" json:"offset" binding:"omitempty,min=0"`

	// Sort
	Sort  *string `` /* 159-byte string literal not displayed */
	Order *string `form:"order" json:"order" binding:"omitempty,oneof=asc desc"`

	// Amount of information in the response
	Full *bool `form:"full" json:"full" binding:"omitempty"`
}

type ListVulnerabilityResponse

type ListVulnerabilityResponse struct {
	Total           int64            `json:"total"`
	Limit           int64            `json:"limit"`
	Offset          int64            `json:"offset"`
	Vulnerabilities []*Vulnerability `json:"vulnerabilities,omitempty"`
}

type NVDAPI20Configuration

type NVDAPI20Configuration struct {
	Nodes []NVDAPI20Node `json:"nodes"`
}

type NVDAPI20CpeMatch

type NVDAPI20CpeMatch struct {
	Vulnerable            bool   `json:"vulnerable"`
	Criteria              string `json:"criteria"`
	VersionStartIncluding string `json:"versionStartIncluding,omitempty"`
	VersionStartExcluding string `json:"versionStartExcluding,omitempty"`
	VersionEndIncluding   string `json:"versionEndIncluding,omitempty"`
	VersionEndExcluding   string `json:"versionEndExcluding,omitempty"`
}

type NVDAPI20CvssDataV2

type NVDAPI20CvssDataV2 struct {
	Version   string  `json:"version"`
	BaseScore float64 `json:"baseScore"`
}

type NVDAPI20CvssDataV31

type NVDAPI20CvssDataV31 struct {
	Version      string  `json:"version"`
	VectorString string  `json:"vectorString"`
	BaseScore    float64 `json:"baseScore"`
	BaseSeverity string  `json:"baseSeverity"`
}

type NVDAPI20CvssMetricV2

type NVDAPI20CvssMetricV2 struct {
	Source   string             `json:"source"`
	Type     string             `json:"type"`
	CvssData NVDAPI20CvssDataV2 `json:"cvssData"`
}

type NVDAPI20CvssMetricV31

type NVDAPI20CvssMetricV31 struct {
	Source   string              `json:"source"`
	Type     string              `json:"type"`
	CvssData NVDAPI20CvssDataV31 `json:"cvssData"`
}

type NVDAPI20Description

type NVDAPI20Description struct {
	Lang  string `json:"lang"`
	Value string `json:"value"`
}

type NVDAPI20Metrics

type NVDAPI20Metrics struct {
	CvssMetricV31 []NVDAPI20CvssMetricV31 `json:"cvssMetricV31,omitempty"`
	CvssMetricV2  []NVDAPI20CvssMetricV2  `json:"cvssMetricV2,omitempty"`
}

type NVDAPI20Node

type NVDAPI20Node struct {
	Operator string             `json:"operator"`
	Negate   bool               `json:"negate"`
	CpeMatch []NVDAPI20CpeMatch `json:"cpeMatch"`
}

type NVDAPI20Vulnerability

type NVDAPI20Vulnerability struct {
	ID               string                  `json:"id"`
	SourceIdentifier string                  `json:"sourceIdentifier"`
	Published        string                  `json:"published"`
	LastModified     string                  `json:"lastModified"`
	VulnStatus       string                  `json:"vulnStatus"`
	Descriptions     []NVDAPI20Description   `json:"descriptions"`
	Metrics          *NVDAPI20Metrics        `json:"metrics,omitempty"`
	Configurations   []NVDAPI20Configuration `json:"configurations,omitempty"`
}

NVDAPI20Vulnerability represents CVE data in NVD API 2.0 format (used by fkie-cad)

type NodeData

type NodeData struct {
	CPEMatch []CPEMatchData `json:"cpe_match,omitempty"`
}

type PoC

type PoC struct {
	CVEID        string     `json:"cve_id" gorm:"column:cve_id;primary_key"`
	RepositoryID uint64     `json:"repository_id" gorm:"column:repository_id;primary_key"`
	RepoName     *string    `json:"repo_name,omitempty" gorm:"column:repo_name"`
	FullName     *string    `json:"full_name,omitempty" gorm:"column:full_name"`
	URL          *string    `json:"url,omitempty" gorm:"column:url"`
	Description  *string    `json:"description,omitempty" gorm:"column:description"`
	PushedAt     *string    `json:"pushed_at,omitempty" gorm:"column:pushed_at"`
	Readme       *string    `json:"readme,omitempty" gorm:"column:readme"`
	CreatedAt    *time.Time `json:"created_at,omitempty" gorm:"column:created_at"`
	UpdatedAt    *time.Time `json:"updated_at,omitempty" gorm:"column:updated_at"`
}

func (PoC) TableName

func (PoC) TableName() string

type Repository

type Repository struct {
	ID          *uint64 `json:"id,omitempty"`
	Name        *string `json:"name,omitempty"`
	FullName    *string `json:"full_name,omitempty"`
	HTMLURL     *string `json:"html_url,omitempty"`
	Description *string `json:"description,omitempty"`
	PushedAt    *string `json:"pushed_at,omitempty"`
}

type Vulnerability

type Vulnerability struct {
	CVE              *CVEData            `json:"cve,omitempty"`
	Configurations   *ConfigurationsData `json:"configurations,omitempty"`
	Impact           *ImpactData         `json:"impact,omitempty"`
	PublishedDate    *string             `json:"publishedDate,omitempty"`
	LastModifiedDate *string             `json:"lastModifiedDate,omitempty"`
	EPSS             *float64            `json:"epss,omitempty"`
	KEV              *KEV                `json:"kev,omitempty"`
	PoC              []*PoC              `json:"poc,omitempty"`
}

func ConvertNVDAPI20ToVulnerability

func ConvertNVDAPI20ToVulnerability(nvdVul *NVDAPI20Vulnerability) (*Vulnerability, error)

ConvertNVDAPI20ToVulnerability converts NVD API 2.0 format to legacy Vulnerability format

func FormatVulnerability

func FormatVulnerability(cve *CVE, epss *EPSS, kev *KEV, pocs []*PoC, full *bool) (*Vulnerability, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL