49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package catalog
|
|
|
|
import "context"
|
|
|
|
// Client composes signed loading, protocol validation and target filtering.
|
|
type Client struct {
|
|
loader *Loader
|
|
parser Parser
|
|
target Target
|
|
}
|
|
|
|
// NewClient creates the formal Catalog loading path. Protocol validation is
|
|
// installed on Loader so invalid remote data cannot replace the usable cache.
|
|
func NewClient(
|
|
verifier Verifier,
|
|
fetcher Fetcher,
|
|
cache Cache,
|
|
target Target,
|
|
) *Client {
|
|
parser := Parser{ExpectedChannel: target.Channel}
|
|
return &Client{
|
|
loader: NewLoader(verifier, fetcher, cache, parser),
|
|
parser: parser,
|
|
target: target,
|
|
}
|
|
}
|
|
|
|
// Load returns a verified, validated and target-filtered Catalog.
|
|
func (client *Client) Load(ctx context.Context) (Catalog, error) {
|
|
result, err := client.loader.Load(ctx)
|
|
if err != nil {
|
|
return Catalog{}, err
|
|
}
|
|
manifest, err := client.parser.Parse(result.Document)
|
|
if err != nil {
|
|
return Catalog{}, err
|
|
}
|
|
entries, err := Filter(manifest, client.target)
|
|
if err != nil {
|
|
return Catalog{}, err
|
|
}
|
|
return Catalog{
|
|
Manifest: manifest,
|
|
Entries: entries,
|
|
Source: result.Source,
|
|
Warning: result.Warning,
|
|
}, nil
|
|
}
|