Skip to content

Commit 327a30a

Browse files
mcombuechengoneall
andauthored
feat: add supplier to SPDX documents (#79)
When enriching with ecosyste.ms, add the supplier of a package to an SPDX document. Closes #76. Co-authored-by: Gary O'Neall <gary@sourceauditor.com>
1 parent c51c0c9 commit 327a30a

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

lib/ecosystems/enrich_spdx.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/package-url/packageurl-go"
2525
"github.com/rs/zerolog"
2626
"github.com/spdx/tools-golang/spdx"
27+
"github.com/spdx/tools-golang/spdx/v2/common"
2728
"github.com/spdx/tools-golang/spdx/v2/v2_3"
2829

2930
"github.com/snyk/parlay/ecosystems/packages"
@@ -53,6 +54,7 @@ func enrichSPDX(bom *spdx.Document, logger *zerolog.Logger) {
5354
enrichSPDXDescription(pkg, pkgData)
5455
enrichSPDXLicense(pkg, pkgData)
5556
enrichSPDXHomepage(pkg, pkgData)
57+
enrichSPDXSupplier(pkg, pkgData)
5658
}
5759
}
5860

@@ -70,6 +72,20 @@ func extractPurl(pkg *v2_3.Package) (*packageurl.PackageURL, error) {
7072
return nil, errors.New("no purl found on SPDX package")
7173
}
7274

75+
func enrichSPDXSupplier(pkg *v2_3.Package, data *packages.Package) {
76+
if data.RepoMetadata != nil {
77+
meta := *data.RepoMetadata
78+
if ownerRecord, ok := meta["owner_record"].(map[string]interface{}); ok {
79+
if name, ok := ownerRecord["name"].(string); ok {
80+
pkg.PackageSupplier = &common.Supplier{
81+
SupplierType: "Organization",
82+
Supplier: name,
83+
}
84+
}
85+
}
86+
}
87+
}
88+
7389
func enrichSPDXLicense(pkg *v2_3.Package, data *packages.Package) {
7490
if len(data.NormalizedLicenses) == 1 {
7591
pkg.PackageLicenseConcluded = data.NormalizedLicenses[0]

lib/ecosystems/enrich_spdx_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ func TestEnrichSBOM_SPDX(t *testing.T) {
4141
"BSD-3-Clause",
4242
},
4343
"homepage": "https://github.com/spdx/tools-golang",
44+
"repo_metadata": map[string]interface{}{
45+
"owner_record": map[string]interface{}{
46+
"name": "Acme Corp",
47+
},
48+
},
4449
})
4550
})
4651

@@ -70,6 +75,8 @@ func TestEnrichSBOM_SPDX(t *testing.T) {
7075
assert.Equal(t, "description", pkgs[0].PackageDescription)
7176
assert.Equal(t, "BSD-3-Clause", pkgs[0].PackageLicenseConcluded)
7277
assert.Equal(t, "https://github.com/spdx/tools-golang", pkgs[0].PackageHomePage)
78+
assert.Equal(t, "Organization", pkgs[0].PackageSupplier.SupplierType)
79+
assert.Equal(t, "Acme Corp", pkgs[0].PackageSupplier.Supplier)
7380

7481
httpmock.GetTotalCallCount()
7582
calls := httpmock.GetCallCountInfo()

0 commit comments

Comments
 (0)