Skip to content

Commit bd1fdfb

Browse files
committed
feat: add support for extracting Drupal packages from composer.lock files
1 parent 38dd02d commit bd1fdfb

4 files changed

Lines changed: 368 additions & 2 deletions

File tree

extractor/filesystem/language/php/composerlock/composerlock.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type composerPackage struct {
4040
Dist struct {
4141
Reference string `json:"reference"`
4242
} `json:"dist"`
43+
Extra map[string]any `json:"extra"`
4344
}
4445

4546
type composerLock struct {
@@ -87,10 +88,16 @@ func (e Extractor) Extract(ctx context.Context, input *filesystem.ScanInput) (in
8788
)
8889

8990
for _, composerPackage := range parsedLockfile.Packages {
91+
purlType := purl.TypeComposer
92+
93+
if _, ok := composerPackage.Extra["drupal"]; ok {
94+
purlType = purl.TypeDrupal
95+
}
96+
9097
packages = append(packages, &extractor.Package{
9198
Name: composerPackage.Name,
9299
Version: composerPackage.Version,
93-
PURLType: purl.TypeComposer,
100+
PURLType: purlType,
94101
Locations: []string{input.Path},
95102
SourceCode: &extractor.SourceCodeIdentifier{
96103
Commit: composerPackage.Dist.Reference,
@@ -102,10 +109,16 @@ func (e Extractor) Extract(ctx context.Context, input *filesystem.ScanInput) (in
102109
}
103110

104111
for _, composerPackage := range parsedLockfile.PackagesDev {
112+
purlType := purl.TypeComposer
113+
114+
if _, ok := composerPackage.Extra["drupal"]; ok {
115+
purlType = purl.TypeDrupal
116+
}
117+
105118
packages = append(packages, &extractor.Package{
106119
Name: composerPackage.Name,
107120
Version: composerPackage.Version,
108-
PURLType: purl.TypeComposer,
121+
PURLType: purlType,
109122
Locations: []string{input.Path},
110123
SourceCode: &extractor.SourceCodeIdentifier{
111124
Commit: composerPackage.Dist.Reference,

extractor/filesystem/language/php/composerlock/composerlock_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,50 @@ func TestExtractor_Extract(t *testing.T) {
198198
},
199199
},
200200
},
201+
{
202+
Name: "drupal_packages",
203+
InputConfig: extracttest.ScanInputMockConfig{
204+
Path: "testdata/drupal-packages.json",
205+
},
206+
WantPackages: []*extractor.Package{
207+
{
208+
Name: "drupal/core",
209+
Version: "10.4.5",
210+
PURLType: purl.TypeComposer,
211+
Locations: []string{"testdata/drupal-packages.json"},
212+
SourceCode: &extractor.SourceCodeIdentifier{
213+
Commit: "5247dbaa65b42b601058555f4a8b2bd541f5611f",
214+
},
215+
Metadata: osv.DepGroupMetadata{
216+
DepGroupVals: []string{},
217+
},
218+
},
219+
{
220+
Name: "drupal/tfa",
221+
Version: "2.0.0-alpha4",
222+
PURLType: purl.TypeDrupal,
223+
Locations: []string{"testdata/drupal-packages.json"},
224+
SourceCode: &extractor.SourceCodeIdentifier{
225+
Commit: "2.0.0-alpha4",
226+
},
227+
Metadata: osv.DepGroupMetadata{
228+
DepGroupVals: []string{},
229+
},
230+
},
231+
{
232+
Name: "theseer/tokenizer",
233+
Version: "1.1.3",
234+
PURLType: purl.TypeComposer,
235+
Locations: []string{"testdata/drupal-packages.json"},
236+
SourceCode: &extractor.SourceCodeIdentifier{
237+
Commit: "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
238+
},
239+
Metadata: osv.DepGroupMetadata{
240+
DepGroupVals: []string{},
241+
},
242+
},
243+
},
244+
},
201245
}
202246

203247
for _, tt := range tests {

0 commit comments

Comments
 (0)