vet/pkg/scanner/utils.go
abhisek ce10afab06
Add auth persistence
Add parser and models

Add parser in scanner

Add enrichment

Use pointer for package ref

Add work queue for concurrent enrichment

Update enrich

Misc refactoring

Update README

Refactored lockfile parsers

Add analyzers

Update json dumper

Refactor scan
2023-01-02 16:13:41 +05:30

65 lines
1.4 KiB
Go

package scanner
import (
"os"
"path/filepath"
"github.com/safedep/vet/pkg/common/logger"
"github.com/safedep/vet/pkg/models"
"github.com/safedep/vet/pkg/parser"
)
func scanDirectoryForManifests(dir string) ([]*models.PackageManifest, error) {
var manifests []*models.PackageManifest
err := filepath.WalkDir(dir, func(path string, info os.DirEntry, err error) error {
if err != nil {
return err
}
if info.IsDir() && info.Name() == ".git" {
return filepath.SkipDir
}
path, err = filepath.Abs(path)
if err != nil {
return err
}
p, err := parser.FindParser(path, "")
if err == nil {
// We have a parseable file
manifest, err := p.Parse(path)
if err != nil {
logger.Warnf("Failed to parse: %s due to %v", path, err)
} else {
manifests = append(manifests, &manifest)
}
}
return nil
})
return manifests, err
}
func scanLockfilesForManifests(lockfiles []string, lockfileAs string) ([]*models.PackageManifest, error) {
var manifests []*models.PackageManifest
for _, lf := range lockfiles {
p, err := parser.FindParser(lf, lockfileAs)
if err != nil {
logger.Warnf("Failed to parse %s as %s", lf, lockfileAs)
continue
}
manifest, err := p.Parse(lf)
if err != nil {
logger.Warnf("Failed to parse: %s due to %v", lf, err)
continue
}
manifests = append(manifests, &manifest)
}
return manifests, nil
}