1package pipenv
2
3import (
4	"os"
5	"path/filepath"
6
7	"github.com/aquasecurity/go-dep-parser/pkg/pipenv"
8
9	"golang.org/x/xerrors"
10
11	"github.com/aquasecurity/fanal/analyzer"
12	"github.com/aquasecurity/fanal/analyzer/library"
13	"github.com/aquasecurity/fanal/utils"
14)
15
16func init() {
17	analyzer.RegisterAnalyzer(&pipenvLibraryAnalyzer{})
18}
19
20var requiredFiles = []string{"Pipfile.lock"}
21
22type pipenvLibraryAnalyzer struct{}
23
24func (a pipenvLibraryAnalyzer) Analyze(content []byte) (analyzer.AnalyzeReturn, error) {
25	ret, err := library.Analyze(content, pipenv.Parse)
26	if err != nil {
27		return analyzer.AnalyzeReturn{}, xerrors.Errorf("unable to parse Pipfile.lock: %w", err)
28	}
29	return ret, nil
30}
31
32func (a pipenvLibraryAnalyzer) Required(filePath string, _ os.FileInfo) bool {
33	fileName := filepath.Base(filePath)
34	return utils.StringInSlice(fileName, requiredFiles)
35}
36
37func (a pipenvLibraryAnalyzer) Name() string {
38	return library.Pipenv
39}
40