From d401167aace04f42125d58eeac2e0a5053ad4e29 Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Mon, 4 Oct 2021 10:07:48 -0400 Subject: [PATCH 01/14] add unique namespace identifier Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 4 +++- internal/presenter/packages/spdx_json_presenter_test.go | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 0e34f4d9c3a..657440d74ba 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -12,6 +12,7 @@ import ( "github.com/anchore/syft/internal/version" "github.com/anchore/syft/syft/pkg" "github.com/anchore/syft/syft/source" + "github.com/google/uuid" ) // SPDXJsonPresenter is a SPDX presentation object for the syft results (see https://github.com/spdx/spdx-spec) @@ -50,6 +51,7 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx } packages, files, relationships := newSPDXJsonElements(catalog) + uuid := uuid.Must(uuid.NewRandom()) return spdx22.Document{ Element: spdx22.Element{ @@ -67,7 +69,7 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx LicenseListVersion: spdxlicense.Version, }, DataLicense: "CC0-1.0", - DocumentNamespace: fmt.Sprintf("https://anchore.com/syft/image/%s", srcMetadata.ImageMetadata.UserInput), + DocumentNamespace: fmt.Sprintf("https://anchore.com/syft/image/%s-%s", srcMetadata.ImageMetadata.UserInput, uuid.String()), Packages: packages, Files: files, Relationships: relationships, diff --git a/internal/presenter/packages/spdx_json_presenter_test.go b/internal/presenter/packages/spdx_json_presenter_test.go index f0053fd70df..7d6a7f7381d 100644 --- a/internal/presenter/packages/spdx_json_presenter_test.go +++ b/internal/presenter/packages/spdx_json_presenter_test.go @@ -31,6 +31,10 @@ func TestSPDXJSONImagePresenter(t *testing.T) { func spdxJsonRedactor(s []byte) []byte { // each SBOM reports the time it was generated, which is not useful during snapshot testing s = regexp.MustCompile(`"created": .*`).ReplaceAll(s, []byte("redacted")) + + // each SBOM reports a unique documentNamespace when generated, this is not useful for snapshot testing + s = regexp.MustCompile(`"documentNamespace": .*`).ReplaceAll(s, []byte("redacted")) + // the license list will be updated periodically, the value here should not be directly tested in snapshot tests return regexp.MustCompile(`"licenseListVersion": .*`).ReplaceAll(s, []byte("redacted")) } From 07a171ac4f3cc793dd890e149f14482e6aee6c9f Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Mon, 4 Oct 2021 10:21:17 -0400 Subject: [PATCH 02/14] update namespace for directory path Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 657440d74ba..219ec00c1af 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io" + "strings" "time" "github.com/anchore/syft/internal" @@ -42,16 +43,19 @@ func (pres *SPDXJsonPresenter) Present(output io.Writer) error { // newSPDXJsonDocument creates and populates a new JSON document struct that follows the SPDX 2.2 spec from the given cataloging results. func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx22.Document { - var name string + uID := uuid.Must(uuid.NewRandom()) + + var name, namespace string switch srcMetadata.Scheme { case source.ImageScheme: name = srcMetadata.ImageMetadata.UserInput + namespace = strings.Trim(fmt.Sprintf("%s-%s", name, uID.String()), "-") case source.DirectoryScheme: name = srcMetadata.Path + namespace = uID.String() } packages, files, relationships := newSPDXJsonElements(catalog) - uuid := uuid.Must(uuid.NewRandom()) return spdx22.Document{ Element: spdx22.Element{ @@ -69,7 +73,7 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx LicenseListVersion: spdxlicense.Version, }, DataLicense: "CC0-1.0", - DocumentNamespace: fmt.Sprintf("https://anchore.com/syft/image/%s-%s", srcMetadata.ImageMetadata.UserInput, uuid.String()), + DocumentNamespace: fmt.Sprintf("https://anchore.com/syft/image/%s", namespace), Packages: packages, Files: files, Relationships: relationships, From 5d7a2342a27bbd6024a1a4f65f152e54ddefab92 Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Mon, 4 Oct 2021 11:36:59 -0400 Subject: [PATCH 03/14] update code organization from pr comments Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 219ec00c1af..9b3ad50ee1c 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -16,6 +16,8 @@ import ( "github.com/google/uuid" ) +var anchoreNamespace = "https://anchore.com/syft/image" + // SPDXJsonPresenter is a SPDX presentation object for the syft results (see https://github.com/spdx/spdx-spec) type SPDXJsonPresenter struct { catalog *pkg.Catalog @@ -43,18 +45,19 @@ func (pres *SPDXJsonPresenter) Present(output io.Writer) error { // newSPDXJsonDocument creates and populates a new JSON document struct that follows the SPDX 2.2 spec from the given cataloging results. func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx22.Document { - uID := uuid.Must(uuid.NewRandom()) + uniqueID := uuid.Must(uuid.NewRandom()) - var name, namespace string + var name, identifier string switch srcMetadata.Scheme { case source.ImageScheme: name = srcMetadata.ImageMetadata.UserInput - namespace = strings.Trim(fmt.Sprintf("%s-%s", name, uID.String()), "-") + identifier = strings.Trim(fmt.Sprintf("%s-%s", name, uniqueID.String()), "-") case source.DirectoryScheme: name = srcMetadata.Path - namespace = uID.String() + identifier = uniqueID.String() } + namespace := fmt.Sprintf("%s/%s", anchoreNamespace, identifier) packages, files, relationships := newSPDXJsonElements(catalog) return spdx22.Document{ @@ -73,7 +76,7 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx LicenseListVersion: spdxlicense.Version, }, DataLicense: "CC0-1.0", - DocumentNamespace: fmt.Sprintf("https://anchore.com/syft/image/%s", namespace), + DocumentNamespace: namespace, Packages: packages, Files: files, Relationships: relationships, From e2453eef50d993ead3ae2b464a5e7cd7a846bb8e Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Mon, 4 Oct 2021 11:56:26 -0400 Subject: [PATCH 04/14] update to const Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 9b3ad50ee1c..2ea768d9abc 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -16,7 +16,7 @@ import ( "github.com/google/uuid" ) -var anchoreNamespace = "https://anchore.com/syft/image" +const anchoreNamespace = "https://anchore.com/syft/image" // SPDXJsonPresenter is a SPDX presentation object for the syft results (see https://github.com/spdx/spdx-spec) type SPDXJsonPresenter struct { From e4cd02161e3392bc60fbdadd4a8961cba18cacde Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Mon, 4 Oct 2021 16:31:10 -0400 Subject: [PATCH 05/14] update identifier to be input specific with uuid Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 2ea768d9abc..a334d16dae1 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "io" - "strings" "time" "github.com/anchore/syft/internal" @@ -16,7 +15,7 @@ import ( "github.com/google/uuid" ) -const anchoreNamespace = "https://anchore.com/syft/image" +const anchoreNamespace = "https://anchore.com/syft" // SPDXJsonPresenter is a SPDX presentation object for the syft results (see https://github.com/spdx/spdx-spec) type SPDXJsonPresenter struct { @@ -51,10 +50,10 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx switch srcMetadata.Scheme { case source.ImageScheme: name = srcMetadata.ImageMetadata.UserInput - identifier = strings.Trim(fmt.Sprintf("%s-%s", name, uniqueID.String()), "-") + identifier = fmt.Sprintf("image/%s", uniqueID.String()) case source.DirectoryScheme: name = srcMetadata.Path - identifier = uniqueID.String() + identifier = fmt.Sprintf("dir/%s", uniqueID.String()) } namespace := fmt.Sprintf("%s/%s", anchoreNamespace, identifier) From 1e0ca2210668e41c129c5c6ab699abcd8fa49e5e Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 11:01:01 -0400 Subject: [PATCH 06/14] add name back into uri Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index a334d16dae1..19fec2d4674 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -50,10 +50,10 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx switch srcMetadata.Scheme { case source.ImageScheme: name = srcMetadata.ImageMetadata.UserInput - identifier = fmt.Sprintf("image/%s", uniqueID.String()) + identifier = fmt.Sprintf("image/%s-%s", name, uniqueID.String()) case source.DirectoryScheme: name = srcMetadata.Path - identifier = fmt.Sprintf("dir/%s", uniqueID.String()) + identifier = fmt.Sprintf("dir/%s-%s", name, uniqueID.String()) } namespace := fmt.Sprintf("%s/%s", anchoreNamespace, identifier) From 0675307ccc732d50c384f3d8d0d5a07b31b62f15 Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 11:38:32 -0400 Subject: [PATCH 07/14] add small clean function Signed-off-by: Christopher Angelo Phillips --- .../presenter/packages/spdx_json_presenter.go | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 19fec2d4674..60a5fc3a162 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -4,6 +4,8 @@ import ( "encoding/json" "fmt" "io" + "path" + "strings" "time" "github.com/anchore/syft/internal" @@ -49,14 +51,14 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx var name, identifier string switch srcMetadata.Scheme { case source.ImageScheme: - name = srcMetadata.ImageMetadata.UserInput - identifier = fmt.Sprintf("image/%s-%s", name, uniqueID.String()) + name = cleanSPDXName(srcMetadata.ImageMetadata.UserInput) + identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) case source.DirectoryScheme: - name = srcMetadata.Path - identifier = fmt.Sprintf("dir/%s-%s", name, uniqueID.String()) + name = cleanSPDXName(srcMetadata.Path) + identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) } - namespace := fmt.Sprintf("%s/%s", anchoreNamespace, identifier) + namespace := path.Join(anchoreNamespace, identifier) packages, files, relationships := newSPDXJsonElements(catalog) return spdx22.Document{ @@ -121,3 +123,14 @@ func newSPDXJsonElements(catalog *pkg.Catalog) ([]spdx22.Package, []spdx22.File, return packages, files, relationships } + +func cleanSPDXName(name string) string { + // remove # according to specification + name = strings.Replace(name, "#", "-", -1) + + // remove : for url construction + name = strings.Replace(name, ":", "-", -1) + + // clean relative pathing + return path.Clean(name) +} From d94f673bb07ba26ce3beb651eae29f6bd803c88e Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:05:54 -0400 Subject: [PATCH 08/14] handle edge case for relative/absolute Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 60a5fc3a162..7f35c4488d7 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -52,10 +52,16 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx switch srcMetadata.Scheme { case source.ImageScheme: name = cleanSPDXName(srcMetadata.ImageMetadata.UserInput) - identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) + if name != "" { + identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) + } + identifier = path.Join("image", fmt.Sprintf("%s", uniqueID.String())) case source.DirectoryScheme: name = cleanSPDXName(srcMetadata.Path) - identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) + if name != "" { + identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) + } + identifier = path.Join("dir", fmt.Sprintf("%s", uniqueID.String())) } namespace := path.Join(anchoreNamespace, identifier) @@ -131,6 +137,10 @@ func cleanSPDXName(name string) string { // remove : for url construction name = strings.Replace(name, ":", "-", -1) + // trim bad characters + name = strings.Trim(name, "/") + name = strings.Trim(name, ".") + // clean relative pathing return path.Clean(name) } From f68c15905c4c2313af8e86deecd14733c57be8cb Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:07:40 -0400 Subject: [PATCH 09/14] update failing snapshot Signed-off-by: Christopher Angelo Phillips --- .../snapshot/TestSPDXJSONDirectoryPresenter.golden | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden b/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden index 249517449ad..2d3d1c6238a 100644 --- a/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden +++ b/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden @@ -1,6 +1,6 @@ { "SPDXID": "SPDXRef-DOCUMENT", - "name": "/some/path", + "name": "some/path", "spdxVersion": "SPDX-2.2", "creationInfo": { "created": "2021-09-16T20:44:35.198887Z", From f1dd70a8ab7702d817bca186a95483a48db7435d Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:22:02 -0400 Subject: [PATCH 10/14] small changes Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 7f35c4488d7..60a5fc3a162 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -52,16 +52,10 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx switch srcMetadata.Scheme { case source.ImageScheme: name = cleanSPDXName(srcMetadata.ImageMetadata.UserInput) - if name != "" { - identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) - } - identifier = path.Join("image", fmt.Sprintf("%s", uniqueID.String())) + identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) case source.DirectoryScheme: name = cleanSPDXName(srcMetadata.Path) - if name != "" { - identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) - } - identifier = path.Join("dir", fmt.Sprintf("%s", uniqueID.String())) + identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) } namespace := path.Join(anchoreNamespace, identifier) @@ -137,10 +131,6 @@ func cleanSPDXName(name string) string { // remove : for url construction name = strings.Replace(name, ":", "-", -1) - // trim bad characters - name = strings.Trim(name, "/") - name = strings.Trim(name, ".") - // clean relative pathing return path.Clean(name) } From 221b808c64ed60ddbab281bd182caa83aaa9d93e Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:26:32 -0400 Subject: [PATCH 11/14] update fixture back Signed-off-by: Christopher Angelo Phillips --- .../snapshot/TestSPDXJSONDirectoryPresenter.golden | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden b/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden index 2d3d1c6238a..249517449ad 100644 --- a/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden +++ b/internal/presenter/packages/test-fixtures/snapshot/TestSPDXJSONDirectoryPresenter.golden @@ -1,6 +1,6 @@ { "SPDXID": "SPDXRef-DOCUMENT", - "name": "some/path", + "name": "/some/path", "spdxVersion": "SPDX-2.2", "creationInfo": { "created": "2021-09-16T20:44:35.198887Z", From 7587a79e8e39cad9482c4c8c9f99e119547e1b4c Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:28:59 -0400 Subject: [PATCH 12/14] add conditional after clean Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 60a5fc3a162..0a26815fd59 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -55,7 +55,11 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) case source.DirectoryScheme: name = cleanSPDXName(srcMetadata.Path) - identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) + if name != "." { + identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) + } else { + identifier = path.Join("dir", fmt.Sprintf("%s", uniqueID.String())) + } } namespace := path.Join(anchoreNamespace, identifier) From e9a475ba344787db40552c74fc98e27a6fc0dc50 Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:32:00 -0400 Subject: [PATCH 13/14] go simple fix Signed-off-by: Christopher Angelo Phillips --- internal/presenter/packages/spdx_json_presenter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index 0a26815fd59..ba6e7bf4b54 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -58,7 +58,7 @@ func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx if name != "." { identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) } else { - identifier = path.Join("dir", fmt.Sprintf("%s", uniqueID.String())) + identifier = path.Join("dir", uniqueID.String()) } } From 87c46fca7834515c70c812b0ca4e2e1a20692a49 Mon Sep 17 00:00:00 2001 From: Christopher Angelo Phillips Date: Tue, 5 Oct 2021 12:40:57 -0400 Subject: [PATCH 14/14] generalize identifier construction Signed-off-by: Christopher Angelo Phillips --- .../presenter/packages/spdx_json_presenter.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/internal/presenter/packages/spdx_json_presenter.go b/internal/presenter/packages/spdx_json_presenter.go index ba6e7bf4b54..ded9a4a65dc 100644 --- a/internal/presenter/packages/spdx_json_presenter.go +++ b/internal/presenter/packages/spdx_json_presenter.go @@ -48,18 +48,20 @@ func (pres *SPDXJsonPresenter) Present(output io.Writer) error { func newSPDXJsonDocument(catalog *pkg.Catalog, srcMetadata source.Metadata) spdx22.Document { uniqueID := uuid.Must(uuid.NewRandom()) - var name, identifier string + var name, input, identifier string switch srcMetadata.Scheme { case source.ImageScheme: name = cleanSPDXName(srcMetadata.ImageMetadata.UserInput) - identifier = path.Join("image", fmt.Sprintf("%s-%s", name, uniqueID.String())) + input = "image" case source.DirectoryScheme: name = cleanSPDXName(srcMetadata.Path) - if name != "." { - identifier = path.Join("dir", fmt.Sprintf("%s-%s", name, uniqueID.String())) - } else { - identifier = path.Join("dir", uniqueID.String()) - } + input = "dir" + } + + if name != "." { + identifier = path.Join(input, fmt.Sprintf("%s-%s", name, uniqueID.String())) + } else { + identifier = path.Join(input, uniqueID.String()) } namespace := path.Join(anchoreNamespace, identifier)