mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-29 01:16:12 -05:00
56 lines
2.0 KiB
Go
56 lines
2.0 KiB
Go
/*
|
|
Copyright (c) Edgeless Systems GmbH
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
package fetcher
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/edgelesssys/constellation/v2/internal/api/configapi"
|
|
)
|
|
|
|
// ConfigAPIFetcher fetches config API resources without authentication.
|
|
type ConfigAPIFetcher struct {
|
|
*fetcher
|
|
}
|
|
|
|
// NewConfigAPIFetcher returns a new Fetcher.
|
|
func NewConfigAPIFetcher() *ConfigAPIFetcher {
|
|
return &ConfigAPIFetcher{newFetcher()}
|
|
}
|
|
|
|
// NewConfigAPIFetcherWithClient returns a new Fetcher with custom http client.
|
|
func NewConfigAPIFetcherWithClient(client HTTPClient) *ConfigAPIFetcher {
|
|
return &ConfigAPIFetcher{newFetcherWith(client)}
|
|
}
|
|
|
|
// FetchAzureSEVSNPVersionList fetches the version list information from the config API.
|
|
func (f *ConfigAPIFetcher) FetchAzureSEVSNPVersionList(ctx context.Context, attestation configapi.AzureSEVSNPVersionList) (configapi.AzureSEVSNPVersionList, error) {
|
|
return fetch(ctx, f.httpc, attestation)
|
|
}
|
|
|
|
// FetchAzureSEVSNPVersion fetches the version information from the config API.
|
|
func (f *ConfigAPIFetcher) FetchAzureSEVSNPVersion(ctx context.Context, attestation configapi.AzureSEVSNPVersionGet) (configapi.AzureSEVSNPVersionGet, error) {
|
|
// TODO(elchead): follow-up PR for AB#3045 to check signature (sigstore.VerifySignature)
|
|
return fetch(ctx, f.httpc, attestation)
|
|
}
|
|
|
|
// FetchLatestAzureSEVSNPVersion returns the latest versions of the given type.
|
|
func (f *ConfigAPIFetcher) FetchLatestAzureSEVSNPVersion(ctx context.Context) (res configapi.AzureSEVSNPVersion, err error) {
|
|
var versions configapi.AzureSEVSNPVersionList
|
|
versions, err = f.FetchAzureSEVSNPVersionList(ctx, versions)
|
|
if err != nil {
|
|
return res, fmt.Errorf("fetching versions list: %w", err)
|
|
}
|
|
get := configapi.AzureSEVSNPVersionGet{Version: versions[0]} // get latest version (as sorted reversely alphanumerically)
|
|
get, err = f.FetchAzureSEVSNPVersion(ctx, get)
|
|
if err != nil {
|
|
return res, fmt.Errorf("failed fetching version: %w", err)
|
|
}
|
|
return get.AzureSEVSNPVersion, nil
|
|
}
|