Skip to content

Commit

Permalink
add import
Browse files Browse the repository at this point in the history
  • Loading branch information
cpanato committed Mar 4, 2024
1 parent 5cad59a commit 4a04cf0
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions pkg/advisory/export.go
Expand Up @@ -2,15 +2,19 @@ package advisory

import (
"bytes"
"context"
"encoding/csv"
"fmt"
"io"
"os"
"path/filepath"

"github.com/samber/lo"
"gopkg.in/yaml.v3"

"github.com/wolfi-dev/wolfictl/pkg/configs"
v2 "github.com/wolfi-dev/wolfictl/pkg/configs/advisory/v2"
rwos "github.com/wolfi-dev/wolfictl/pkg/configs/rwfs/os"
)

type ExportOptions struct {
Expand Down Expand Up @@ -113,3 +117,51 @@ func ExportYAML(opts ExportOptions) (io.Reader, error) {

return buf, nil
}

// ImporAdvisoriesYAML import and yaml Advisories data and present as a config index struct
func ImporAdvisoriesYAML(inputData string) (tempDir string, documents *configs.Index[v2.Document], err error) {
inputAdv, err := os.ReadFile(inputData)
if err != nil {
return "", nil, fmt.Errorf("unable to create output file: %v", err)
}

yamlDocs := bytes.Split(inputAdv, []byte("\n---\n"))
// Unmarshal YAML documents
var docs []v2.Document
for _, doc := range yamlDocs {
var pkg v2.Document
err = yaml.Unmarshal(doc, &pkg)
if err != nil {
return "", nil, fmt.Errorf("unable to unmarshall input file: %v", err)
}

docs = append(docs, pkg)
}

tempDir = os.TempDir()
for _, doc := range docs {
f, err := os.Create(filepath.Join(tempDir, fmt.Sprintf("%s.advisories.yaml", doc.Name())))
if err != nil {
return "", nil, fmt.Errorf("failed to create adv file: %v", err)
}

d, err := yaml.Marshal(doc)
if err != nil {
return "", nil, fmt.Errorf("failed to marshal package %q: %v", doc.Package.Name, err)
}
_, err = f.Write(d)
if err != nil {
return "", nil, fmt.Errorf("failed save data to file: %v", err)
}

f.Close()
}

advisoryFsys := rwos.DirFS(tempDir)
advisoryDocIndices, err := v2.NewIndex(context.Background(), advisoryFsys)
if err != nil {
return "", nil, fmt.Errorf("unable to index advisory configs for directory %q: %v", tempDir, err)
}

return tempDir, advisoryDocIndices, nil
}

0 comments on commit 4a04cf0

Please sign in to comment.