From ad3ef08546d767bc82d77b431722c654f61e5b80 Mon Sep 17 00:00:00 2001 From: felipecruz91 Date: Fri, 2 Feb 2024 13:58:24 +0100 Subject: [PATCH] Base64-decode SBOM Signed-off-by: felipecruz91 --- policy/policy_handler/local.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/policy/policy_handler/local.go b/policy/policy_handler/local.go index d3b00b3..5e774c7 100644 --- a/policy/policy_handler/local.go +++ b/policy/policy_handler/local.go @@ -2,6 +2,7 @@ package policy_handler import ( "context" + "encoding/base64" "fmt" "github.com/atomist-skills/go-skill" @@ -18,7 +19,7 @@ type SyncRequestMetadata struct { QueryResults map[edn.Keyword]edn.RawMessage `edn:"fixedQueryResults"` Packages []legacy.Package `edn:"packages"` // todo remove when no longer used User string `edn:"imgConfigUser"` // The user from the image config blob // todo remove when no longer used - SBOM *types.SBOM `edn:"sbom"` + SBOM string `edn:"sbom"` } func WithLocal() Opt { @@ -59,8 +60,16 @@ func buildLocalDataSources(ctx context.Context, req skill.RequestContext, _ goal return nil, fmt.Errorf("failed to unmarshal SyncRequest metadata: %w", err) } - if srMeta.SBOM != nil { - srMeta.QueryResults = legacy.BuildLocalEvalMocks(srMeta.SBOM, req.Log) + if srMeta.SBOM != "" { + decodedSBOM, err := base64.StdEncoding.DecodeString(srMeta.SBOM) + if err != nil { + return nil, fmt.Errorf("failed to base64-decode SBOM: %w", err) + } + var sbom *types.SBOM + if err := edn.Unmarshal(decodedSBOM, &sbom); err != nil { + return nil, fmt.Errorf("failed to unmarshal SBOM: %w", err) + } + srMeta.QueryResults = legacy.BuildLocalEvalMocks(sbom, req.Log) } fixedQueryResults := map[string][]byte{}