mirror of
https://github.com/project-zot/zot.git
synced 2026-06-17 21:17:58 +08:00
8f0bf18d7e
ImageIndex2ImageSummary was missing LastPullTimestamp assignment, causing multi-arch image queries to always return null for this field. Also adds the PushedBy field (already stored in MetaDB) to the GraphQL schema and both conversion paths (manifest and index). Signed-off-by: cainydev <wajo432@gmail.com>
468 lines
18 KiB
Go
468 lines
18 KiB
Go
// Code generated by github.com/99designs/gqlgen, DO NOT EDIT.
|
|
|
|
package gql_generated
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Annotation is Key:Value pair representing custom data which is otherwise
|
|
// not available in other fields.
|
|
type Annotation struct {
|
|
// Custom key
|
|
Key *string `json:"Key,omitempty"`
|
|
// Value associated with the custom key
|
|
Value *string `json:"Value,omitempty"`
|
|
}
|
|
|
|
// Contains various details about the CVE (Common Vulnerabilities and Exposures)
|
|
// and a list of PackageInfo about the affected packages
|
|
type Cve struct {
|
|
// CVE ID
|
|
ID *string `json:"Id,omitempty"`
|
|
// A short title describing the CVE
|
|
Title *string `json:"Title,omitempty"`
|
|
// A detailed description of the CVE
|
|
Description *string `json:"Description,omitempty"`
|
|
// Reference for the given CVE
|
|
Reference *string `json:"Reference,omitempty"`
|
|
// The impact the CVE has, one of "UNKNOWN", "LOW", "MEDIUM", "HIGH", "CRITICAL"
|
|
Severity *string `json:"Severity,omitempty"`
|
|
// Information on the packages in which the CVE was found
|
|
PackageList []*PackageInfo `json:"PackageList,omitempty"`
|
|
}
|
|
|
|
// Contains the diff results of subtracting Subtrahend's CVEs from Minuend's CVEs
|
|
type CVEDiffResult struct {
|
|
// Minuend is the image from which CVE's we subtract
|
|
Minuend *ImageIdentifier `json:"Minuend"`
|
|
// Subtrahend is the image which CVE's are subtracted
|
|
Subtrahend *ImageIdentifier `json:"Subtrahend"`
|
|
// List of CVE objects which are present in minuend but not in subtrahend
|
|
CVEList []*Cve `json:"CVEList,omitempty"`
|
|
// Summary of the findings for this image
|
|
Summary *ImageVulnerabilitySummary `json:"Summary,omitempty"`
|
|
// The CVE pagination information, see PageInfo object for more details
|
|
Page *PageInfo `json:"Page,omitempty"`
|
|
}
|
|
|
|
// Contains the tag of the image and a list of CVEs
|
|
type CVEResultForImage struct {
|
|
// Tag affected by the CVEs
|
|
Tag *string `json:"Tag,omitempty"`
|
|
// List of CVE objects which affect this specific image:tag
|
|
CVEList []*Cve `json:"CVEList,omitempty"`
|
|
// Summary of the findings for this image
|
|
Summary *ImageVulnerabilitySummary `json:"Summary,omitempty"`
|
|
// The CVE pagination information, see PageInfo object for more details
|
|
Page *PageInfo `json:"Page,omitempty"`
|
|
}
|
|
|
|
// Apply various types of filters to the queries made for repositories and images
|
|
// For example we only want to display repositories which contain images with
|
|
// a certain OS ar Architecture.
|
|
type Filter struct {
|
|
// Only return images or repositories supporting the operating systems in the list
|
|
// Should be values listed in the Go Language document https://go.dev/doc/install/source#environment
|
|
Os []*string `json:"Os,omitempty"`
|
|
// Only return images or repositories supporting the build architectures in the list
|
|
// Should be values listed in the Go Language document https://go.dev/doc/install/source#environment
|
|
Arch []*string `json:"Arch,omitempty"`
|
|
// Only return images or repositories with at least one signature
|
|
HasToBeSigned *bool `json:"HasToBeSigned,omitempty"`
|
|
// Only returns images or repositories that are bookmarked or not bookmarked
|
|
IsBookmarked *bool `json:"IsBookmarked,omitempty"`
|
|
// Only returns images or repositories that are starred or not starred
|
|
IsStarred *bool `json:"IsStarred,omitempty"`
|
|
}
|
|
|
|
// Search results, can contain images, repositories and layers
|
|
type GlobalSearchResult struct {
|
|
// Pagination information
|
|
Page *PageInfo `json:"Page,omitempty"`
|
|
// List of images matching the search criteria
|
|
Images []*ImageSummary `json:"Images,omitempty"`
|
|
// List of repositories matching the search criteria
|
|
Repos []*RepoSummary `json:"Repos,omitempty"`
|
|
// List of layers matching the search criteria
|
|
// NOTE: the actual search logic for layers is not implemented at the moment
|
|
Layers []*LayerSummary `json:"Layers,omitempty"`
|
|
}
|
|
|
|
// Information on how a layer was created
|
|
type HistoryDescription struct {
|
|
// Created is the time when the layer was created.
|
|
Created *time.Time `json:"Created,omitempty"`
|
|
// CreatedBy is the command which created the layer.
|
|
CreatedBy *string `json:"CreatedBy,omitempty"`
|
|
// Author is the author of the build point.
|
|
Author *string `json:"Author,omitempty"`
|
|
// Comment is a custom message set when creating the layer.
|
|
Comment *string `json:"Comment,omitempty"`
|
|
// EmptyLayer is used to mark if the history item created a filesystem diff.
|
|
EmptyLayer *bool `json:"EmptyLayer,omitempty"`
|
|
}
|
|
|
|
// ImageIdentifier
|
|
type ImageIdentifier struct {
|
|
// Repo name of the image
|
|
Repo string `json:"Repo"`
|
|
// The tag of the image
|
|
Tag string `json:"Tag"`
|
|
// The digest of the image
|
|
Digest *string `json:"Digest,omitempty"`
|
|
// The platform of the image
|
|
Platform *Platform `json:"Platform,omitempty"`
|
|
}
|
|
|
|
// ImageInput
|
|
type ImageInput struct {
|
|
// Repo name of the image
|
|
Repo string `json:"Repo"`
|
|
// The tag of the image
|
|
Tag string `json:"Tag"`
|
|
// The digest of the image
|
|
Digest *string `json:"Digest,omitempty"`
|
|
// The platform of the image
|
|
Platform *PlatformInput `json:"Platform,omitempty"`
|
|
}
|
|
|
|
// Details about a specific image, it is used by queries returning a list of images
|
|
// We define an image as a pairing or a repository and a tag belonging to that repository
|
|
type ImageSummary struct {
|
|
// Name of the repository where the image is found
|
|
RepoName *string `json:"RepoName,omitempty"`
|
|
// Tag identifying the image within the repository
|
|
Tag *string `json:"Tag,omitempty"`
|
|
// The digest of the descriptor of this image
|
|
Digest *string `json:"Digest,omitempty"`
|
|
// The media type of the descriptor of this image
|
|
MediaType *string `json:"MediaType,omitempty"`
|
|
// List of manifests for all supported versions of the image for different operating systems and architectures
|
|
Manifests []*ManifestSummary `json:"Manifests,omitempty"`
|
|
// Total size of the files associated with all images (manifest, config, layers)
|
|
Size *string `json:"Size,omitempty"`
|
|
// Number of downloads of the manifest of this image
|
|
DownloadCount *int `json:"DownloadCount,omitempty"`
|
|
// Last time the image manifest was pulled
|
|
LastPullTimestamp *time.Time `json:"LastPullTimestamp,omitempty"`
|
|
// Timestamp when the image was pushed to the registry
|
|
PushTimestamp *time.Time `json:"PushTimestamp,omitempty"`
|
|
// The user who pushed the image to the registry
|
|
PushedBy *string `json:"PushedBy,omitempty"`
|
|
// Timestamp when the image manifest was tagged (if the data is unavailable it falls back to when the image was pushed to the registry)
|
|
TaggedTimestamp *time.Time `json:"TaggedTimestamp,omitempty"`
|
|
// Timestamp of the last modification done to the image (from config or the last updated layer)
|
|
LastUpdated *time.Time `json:"LastUpdated,omitempty"`
|
|
// Human-readable description of the software packaged in the image
|
|
Description *string `json:"Description,omitempty"`
|
|
// True if the image has a signature associated with it, false otherwise
|
|
IsSigned *bool `json:"IsSigned,omitempty"`
|
|
// Info about signature validity
|
|
SignatureInfo []*SignatureSummary `json:"SignatureInfo,omitempty"`
|
|
// License(s) under which contained software is distributed as an SPDX License Expression
|
|
Licenses *string `json:"Licenses,omitempty"`
|
|
// Labels associated with this image
|
|
// NOTE: currently this field is unused
|
|
Labels *string `json:"Labels,omitempty"`
|
|
// Human-readable title of the image
|
|
Title *string `json:"Title,omitempty"`
|
|
// URL to get source code for building the image
|
|
Source *string `json:"Source,omitempty"`
|
|
// URL to get documentation on the image
|
|
Documentation *string `json:"Documentation,omitempty"`
|
|
// Vendor associated with this image, the distributing entity, organization or individual
|
|
Vendor *string `json:"Vendor,omitempty"`
|
|
// Contact details of the people or organization responsible for the image
|
|
Authors *string `json:"Authors,omitempty"`
|
|
// Short summary of the identified CVEs
|
|
Vulnerabilities *ImageVulnerabilitySummary `json:"Vulnerabilities,omitempty"`
|
|
// Information about objects that reference this image
|
|
Referrers []*Referrer `json:"Referrers,omitempty"`
|
|
// True if current user has delete permission on this tag.
|
|
IsDeletable *bool `json:"IsDeletable,omitempty"`
|
|
}
|
|
|
|
// Contains summary of vulnerabilities found in a specific image
|
|
type ImageVulnerabilitySummary struct {
|
|
// Maximum severity of all CVEs found in this image
|
|
MaxSeverity *string `json:"MaxSeverity,omitempty"`
|
|
// Count of all CVEs found in this image
|
|
Count *int `json:"Count,omitempty"`
|
|
// Coresponds to CVSS 3 score NONE
|
|
UnknownCount *int `json:"UnknownCount,omitempty"`
|
|
// Coresponds to CVSS 3 score LOW
|
|
LowCount *int `json:"LowCount,omitempty"`
|
|
// Coresponds to CVSS 3 score MEDIUM
|
|
MediumCount *int `json:"MediumCount,omitempty"`
|
|
// Coresponds to CVSS 3 score HIGH
|
|
HighCount *int `json:"HighCount,omitempty"`
|
|
// Coresponds to CVSS 3 score CRITICAL
|
|
CriticalCount *int `json:"CriticalCount,omitempty"`
|
|
}
|
|
|
|
// Information about how/when a layer was built
|
|
type LayerHistory struct {
|
|
// Information specific to the layer such as size and digest.
|
|
Layer *LayerSummary `json:"Layer,omitempty"`
|
|
// Additional information about how the layer was created.
|
|
HistoryDescription *HistoryDescription `json:"HistoryDescription,omitempty"`
|
|
}
|
|
|
|
// Contains details about a specific layer which is part of an image
|
|
type LayerSummary struct {
|
|
// The size of the layer in bytes
|
|
Size *string `json:"Size,omitempty"`
|
|
// Digest of the layer content
|
|
Digest *string `json:"Digest,omitempty"`
|
|
}
|
|
|
|
// Details about a specific version of an image for a certain operating system and architecture.
|
|
type ManifestSummary struct {
|
|
// Digest of the manifest file associated with this image
|
|
Digest *string `json:"Digest,omitempty"`
|
|
// Digest of the config file associated with this image
|
|
ConfigDigest *string `json:"ConfigDigest,omitempty"`
|
|
// Timestamp of the last update to an image inside this repository
|
|
LastUpdated *time.Time `json:"LastUpdated,omitempty"`
|
|
// Total size of the files associated with this manifest (manifest, config, layers)
|
|
Size *string `json:"Size,omitempty"`
|
|
// True if the manifest has a signature associated with it, false otherwise
|
|
IsSigned *bool `json:"IsSigned,omitempty"`
|
|
// Info about signature validity
|
|
SignatureInfo []*SignatureSummary `json:"SignatureInfo,omitempty"`
|
|
// OS and architecture supported by this image
|
|
Platform *Platform `json:"Platform,omitempty"`
|
|
// Total number of image manifest downloads from this repository
|
|
DownloadCount *int `json:"DownloadCount,omitempty"`
|
|
// List of layers matching the search criteria
|
|
// NOTE: the actual search logic for layers is not implemented at the moment
|
|
Layers []*LayerSummary `json:"Layers,omitempty"`
|
|
// Information about the history of the specific image, see LayerHistory
|
|
History []*LayerHistory `json:"History,omitempty"`
|
|
// Short summary of the identified CVEs
|
|
Vulnerabilities *ImageVulnerabilitySummary `json:"Vulnerabilities,omitempty"`
|
|
// Information about objects that reference this image
|
|
Referrers []*Referrer `json:"Referrers,omitempty"`
|
|
// Value of the artifactType field if present else the value of the config media type
|
|
ArtifactType *string `json:"ArtifactType,omitempty"`
|
|
}
|
|
|
|
// Contains the name of the package, the current installed version and the version where the CVE was fixed
|
|
type PackageInfo struct {
|
|
// Name of the package affected by a CVE
|
|
Name *string `json:"Name,omitempty"`
|
|
// Path where the vulnerable package is located
|
|
PackagePath *string `json:"PackagePath,omitempty"`
|
|
// Current version of the package, typically affected by the CVE
|
|
InstalledVersion *string `json:"InstalledVersion,omitempty"`
|
|
// Minimum version of the package in which the CVE is fixed
|
|
FixedVersion *string `json:"FixedVersion,omitempty"`
|
|
}
|
|
|
|
// Information on current page returned by the API
|
|
type PageInfo struct {
|
|
// The total number of objects on all pages
|
|
TotalCount int `json:"TotalCount"`
|
|
// The number of objects in this page
|
|
ItemCount int `json:"ItemCount"`
|
|
}
|
|
|
|
// Pagination parameters
|
|
// If PageInput is empty, the request should return all objects.
|
|
type PageInput struct {
|
|
// The maximum amount of results to return for this page
|
|
// Negative values are not allowed
|
|
Limit *int `json:"limit,omitempty"`
|
|
// The results page number you want to receive
|
|
// Negative values are not allowed
|
|
Offset *int `json:"offset,omitempty"`
|
|
// The criteria used to sort the results on the page
|
|
SortBy *SortCriteria `json:"sortBy,omitempty"`
|
|
}
|
|
|
|
// Paginated list of ImageSummary objects
|
|
type PaginatedImagesResult struct {
|
|
// Information on the returned page
|
|
Page *PageInfo `json:"Page,omitempty"`
|
|
// List of images
|
|
Results []*ImageSummary `json:"Results"`
|
|
}
|
|
|
|
// Paginated list of RepoSummary objects
|
|
type PaginatedReposResult struct {
|
|
// Information on the returned page
|
|
Page *PageInfo `json:"Page,omitempty"`
|
|
// List of repositories
|
|
Results []*RepoSummary `json:"Results"`
|
|
}
|
|
|
|
// Contains details about the OS and architecture of the image
|
|
type Platform struct {
|
|
// The name of the operating system which the image is built to run on,
|
|
// Should be values listed in the Go Language document https://go.dev/doc/install/source#environment
|
|
Os *string `json:"Os,omitempty"`
|
|
// The name of the compilation architecture which the image is built to run on,
|
|
// Should be values listed in the Go Language document https://go.dev/doc/install/source#environment
|
|
Arch *string `json:"Arch,omitempty"`
|
|
}
|
|
|
|
// PlatformInput contains the Os and the Arch of the input image
|
|
type PlatformInput struct {
|
|
// The os of the image
|
|
Os *string `json:"Os,omitempty"`
|
|
// The arch of the image
|
|
Arch *string `json:"Arch,omitempty"`
|
|
}
|
|
|
|
// Queries supported by the zot server
|
|
type Query struct {
|
|
}
|
|
|
|
// A referrer is an object which has a reference to a another object
|
|
type Referrer struct {
|
|
// Referrer MediaType
|
|
// See https://github.com/opencontainers/artifacts for more details
|
|
MediaType *string `json:"MediaType,omitempty"`
|
|
// Referrer ArtifactType
|
|
// See https://github.com/opencontainers/artifacts for more details
|
|
ArtifactType *string `json:"ArtifactType,omitempty"`
|
|
// Total size of the referrer files in bytes
|
|
Size *int `json:"Size,omitempty"`
|
|
// Digest of the manifest file of the referrer
|
|
Digest *string `json:"Digest,omitempty"`
|
|
// A list of annotations associated with this referrer
|
|
Annotations []*Annotation `json:"Annotations"`
|
|
}
|
|
|
|
// Contains details about the repo: both general information on the repo, and the list of images
|
|
type RepoInfo struct {
|
|
// List of images in the repo
|
|
Images []*ImageSummary `json:"Images,omitempty"`
|
|
// Details about the repository itself
|
|
Summary *RepoSummary `json:"Summary,omitempty"`
|
|
}
|
|
|
|
// Details of a specific repo, it is used by queries returning a list of repos
|
|
type RepoSummary struct {
|
|
// Name of the repository
|
|
Name *string `json:"Name,omitempty"`
|
|
// Timestamp of the last update to an image inside this repository
|
|
LastUpdated *time.Time `json:"LastUpdated,omitempty"`
|
|
// Total size of the files within this repository
|
|
Size *string `json:"Size,omitempty"`
|
|
// List of platforms supported by this repository
|
|
Platforms []*Platform `json:"Platforms,omitempty"`
|
|
// Vendors associated with this image, the distributing entities, organizations or individuals
|
|
Vendors []*string `json:"Vendors,omitempty"`
|
|
// Details of the newest image inside the repository
|
|
// NOTE: not the image with the `latest` tag, the one with the most recent created timestamp
|
|
NewestImage *ImageSummary `json:"NewestImage,omitempty"`
|
|
// Total number of image manifest downloads from this repository
|
|
DownloadCount *int `json:"DownloadCount,omitempty"`
|
|
// Number of stars attributed to this repository by users
|
|
StarCount *int `json:"StarCount,omitempty"`
|
|
// True if the repository is bookmarked by the current user, false otherwise
|
|
IsBookmarked *bool `json:"IsBookmarked,omitempty"`
|
|
// True if the repository is starred by the current user, false otherwise
|
|
IsStarred *bool `json:"IsStarred,omitempty"`
|
|
// Rank represents how good the match was between the queried repo name and this repo summary.
|
|
Rank *int `json:"Rank,omitempty"`
|
|
}
|
|
|
|
// Contains details about the signature
|
|
type SignatureSummary struct {
|
|
// Tool is the tool used for signing image
|
|
Tool *string `json:"Tool,omitempty"`
|
|
// True if the signature is trusted, false otherwise
|
|
IsTrusted *bool `json:"IsTrusted,omitempty"`
|
|
// Author is the author of the signature
|
|
Author *string `json:"Author,omitempty"`
|
|
}
|
|
|
|
// All sort criteria usable with pagination, some of these criteria applies only
|
|
// to certain queries. For example sort by severity is available for CVEs but not
|
|
// for repositories
|
|
type SortCriteria string
|
|
|
|
const (
|
|
// How relevant the result is based on the user input used while searching
|
|
// Applies to: images and repositories
|
|
SortCriteriaRelevance SortCriteria = "RELEVANCE"
|
|
// Sort by the most recently created timestamp of the images
|
|
// Applies to: images and repositories
|
|
SortCriteriaUpdateTime SortCriteria = "UPDATE_TIME"
|
|
// Sort alphabetically ascending
|
|
// Applies to: images, repositories and CVEs
|
|
SortCriteriaAlphabeticAsc SortCriteria = "ALPHABETIC_ASC"
|
|
// Sort alphabetically descending
|
|
// Applies to: images, repositories and CVEs
|
|
SortCriteriaAlphabeticDsc SortCriteria = "ALPHABETIC_DSC"
|
|
// Sort from the most severe to the least severe
|
|
// Applies to: CVEs
|
|
SortCriteriaSeverity SortCriteria = "SEVERITY"
|
|
// Sort by the total number of stars given by users
|
|
// Applies to: repositories
|
|
SortCriteriaStars SortCriteria = "STARS"
|
|
// Sort by the total download count
|
|
// Applies to: repositories and images
|
|
SortCriteriaDownloads SortCriteria = "DOWNLOADS"
|
|
)
|
|
|
|
var AllSortCriteria = []SortCriteria{
|
|
SortCriteriaRelevance,
|
|
SortCriteriaUpdateTime,
|
|
SortCriteriaAlphabeticAsc,
|
|
SortCriteriaAlphabeticDsc,
|
|
SortCriteriaSeverity,
|
|
SortCriteriaStars,
|
|
SortCriteriaDownloads,
|
|
}
|
|
|
|
func (e SortCriteria) IsValid() bool {
|
|
switch e {
|
|
case SortCriteriaRelevance, SortCriteriaUpdateTime, SortCriteriaAlphabeticAsc, SortCriteriaAlphabeticDsc, SortCriteriaSeverity, SortCriteriaStars, SortCriteriaDownloads:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (e SortCriteria) String() string {
|
|
return string(e)
|
|
}
|
|
|
|
func (e *SortCriteria) UnmarshalGQL(v any) error {
|
|
str, ok := v.(string)
|
|
if !ok {
|
|
return fmt.Errorf("enums must be strings")
|
|
}
|
|
|
|
*e = SortCriteria(str)
|
|
if !e.IsValid() {
|
|
return fmt.Errorf("%s is not a valid SortCriteria", str)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (e SortCriteria) MarshalGQL(w io.Writer) {
|
|
fmt.Fprint(w, strconv.Quote(e.String()))
|
|
}
|
|
|
|
func (e *SortCriteria) UnmarshalJSON(b []byte) error {
|
|
s, err := strconv.Unquote(string(b))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return e.UnmarshalGQL(s)
|
|
}
|
|
|
|
func (e SortCriteria) MarshalJSON() ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
e.MarshalGQL(&buf)
|
|
return buf.Bytes(), nil
|
|
}
|