client

package
Version: v0.0.0-...-bf368c5 Latest Latest
Warning

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

Go to latest
Published: Jul 24, 2020 License: BSD-3-Clause Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNoRootKeys       = errors.New("tuf: no root keys found in local meta store")
	ErrInsufficientKeys = errors.New("tuf: insufficient keys to meet threshold")
)
View Source
var DefaultHTTPRetries = &HTTPRemoteRetries{
	Delay: time.Second,
	Total: 10 * time.Second,
}

Functions

func IsLatestSnapshot

func IsLatestSnapshot(err error) bool

func IsNotFound

func IsNotFound(err error) bool

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

func (c *Client) Init(rootKeys []*data.Key, threshold int) error

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) Targets

func (c *Client) Targets() (data.Files, error)

Targets returns the complete list of available targets.

func (*Client) Update

func (c *Client) Update() (data.Files, 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 Destination interface {
	io.Writer
	Delete() error
}

type ErrDecodeFailed

type ErrDecodeFailed struct {
	File string
	Err  error
}

func (ErrDecodeFailed) Error

func (e ErrDecodeFailed) Error() string

type ErrDownloadFailed

type ErrDownloadFailed struct {
	File string
	Err  error
}

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

type ErrMetaTooLarge struct {
	Name string
	Size int64
}

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

type ErrWrongSize struct {
	File     string
	Actual   int64
	Expected int64
}

func (ErrWrongSize) Error

func (e ErrWrongSize) Error() string

type HTTPRemoteOptions

type HTTPRemoteOptions struct {
	MetadataPath string
	TargetsPath  string
	UserAgent    string
	Retries      *HTTPRemoteRetries
}

type HTTPRemoteRetries

type HTTPRemoteRetries struct {
	Delay time.Duration
	Total time.Duration
}

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 FileLocalStore

func FileLocalStore(path string) (LocalStore, error)

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) (RemoteStore, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto
y or Y : Canonical URL