Integrate validated catalog loading (T-201)
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user