Documentation ¶
Index ¶
- Variables
- func IsLatestSnapshot(err error) bool
- func IsNotFound(err error) bool
- type Client
- func (c *Client) Download(name string, dest Destination) (err error)
- func (c *Client) Init(rootKeys []*data.Key, threshold int) error
- func (c *Client) Target(name string) (data.TargetFileMeta, error)
- func (c *Client) Targets() (data.TargetFiles, error)
- func (c *Client) Update() (data.TargetFiles, error)
- type Destination
- type ErrDecodeFailed
- type ErrDownloadFailed
- type ErrInvalidURL
- type ErrLatestSnapshot
- type ErrMetaTooLarge
- type ErrMissingRemoteMetadata
- type ErrNotFound
- type ErrUnknownTarget
- type ErrWrongSize
- type HTTPRemoteOptions
- type HTTPRemoteRetries
- type LocalStore
- type RemoteStore
Constants ¶
This section is empty.
Variables ¶
var ( ErrNoRootKeys = errors.New("tuf: no root keys found in local meta store") ErrInsufficientKeys = errors.New("tuf: insufficient keys to meet threshold") )
var DefaultHTTPRetries = &HTTPRemoteRetries{ Delay: time.Second, Total: 10 * time.Second, }
Functions ¶
func IsLatestSnapshot ¶
func IsNotFound ¶
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client provides methods for fetching updates from a remote repository and downloading remote target files.
func NewClient ¶
func NewClient(local LocalStore, remote RemoteStore) *Client
func (*Client) Download ¶
func (c *Client) Download(name string, dest Destination) (err error)
Download downloads the given target file from remote storage into dest.
dest will be deleted and an error returned in the following situations:
- The target does not exist in the local targets.json
- The target does not exist in remote storage
- Metadata cannot be generated for the downloaded data
- Generated metadata does not match local metadata for the given file
func (*Client) Init ¶
Init initializes a local repository.
The latest root.json is fetched from remote storage, verified using rootKeys and threshold, and then saved in local storage. It is expected that rootKeys were securely distributed with the software being updated.
func (*Client) Target ¶
func (c *Client) Target(name string) (data.TargetFileMeta, error)
Target returns the target metadata for a specific target if it exists. If it does not, ErrNotFound will be returned.
func (*Client) Targets ¶
func (c *Client) Targets() (data.TargetFiles, error)
Targets returns the complete list of available targets.
func (*Client) Update ¶
func (c *Client) Update() (data.TargetFiles, error)
Update downloads and verifies remote metadata and returns updated targets.
It performs the update part of "The client application" workflow from section 5.1 of the TUF spec:
https://github.com/theupdateframework/tuf/blob/v0.9.9/docs/tuf-spec.txt#L714
type Destination ¶
type ErrDecodeFailed ¶
func (ErrDecodeFailed) Error ¶
func (e ErrDecodeFailed) Error() string
type ErrDownloadFailed ¶
func (ErrDownloadFailed) Error ¶
func (e ErrDownloadFailed) Error() string
type ErrInvalidURL ¶
type ErrInvalidURL struct {
URL string
}
func (ErrInvalidURL) Error ¶
func (e ErrInvalidURL) Error() string
type ErrLatestSnapshot ¶
type ErrLatestSnapshot struct {
Version int
}
func (ErrLatestSnapshot) Error ¶
func (e ErrLatestSnapshot) Error() string
type ErrMetaTooLarge ¶
func (ErrMetaTooLarge) Error ¶
func (e ErrMetaTooLarge) Error() string
type ErrMissingRemoteMetadata ¶
type ErrMissingRemoteMetadata struct {
Name string
}
func (ErrMissingRemoteMetadata) Error ¶
func (e ErrMissingRemoteMetadata) Error() string
type ErrNotFound ¶
type ErrNotFound struct {
File string
}
func (ErrNotFound) Error ¶
func (e ErrNotFound) Error() string
type ErrUnknownTarget ¶
type ErrUnknownTarget struct {
Name string
}
func (ErrUnknownTarget) Error ¶
func (e ErrUnknownTarget) Error() string
type ErrWrongSize ¶
func (ErrWrongSize) Error ¶
func (e ErrWrongSize) Error() string
type HTTPRemoteOptions ¶
type HTTPRemoteOptions struct { MetadataPath string TargetsPath string UserAgent string Retries *HTTPRemoteRetries }
type LocalStore ¶
type LocalStore interface { // GetMeta returns top-level metadata from local storage. The keys are // in the form `ROLE.json`, with ROLE being a valid top-level role. GetMeta() (map[string]json.RawMessage, error) // SetMeta persists the given top-level metadata in local storage, the // name taking the same format as the keys returned by GetMeta. SetMeta(name string, meta json.RawMessage) error }
LocalStore is local storage for downloaded top-level metadata.
func MemoryLocalStore ¶
func MemoryLocalStore() LocalStore
type RemoteStore ¶
type RemoteStore interface { // GetMeta downloads the given metadata from remote storage. // // `name` is the filename of the metadata (e.g. "root.json") // // `err` is ErrNotFound if the given file does not exist. // // `size` is the size of the stream, -1 indicating an unknown length. GetMeta(name string) (stream io.ReadCloser, size int64, err error) // GetTarget downloads the given target file from remote storage. // // `path` is the path of the file relative to the root of the remote // targets directory (e.g. "/path/to/file.txt"). // // `err` is ErrNotFound if the given file does not exist. // // `size` is the size of the stream, -1 indicating an unknown length. GetTarget(path string) (stream io.ReadCloser, size int64, err error) }
RemoteStore downloads top-level metadata and target files from a remote repository.
func HTTPRemoteStore ¶
func HTTPRemoteStore(baseURL string, opts *HTTPRemoteOptions, client *http.Client) (RemoteStore, error)