Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for SPDX v2.3 #353

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
71a5fe7
updating schemas but has errors Signed-off-by: Carolina Oliveira <612…
CarolinaOliiveira Sep 2, 2024
66151c8
CycloneDX.Spdx - json working Signed-of-by: Carolina Oliveira <612927…
CarolinaOliiveira Sep 2, 2024
4212c69
spdx xml Serialization and validation Signed-of-by: Carolina Oliveira…
CarolinaOliiveira Sep 3, 2024
7f0334e
tests Signed-off-by: Carolina Oliveira <61292734+CarolinaOliiveira@us…
CarolinaOliiveira Sep 4, 2024
bb17956
tests Signed-off-by: Carolina Oliveira <61292734+CarolinaOliiveira@us…
CarolinaOliiveira Sep 4, 2024
c182ce5
remove jsonConverter Signed-off-by: Carolina Oliveira <61292734+Carol…
CarolinaOliiveira Sep 4, 2024
8b41fa8
Add new checksum algorithms
CarolinaOliiveira Sep 5, 2024
28d7f43
add PrimaryPackagePurpose Mapping to packages Signed-off-by: Carolina…
CarolinaOliiveira Sep 6, 2024
da7a994
fix Codacy Static Code Analysis issues Signed-off-by: Carolina Olivei…
CarolinaOliiveira Sep 9, 2024
65c17d3
rename dir to v2_3
CarolinaOliiveira Sep 9, 2024
fd749b2
Fix codacy issues Signed-off-by: Carolina Oliveira <61292734+Carolina…
CarolinaOliiveira Sep 9, 2024
6c25d0c
Fix codacy issues Signed-off-by: Carolina Oliveira <61292734+Carolin…
CarolinaOliiveira Sep 9, 2024
402b131
fix indentation File.cs Signed-off-by: Carolina Oliveira <61292734+Ca…
CarolinaOliiveira Sep 9, 2024
515f464
redo file correction Signed-off-by: Carolina Oliveira <61292734+Carol…
CarolinaOliiveira Sep 9, 2024
7eada19
Fix switch default Signed-off-by: Carolina Oliveira <61292734+Carolin…
CarolinaOliiveira Sep 9, 2024
532c73c
Add spdx reference type PERSISTENT_ID and mapping to CDX Signed-off-b…
CarolinaOliiveira Sep 9, 2024
999f40e
remove unsused newtonsoft dependency and fix Xml serialization Signed…
CarolinaOliiveira Sep 10, 2024
d381996
Fix codacy empty default cause Signed-off-by: Carolina Oliveira <6129…
CarolinaOliiveira Sep 10, 2024
ea3da9c
Fix codacy empty default clauses Signed-off-by: Carolina Oliveira <61…
CarolinaOliiveira Sep 10, 2024
99f7966
Fix codacy comparison to null Signed-off-by: Carolina Oliveira <61292…
CarolinaOliiveira Sep 10, 2024
65c6445
Merge remote-tracking branch 'upstream/main' into update-Spdx-v2.3
CarolinaOliiveira Sep 18, 2024
9ed77e2
Added unit tests Signed-off-by: Carolina Oliveira <61292734+CarolinaO…
CarolinaOliiveira Sep 20, 2024
b6e901d
Fix codacy issueSigned-off-by: Carolina Oliveira <61292734+CarolinaOl…
CarolinaOliiveira Sep 20, 2024
e412eee
remove Homepage default NOASSERTION Signed-off-by: Carolina Oliveira …
CarolinaOliiveira Sep 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,102 +1,102 @@
// This file is part of CycloneDX Library for .NET
//
// Licensed under the Apache License, Version 2.0 (the “License”);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an “AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) OWASP Foundation. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using CycloneDX.Models;
namespace CycloneDX.Spdx.Interop.Helpers
{
public static class Creators
{
public static List<string> GetSpdxCreators(this Bom bom)
{
var creators = new List<string>();
if (bom.Metadata?.Tools?.Tools != null)
{
foreach (var tool in bom.Metadata.Tools.Tools)
{
creators.Add($"Tool: {tool.Name}-{tool.Version}");
}
}
if (bom.Metadata?.Authors != null)
{
var orgs = bom.Metadata.Properties?.GetSpdxElements(PropertyTaxonomy.CREATION_INFO_LICENSE_CREATORS_ORGANIZATIONS) ?? new List<string>();
foreach (var author in bom.Metadata.Authors)
{
if (orgs.Contains(author.Name))
{
creators.Add($"Organization: {author.Name} ({author.Email})");
}
else
{
creators.Add($"Person: {author.Name} ({author.Email})");
}
}
}
return creators.Count == 0 ? null : creators;
}
public static void AddSpdxCreators(this Bom bom, List<string> creators)
{
if (creators != null)
{
var toolRegex = new Regex(@"Tool: (?<name>.*)-(?<version>.*)");
var nonToolRegex = new Regex(@"(Person|Organization): (?<name>.*) \((?<email>.*)\)");
foreach (var creator in creators)
{
var toolMatch = toolRegex.Match(creator);
if (toolMatch.Success)
{
if (bom.Metadata == null) { bom.Metadata = new Metadata(); }
#pragma warning disable 618
if (bom.Metadata?.Tools?.Tools == null)
{
bom.Metadata.Tools = new ToolChoices { Tools = new List<Tool>() };
}
bom.Metadata.Tools.Tools.Add(new Tool {
Name = toolMatch.Groups["name"].ToString(),
Version = toolMatch.Groups["version"].ToString(),
});
#pragma warning restore 618
}
else
{
var nonToolMatch = nonToolRegex.Match(creator);
if (nonToolMatch.Success)
{
if (bom.Metadata.Authors == null) { bom.Metadata.Authors = new List<OrganizationalContact>(); }
bom.Metadata.Authors.Add(new OrganizationalContact
{
Name = nonToolMatch.Groups["name"].ToString(),
Email = nonToolMatch.Groups["email"].ToString(),
});
if (creator.StartsWith("Organization:"))
{
bom.Metadata.Properties.AddSpdxElement(PropertyTaxonomy.CREATION_INFO_LICENSE_CREATORS_ORGANIZATIONS, nonToolMatch.Groups["name"].ToString());
}
}
}
}
}
}
}
}
// This file is part of CycloneDX Library for .NET
//
// Licensed under the Apache License, Version 2.0 (the “License”);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an “AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) OWASP Foundation. All Rights Reserved.

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using CycloneDX.Models;

namespace CycloneDX.Spdx.Interop.Helpers
{
public static class Creators
{
public static List<string> GetSpdxCreators(this Bom bom)
{
var creators = new List<string>();

if (bom.Metadata?.Tools?.Tools != null)
{
foreach (var tool in bom.Metadata.Tools.Tools)
{
creators.Add($"Tool: {tool.Name}-{tool.Version}");
}
}

if (bom.Metadata?.Authors != null)
{
var orgs = bom.Metadata.Properties?.GetSpdxElements(PropertyTaxonomy.CREATION_INFO_LICENSE_CREATORS_ORGANIZATIONS) ?? new List<string>();
foreach (var author in bom.Metadata.Authors)
{
if (orgs.Contains(author.Name))
{
creators.Add($"Organization: {author.Name} ({author.Email})");
}
else
{
creators.Add($"Person: {author.Name} ({author.Email})");
}
}
}

return creators.Count == 0 ? null : creators;
}

public static void AddSpdxCreators(this Bom bom, List<string> creators)
{
if (creators != null)
{
var toolRegex = new Regex(@"Tool: (?<name>.*)-(?<version>.*)");
var nonToolRegex = new Regex(@"(Person|Organization): (?<name>.*) \((?<email>.*)\)");
foreach (var creator in creators)
{
var toolMatch = toolRegex.Match(creator);
if (toolMatch.Success)
{
if (bom.Metadata == null) { bom.Metadata = new Metadata(); }
#pragma warning disable 618
if (bom.Metadata?.Tools?.Tools == null)
{
bom.Metadata.Tools = new ToolChoices { Tools = new List<Tool>() };
}
bom.Metadata.Tools.Tools.Add(new Tool {
Name = toolMatch.Groups["name"].ToString(),
Version = toolMatch.Groups["version"].ToString(),
});
#pragma warning restore 618
}
else
{
var nonToolMatch = nonToolRegex.Match(creator);
if (nonToolMatch.Success)
{
if (bom.Metadata.Authors == null) { bom.Metadata.Authors = new List<OrganizationalContact>(); }
bom.Metadata.Authors.Add(new OrganizationalContact
{
Name = nonToolMatch.Groups["name"].ToString(),
Email = nonToolMatch.Groups["email"].ToString(),
});
if (creator.StartsWith("Organization:"))
{
bom.Metadata.Properties.AddSpdxElement(PropertyTaxonomy.CREATION_INFO_LICENSE_CREATORS_ORGANIZATIONS, nonToolMatch.Groups["name"].ToString());
}
}
}
}
}
}
}
}
Loading