Documentation ¶
Index ¶
- Constants
- Variables
- type Artifact
- type Client
- type ClientPool
- type Definition
- type Error
- type ErrorResponse
- type PoolConfig
- type Registry
- type ReportNotReadyError
- type RequestResolver
- type ScanRequest
- type ScanResponse
- type ScanType
- type Scanner
- type ScannerAdapterMetadata
- type ScannerCapability
- type ScannerProperties
- type Spec
Constants ¶
const ( // HTTPAcceptHeader represents the HTTP accept header HTTPAcceptHeader = "Accept" // HTTPContentType represents the HTTP content-type header HTTPContentType = "Content-Type" // MimeTypeOCIArtifact defines the mime type for OCI artifact MimeTypeOCIArtifact = "application/vnd.oci.image.manifest.v1+json" // MimeTypeDockerArtifact defines the mime type for docker artifact MimeTypeDockerArtifact = "application/vnd.docker.distribution.manifest.v2+json" // MimeTypeNativeReport defines the mime type for native report MimeTypeNativeReport = "application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0" // MimeTypeRawReport defines the mime type for raw report MimeTypeRawReport = "application/vnd.scanner.adapter.vuln.report.raw" // MimeTypeAdapterMeta defines the mime type for adapter metadata MimeTypeAdapterMeta = "application/vnd.scanner.adapter.metadata+json; version=1.0" // MimeTypeScanRequest defines the mime type for scan request MimeTypeScanRequest = "application/vnd.scanner.adapter.scan.request+json; version=1.0" // MimeTypeScanResponse defines the mime type for scan response MimeTypeScanResponse = "application/vnd.scanner.adapter.scan.response+json; version=1.0" // MimeTypeSBOMReport MimeTypeSBOMReport = "application/vnd.security.sbom.report+json; version=1.0" // MimeTypeGenericVulnerabilityReport defines the MIME type for the generic report with enhanced information MimeTypeGenericVulnerabilityReport = "application/vnd.security.vulnerability.report; version=1.1" ScanTypeVulnerability = "vulnerability" ScanTypeSbom = "sbom" )
Variables ¶
var DefaultClientPool = NewClientPool(nil)
DefaultClientPool is a default client pool.
Functions ¶
This section is empty.
Types ¶
type Artifact ¶
type Artifact struct { // ID of the namespace (project). It will not be sent to scanner adapter. NamespaceID int64 `json:"namespace_id,omitempty"` // The full name of a Harbor repository containing the artifact, including the namespace. // For example, `library/oracle/nosql`. Repository string `json:"repository"` // The info used to identify the version of the artifact, Tag string `json:"tag"` // The artifact's digest, consisting of an algorithm and hex portion. // For example, `sha256:6c3c624b58dbbcd3c0dd82b4c53f04194d1247c6eebdaab7c610cf7d66709b3b`, // represents sha256 based digest. Digest string `json:"digest"` // The mime type of the scanned artifact MimeType string `json:"mime_type"` // The size the scanned artifact Size int64 `json:"size"` }
Artifact represents an artifact stored in Registry.
type Client ¶
type Client interface { // GetMetadata gets the metadata of the given scanner // // Returns: // *ScannerAdapterMetadata : metadata of the given scanner // error : non nil error if any errors occurred GetMetadata() (*ScannerAdapterMetadata, error) // SubmitScan initiates a scanning of the given artifact. // Returns `nil` if the request was accepted, a non `nil` error otherwise. // // Arguments: // req *ScanRequest : request including the registry and artifact data // // Returns: // *ScanResponse : response with UUID for tracking the scan results // error : non nil error if any errors occurred SubmitScan(req *ScanRequest) (*ScanResponse, error) // GetScanReport gets the scan result for the corresponding ScanRequest identifier. // Note that this is a blocking method which either returns a non `nil` scan report or error. // A caller is supposed to cast the returned interface{} to a structure that corresponds // to the specified MIME type. // // Arguments: // scanRequestID string : the ID of the scan submitted before // reportMIMEType string : the report mime type // Returns: // string : the scan report of the given artifact // error : non nil error if any errors occurred GetScanReport(scanRequestID, reportMIMEType string, urlParameter string) (string, error) }
Client defines the methods to access the adapter services that implement the REST API specs
type ClientPool ¶
type ClientPool interface { // Get a v1 client interface for the specified registration. // // Arguments: // r *scanner.Registration : registration for client connecting to // // Returns: // Client : v1 client // error : non nil error if any errors occurred Get(url, authType, accessCredential string, skipCertVerify bool) (Client, error) }
ClientPool defines operations for the client pool which provides v1 client cache.
func NewClientPool ¶
func NewClientPool(config *PoolConfig) ClientPool
NewClientPool news a basic client pool.
type Definition ¶
type Definition struct { // URL of the API URL string // Resolver fro the request Resolver RequestResolver }
Definition for API
type Error ¶
type Error struct { // Message of the error Message string `json:"message"` }
Error message
type ErrorResponse ¶
type ErrorResponse struct { // Error object Err *Error `json:"error"` }
ErrorResponse contains error message when requests are not correctly handled.
type PoolConfig ¶
type PoolConfig struct { // Interval for checking dead instance. DeadCheckInterval time.Duration // Expire time for the instance to be marked as dead. ExpireTime time.Duration }
PoolConfig provides configurations for the client pool.
type Registry ¶
type Registry struct { // A base URL of the Docker Registry v2 API exposed by Harbor. URL string `json:"url"` // An optional value of the HTTP Authorization header sent with each request to the Docker Registry for getting or exchanging token. // For example, `Basic: Base64(username:password)`. Authorization string `json:"authorization"` // Insecure is an indicator of https or http. Insecure bool `json:"insecure"` }
Registry represents Registry connection settings.
type ReportNotReadyError ¶
type ReportNotReadyError struct { // Seconds for next retry with seconds RetryAfter int }
ReportNotReadyError is an error to indicate the scan report is not ready
func (*ReportNotReadyError) Error ¶
func (rnr *ReportNotReadyError) Error() string
Error for ReportNotReadyError
type RequestResolver ¶
RequestResolver is a function template to modify the API request, e.g: add headers
type ScanRequest ¶
type ScanRequest struct { // Connection settings for the Docker Registry v2 API exposed by Harbor. Registry *Registry `json:"registry"` // Artifact to be scanned. Artifact *Artifact `json:"artifact"` // RequestType RequestType []*ScanType `json:"enabled_capabilities"` }
ScanRequest represents a structure that is sent to a Scanner Adapter to initiate artifact scanning. Conducts all the details required to pull the artifact from a Harbor registry.
func (*ScanRequest) FromJSON ¶
func (s *ScanRequest) FromJSON(jsonData string) error
FromJSON parses ScanRequest from json data
func (*ScanRequest) ToJSON ¶
func (s *ScanRequest) ToJSON() (string, error)
ToJSON marshals ScanRequest to JSON data
type ScanResponse ¶
type ScanResponse struct { // e.g: 3fa85f64-5717-4562-b3fc-2c963f66afa6 ID string `json:"id"` }
ScanResponse represents the response returned by the scanner adapter after scan request successfully submitted.
type ScanType ¶
type ScanType struct { // Type sets the type of the scan, it could be sbom or vulnerability, default is vulnerability Type string `json:"type"` // ProducesMimeTypes defines scanreport should be ProducesMimeTypes []string `json:"produces_mime_types"` // Parameters extra parameters Parameters map[string]interface{} `json:"parameters"` }
ScanType represent the type of the scan request
type Scanner ¶
type Scanner struct { // The name of the scanner. Name string `json:"name"` // The name of the scanner's provider. Vendor string `json:"vendor"` // The version of the scanner. Version string `json:"version"` }
Scanner represents metadata of a Scanner Adapter which allow Harbor to lookup a scanner capable of scanning a given Artifact stored in its registry and making sure that it can interpret a returned result.
type ScannerAdapterMetadata ¶
type ScannerAdapterMetadata struct { Scanner *Scanner `json:"scanner"` Capabilities []*ScannerCapability `json:"capabilities"` Properties ScannerProperties `json:"properties"` }
ScannerAdapterMetadata represents metadata of a Scanner Adapter which allows Harbor to lookup a scanner capable of scanning a given Artifact stored in its registry and making sure that it can interpret a returned result.
func (*ScannerAdapterMetadata) ConvertCapability ¶
func (md *ScannerAdapterMetadata) ConvertCapability() map[string]interface{}
ConvertCapability converts the capability to map, used in get scanner API
func (*ScannerAdapterMetadata) GetCapability ¶
func (md *ScannerAdapterMetadata) GetCapability(mimeType string) *ScannerCapability
GetCapability returns capability for the mime type
func (*ScannerAdapterMetadata) HasCapability ¶
func (md *ScannerAdapterMetadata) HasCapability(mimeType string) bool
HasCapability returns true when mine type of the artifact support by the scanner
func (*ScannerAdapterMetadata) Validate ¶
func (md *ScannerAdapterMetadata) Validate() error
Validate validate the metadata
type ScannerCapability ¶
type ScannerCapability struct { // The type of the scanner capability, vulnerability or sbom Type string `json:"type"` // The set of MIME types of the artifacts supported by the scanner to produce the reports // specified in the "produces_mime_types". A given mime type should only be present in one // capability item. ConsumesMimeTypes []string `json:"consumes_mime_types"` // The set of MIME types of reports generated by the scanner for the consumes_mime_types of // the same capability record. ProducesMimeTypes []string `json:"produces_mime_types"` }
ScannerCapability consists of the set of recognized artifact MIME types and the set of scanner report MIME types. For example, a scanner capable of analyzing Docker images and producing a vulnerabilities report recognizable by Harbor web console might be represented with the following capability:
- type: vulnerability
- consumes MIME types: -- application/vnd.oci.image.manifest.v1+json -- application/vnd.docker.distribution.manifest.v2+json
- produces MIME types -- application/vnd.scanner.adapter.vuln.report.harbor+json; version=1.0 -- application/vnd.scanner.adapter.vuln.report.raw
type ScannerProperties ¶
ScannerProperties is a set of custom properties that can further describe capabilities of a given scanner.
type Spec ¶
type Spec struct {
// contains filtered or unexported fields
}
Spec of the API Contains URL and possible headers.
func (*Spec) GetScanReport ¶
func (s *Spec) GetScanReport(scanReqID string, mimeType string) Definition
GetScanReport API