mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
247 lines
5.6 KiB
Go
247 lines
5.6 KiB
Go
package containerscan
|
|
|
|
import (
|
|
"github.com/francoispqt/gojay"
|
|
)
|
|
|
|
/*
|
|
responsible on fast unmarshaling of various COMMON containerscan structures and substructures
|
|
|
|
*/
|
|
|
|
// UnmarshalJSONObject - File inside a pkg
|
|
func (file *PackageFile) UnmarshalJSONObject(dec *gojay.Decoder, key string) (err error) {
|
|
|
|
switch key {
|
|
case "name":
|
|
err = dec.String(&(file.Filename))
|
|
}
|
|
return err
|
|
|
|
}
|
|
|
|
func (files *PkgFiles) UnmarshalJSONArray(dec *gojay.Decoder) error {
|
|
lae := PackageFile{}
|
|
if err := dec.Object(&lae); err != nil {
|
|
return err
|
|
}
|
|
|
|
*files = append(*files, lae)
|
|
return nil
|
|
}
|
|
|
|
func (file *PackageFile) NKeys() int {
|
|
return 0
|
|
}
|
|
|
|
// UnmarshalJSONObject--- Package
|
|
func (pkgnx *LinuxPackage) UnmarshalJSONObject(dec *gojay.Decoder, key string) (err error) {
|
|
|
|
switch key {
|
|
case "packageName":
|
|
err = dec.String(&(pkgnx.PackageName))
|
|
|
|
case "version":
|
|
err = dec.String(&(pkgnx.PackageVersion))
|
|
|
|
case "files":
|
|
err = dec.Array(&(pkgnx.Files))
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (file *LinuxPackage) NKeys() int {
|
|
return 0
|
|
}
|
|
|
|
func (pkgs *LinuxPkgs) UnmarshalJSONArray(dec *gojay.Decoder) error {
|
|
lae := LinuxPackage{}
|
|
if err := dec.Object(&lae); err != nil {
|
|
return err
|
|
}
|
|
|
|
*pkgs = append(*pkgs, lae)
|
|
return nil
|
|
}
|
|
|
|
//--------Vul fixed in----------------------------------
|
|
func (fx *FixedIn) UnmarshalJSONObject(dec *gojay.Decoder, key string) (err error) {
|
|
|
|
switch key {
|
|
case "name":
|
|
err = dec.String(&(fx.Name))
|
|
|
|
case "imageTag":
|
|
err = dec.String(&(fx.ImgTag))
|
|
case "version":
|
|
err = dec.String(&(fx.Version))
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (t *VulFixes) UnmarshalJSONArray(dec *gojay.Decoder) error {
|
|
lae := FixedIn{}
|
|
if err := dec.Object(&lae); err != nil {
|
|
return err
|
|
}
|
|
|
|
*t = append(*t, lae)
|
|
return nil
|
|
}
|
|
|
|
func (file *FixedIn) NKeys() int {
|
|
return 0
|
|
}
|
|
|
|
//------ VULNERABIlITy ---------------------
|
|
|
|
// Name string `json:"name"`
|
|
// ImgHash string `json:"imageHash"`
|
|
// ImgTag string `json:"imageTag",omitempty`
|
|
// RelatedPackageName string `json:"packageName"`
|
|
// PackageVersion string `json:"packageVersion"`
|
|
// Link string `json:"link"`
|
|
// Description string `json:"description"`
|
|
// Severity string `json:"severity"`
|
|
// Metadata interface{} `json:"metadata",omitempty`
|
|
// Fixes VulFixes `json:"fixedIn",omitempty`
|
|
// Relevancy string `json:"relevant"` // use the related enum
|
|
|
|
func (v *Vulnerability) UnmarshalJSONObject(dec *gojay.Decoder, key string) (err error) {
|
|
|
|
switch key {
|
|
case "name":
|
|
err = dec.String(&(v.Name))
|
|
|
|
case "imageTag":
|
|
err = dec.String(&(v.ImgTag))
|
|
case "imageHash":
|
|
err = dec.String(&(v.ImgHash))
|
|
|
|
case "packageName":
|
|
err = dec.String(&(v.RelatedPackageName))
|
|
|
|
case "packageVersion":
|
|
err = dec.String(&(v.PackageVersion))
|
|
|
|
case "link":
|
|
err = dec.String(&(v.Link))
|
|
|
|
case "description":
|
|
err = dec.String(&(v.Description))
|
|
|
|
case "severity":
|
|
err = dec.String(&(v.Severity))
|
|
|
|
case "relevant":
|
|
err = dec.String(&(v.Relevancy))
|
|
|
|
case "fixedIn":
|
|
err = dec.Array(&(v.Fixes))
|
|
|
|
case "metadata":
|
|
err = dec.Interface(&(v.Metadata))
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func (t *VulnerabilitiesList) UnmarshalJSONArray(dec *gojay.Decoder) error {
|
|
lae := Vulnerability{}
|
|
if err := dec.Object(&lae); err != nil {
|
|
return err
|
|
}
|
|
|
|
*t = append(*t, lae)
|
|
return nil
|
|
}
|
|
|
|
func (v *Vulnerability) NKeys() int {
|
|
return 0
|
|
}
|
|
|
|
//---------Layer Object----------------------------------
|
|
// type ScanResultLayer struct {
|
|
// LayerHash string `json:layerHash`
|
|
// Vulnerabilities []Vulnerability `json:vulnerabilities`
|
|
// Packages []LinuxPackage `json:packageToFile`
|
|
// }
|
|
|
|
func (scan *ScanResultLayer) UnmarshalJSONObject(dec *gojay.Decoder, key string) (err error) {
|
|
|
|
switch key {
|
|
// case "timestamp":
|
|
// err = dec.Time(&(reporter.Timestamp), time.RFC3339)
|
|
// reporter.Timestamp = reporter.Timestamp.Local()
|
|
case "layerHash":
|
|
err = dec.String(&(scan.LayerHash))
|
|
|
|
case "parentLayerHash":
|
|
err = dec.String(&(scan.ParentLayerHash))
|
|
|
|
case "vulnerabilities":
|
|
err = dec.Array(&(scan.Vulnerabilities))
|
|
case "packageToFile":
|
|
err = dec.Array(&(scan.Packages))
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (t *LayersList) UnmarshalJSONArray(dec *gojay.Decoder) error {
|
|
lae := ScanResultLayer{}
|
|
if err := dec.Object(&lae); err != nil {
|
|
return err
|
|
}
|
|
|
|
*t = append(*t, lae)
|
|
return nil
|
|
}
|
|
|
|
func (scan *ScanResultLayer) NKeys() int {
|
|
return 0
|
|
}
|
|
|
|
//---------------------SCAN RESULT--------------------------------------------------------------------------
|
|
|
|
// type ScanResultReport struct {
|
|
// CustomerGUID string `json:customerGuid`
|
|
// ImgTag string `json:imageTag,omitempty`
|
|
// ImgHash string `json:imageHash`
|
|
// WLID string `json:wlid`
|
|
// Timestamp int `json:customerGuid`
|
|
// Layers []ScanResultLayer `json:layers`
|
|
// ContainerName
|
|
// }
|
|
|
|
func (scan *ScanResultReport) UnmarshalJSONObject(dec *gojay.Decoder, key string) (err error) {
|
|
|
|
switch key {
|
|
// case "timestamp":
|
|
// err = dec.Time(&(reporter.Timestamp), time.RFC3339)
|
|
// reporter.Timestamp = reporter.Timestamp.Local()
|
|
case "customerGUID":
|
|
err = dec.String(&(scan.CustomerGUID))
|
|
case "imageTag":
|
|
err = dec.String(&(scan.ImgTag))
|
|
case "imageHash":
|
|
err = dec.String(&(scan.ImgHash))
|
|
case "wlid":
|
|
err = dec.String(&(scan.WLID))
|
|
case "containerName":
|
|
err = dec.String(&(scan.ContainerName))
|
|
case "timestamp":
|
|
err = dec.Int64(&(scan.Timestamp))
|
|
case "layers":
|
|
err = dec.Array(&(scan.Layers))
|
|
|
|
case "listOfDangerousArtifcats":
|
|
err = dec.SliceString(&(scan.ListOfDangerousArtifcats))
|
|
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (scan *ScanResultReport) NKeys() int {
|
|
return 0
|
|
}
|