From 5a51bd4b02798d243d68a58b7f5b8c8ce185abf8 Mon Sep 17 00:00:00 2001 From: andreas hilti <69210561+andreas-hilti@users.noreply.github.com> Date: Sat, 31 Aug 2024 20:43:06 +0200 Subject: [PATCH 1/2] Add deprecations for component.author and metatada.manufacture Signed-off-by: andreas hilti <69210561+andreas-hilti@users.noreply.github.com> --- src/CycloneDX.Core/BomUtils.cs | 9 ++++++++- src/CycloneDX.Core/Models/Component.cs | 1 + src/CycloneDX.Core/Models/Metadata.cs | 1 + .../Converters/v2_2/Helpers/CycloneDXBomHelpers.cs | 4 ++++ .../Converters/v2_2/Helpers/SpdxDocumentHelpers.cs | 3 ++- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/CycloneDX.Core/BomUtils.cs b/src/CycloneDX.Core/BomUtils.cs index 54c4d87e..d8df3994 100644 --- a/src/CycloneDX.Core/BomUtils.cs +++ b/src/CycloneDX.Core/BomUtils.cs @@ -87,7 +87,9 @@ internal static Bom CopyBomAndDowngrade(Bom bom) EnumerateAllComponents(bomCopy, (component) => { + #pragma warning disable 618 component.Author = null; + #pragma warning restore 618 component.MimeType = null; component.Supplier = null; component.Swid = null; @@ -477,7 +479,12 @@ public static void EnumerateAllLicenseChoices(Bom bom, Action cal public static void EnumerateAllOrganizationalEntity(Bom bom, Action callback) { - if (bom.Metadata?.Manufacture != null) callback(bom.Metadata.Manufacture); + #pragma warning disable 618 + if (bom.Metadata?.Manufacture != null) + { + callback(bom.Metadata.Manufacture); + } + #pragma warning restore 618 if (bom.Metadata?.Supplier != null) callback(bom.Metadata.Supplier); if (bom.Annotations != null) diff --git a/src/CycloneDX.Core/Models/Component.cs b/src/CycloneDX.Core/Models/Component.cs index 0ea071f1..9d3d818f 100644 --- a/src/CycloneDX.Core/Models/Component.cs +++ b/src/CycloneDX.Core/Models/Component.cs @@ -108,6 +108,7 @@ public enum ComponentScope public List Authors { get; set; } public bool ShouldSerializeAuthors() { return Authors?.Count > 0; } + [Obsolete("This will be removed in a future version. Use @.authors or @.manufacturer instead.")] [XmlElement("author")] [ProtoMember(5)] public string Author { get; set; } diff --git a/src/CycloneDX.Core/Models/Metadata.cs b/src/CycloneDX.Core/Models/Metadata.cs index dc081e2d..1611f9c4 100644 --- a/src/CycloneDX.Core/Models/Metadata.cs +++ b/src/CycloneDX.Core/Models/Metadata.cs @@ -79,6 +79,7 @@ public List ProtobufTools public OrganizationalEntity Manufacturer { get; set; } public bool ShouldSerializeManufacturer() { return Manufacturer != null; } + [Obsolete("This will be removed in a future version.Use the @.component.manufacturer instead.")] [XmlElement("manufacture")] [ProtoMember(5)] public OrganizationalEntity Manufacture { get; set; } diff --git a/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/CycloneDXBomHelpers.cs b/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/CycloneDXBomHelpers.cs index d654606c..6ae485ba 100644 --- a/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/CycloneDXBomHelpers.cs +++ b/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/CycloneDXBomHelpers.cs @@ -131,10 +131,14 @@ public static void AddSpdxPackages(this Bom bom, SpdxDocument doc) var originatorMatch = originatorRegex.Match(package.Originator); if (originatorMatch.Success) { + #pragma warning disable 618 component.Author = originatorMatch.Groups["name"].ToString(); + #pragma warning restore 618 if (package.Originator.ToLowerInvariant().StartsWith("organization:")) { + #pragma warning disable 618 component.Properties.AddSpdxElement(PropertyTaxonomy.PACKAGE_ORIGINATOR_ORGANIZATION, component.Author); + #pragma warning restore 618 } component.Properties.AddSpdxElement(PropertyTaxonomy.PACKAGE_ORIGINATOR_EMAIL, originatorMatch.Groups["email"].ToString()); } diff --git a/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/SpdxDocumentHelpers.cs b/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/SpdxDocumentHelpers.cs index f1fc6d29..682a3503 100644 --- a/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/SpdxDocumentHelpers.cs +++ b/src/CycloneDX.Spdx.Interop/Converters/v2_2/Helpers/SpdxDocumentHelpers.cs @@ -136,6 +136,7 @@ public static void AddCycloneDXComponents(this SpdxDocument doc, Bom bom) // Package Originator package.Originator = component.Properties?.GetSpdxElement(PropertyTaxonomy.PACKAGE_ORIGINATOR) ?? "NOASSERTION"; + #pragma warning disable 618 if (component.Author != null) { if (component.Author == component.Properties?.GetSpdxElement(PropertyTaxonomy.PACKAGE_ORIGINATOR_ORGANIZATION)) @@ -147,7 +148,7 @@ public static void AddCycloneDXComponents(this SpdxDocument doc, Bom bom) package.Originator = $"Person: {component.Author} ({component.Properties?.GetSpdxElement(PropertyTaxonomy.PACKAGE_ORIGINATOR_EMAIL) ?? ""})"; } } - + #pragma warning restore 618 package.Supplier = component.Properties?.GetSpdxElement(PropertyTaxonomy.PACKAGE_SUPPLIER) ?? "NOASSERTION"; if (component.Supplier != null) { From c03f0f62afa946ee32d3f60870bb5dcd92e94665 Mon Sep 17 00:00:00 2001 From: andreas hilti <69210561+andreas-hilti@users.noreply.github.com> Date: Sun, 1 Sep 2024 18:19:48 +0200 Subject: [PATCH 2/2] Fix xml serialization for obsolete elements Signed-off-by: andreas hilti <69210561+andreas-hilti@users.noreply.github.com> --- src/CycloneDX.Core/Models/Component.cs | 11 ++++++++++- src/CycloneDX.Core/Models/Metadata.cs | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/CycloneDX.Core/Models/Component.cs b/src/CycloneDX.Core/Models/Component.cs index 9d3d818f..67d0ffd0 100644 --- a/src/CycloneDX.Core/Models/Component.cs +++ b/src/CycloneDX.Core/Models/Component.cs @@ -109,10 +109,19 @@ public enum ComponentScope public bool ShouldSerializeAuthors() { return Authors?.Count > 0; } [Obsolete("This will be removed in a future version. Use @.authors or @.manufacturer instead.")] - [XmlElement("author")] + [XmlIgnore] [ProtoMember(5)] public string Author { get; set; } + #pragma warning disable 618 + [EditorBrowsable(EditorBrowsableState.Never)] + [XmlElement("author")] + [JsonIgnore] + public string Author_Xml { get { return Author; } set { Author = value; } } + public bool ShouldSerializeAuthor_Xml() { return Author != null; } + #pragma warning restore 618 + + [XmlElement("publisher")] [ProtoMember(6)] public string Publisher { get; set; } diff --git a/src/CycloneDX.Core/Models/Metadata.cs b/src/CycloneDX.Core/Models/Metadata.cs index 1611f9c4..05b3a3c6 100644 --- a/src/CycloneDX.Core/Models/Metadata.cs +++ b/src/CycloneDX.Core/Models/Metadata.cs @@ -80,10 +80,19 @@ public List ProtobufTools public bool ShouldSerializeManufacturer() { return Manufacturer != null; } [Obsolete("This will be removed in a future version.Use the @.component.manufacturer instead.")] - [XmlElement("manufacture")] + [XmlIgnore] [ProtoMember(5)] public OrganizationalEntity Manufacture { get; set; } + #pragma warning disable 618 + [EditorBrowsable(EditorBrowsableState.Never)] + [XmlElement("manufacture")] + [JsonIgnore] + public OrganizationalEntity Manufacture_Xml { get { return Manufacture; } set { Manufacture = value; } } + public bool ShouldSerializeManufacture_Xml() { return Manufacture != null; } + #pragma warning restore 618 + + [XmlElement("supplier")] [ProtoMember(6)] public OrganizationalEntity Supplier { get; set; }