eric7/CycloneDXInterface/CycloneDXUtilities.py

branch
eric7
changeset 9141
7085ece52151
parent 9122
ddf8ed8f7387
child 9146
409d93549d61
--- a/eric7/CycloneDXInterface/CycloneDXUtilities.py	Wed Jun 08 19:13:35 2022 +0200
+++ b/eric7/CycloneDXInterface/CycloneDXUtilities.py	Thu Jun 09 16:13:18 2022 +0200
@@ -17,7 +17,10 @@
 
 from packageurl import PackageURL
 
-from cyclonedx.model import LicenseChoice
+from cyclonedx.model import (
+    ExternalReference, ExternalReferenceType, LicenseChoice,
+    OrganizationalContact, OrganizationalEntity, Tool, XsUri
+)
 from cyclonedx.model.bom import Bom
 from cyclonedx.model.component import Component
 from cyclonedx.model.vulnerability import Vulnerability, VulnerabilitySource
@@ -82,7 +85,7 @@
     dlg = CycloneDXConfigDialog(venvName)
     if dlg.exec() == QDialog.DialogCode.Accepted:
         (inputSource, inputFile, fileFormat, schemaVersion, sbomFile,
-         withVulnerabilities, withDependencies) = dlg.getData()
+         withVulnerabilities, withDependencies, metadataDict) = dlg.getData()
         
         # check error conditions first
         if inputSource not in ("environment", "pipenv", "poetry",
@@ -143,6 +146,8 @@
             )
         
         bom = Bom.from_parser(parser=parser)
+        # TODO: add meta data to the BOM
+        _amendMetaData(bom.metadata, metadataDict)
         output = get_output_instance(
             bom=bom,
             output_format=outputFormat,
@@ -250,3 +255,112 @@
             return component
     
     return None
+
+
+def _amendMetaData(bomMetaData, metadataDict):
+    """
+    Function to amend the SBOM meta data according the given data.
+    
+    The modifications done are:
+    <ul>
+    <li>add eric7 to the tools</li>
+    </ul>
+    
+    @param bomMetaData reference to the SBOM meta data object
+    @type BomMetaData
+    @param metadataDict dictionary containing additional meta data
+    @type dict
+    @return reference to the modified SBOM meta data object
+    @rtype BomMetaData
+    """
+    # add a Tool entry for eric7
+    try:
+        from importlib.metadata import version as meta_version
+        __EricToolVersion = str(meta_version('eric-ide'))
+    except Exception:
+        from UI.Info import Version
+        __EricToolVersion = Version
+    
+    EricTool = Tool(vendor='python-projects.org',
+                    name='eric-ide',
+                    version=__EricToolVersion)
+    EricTool.external_references.update([
+        ExternalReference(
+            reference_type=ExternalReferenceType.DISTRIBUTION,
+            url=XsUri(
+                "https://pypi.org/project/eric-ide/"
+            )
+        ),
+        ExternalReference(
+            reference_type=ExternalReferenceType.DOCUMENTATION,
+            url=XsUri(
+                "https://pypi.org/project/eric-ide/"
+            )
+        ),
+        ExternalReference(
+            reference_type=ExternalReferenceType.ISSUE_TRACKER,
+            url=XsUri(
+                "https://tracker.die-offenbachs.homelinux.org"
+            )
+        ),
+        ExternalReference(
+            reference_type=ExternalReferenceType.LICENSE,
+            url=XsUri(
+                "https://hg.die-offenbachs.homelinux.org/eric/file/tip/docs/"
+                "LICENSE.GPL3"
+            )
+        ),
+        ExternalReference(
+            reference_type=ExternalReferenceType.RELEASE_NOTES,
+            url=XsUri(
+                "https://hg.die-offenbachs.homelinux.org/eric/file/tip/docs/"
+                "changelog"
+            )
+        ),
+        ExternalReference(
+            reference_type=ExternalReferenceType.VCS,
+            url=XsUri(
+                "https://hg.die-offenbachs.homelinux.org/eric"
+            )
+        ),
+        ExternalReference(
+            reference_type=ExternalReferenceType.WEBSITE,
+            url=XsUri(
+                "https://eric-ide.python-projects.org"
+            )
+        )
+    ])
+    bomMetaData.tools.add(EricTool)
+    
+    # add the meta data info entered by the user (if any)
+    if metadataDict is not None:
+        # TODO: add the meta info
+        if metadataDict["AuthorName"]:
+            bomMetaData.authors = [OrganizationalContact(
+                name=metadataDict["AuthorName"],
+                email=metadataDict["AuthorEmail"]
+            )]
+        if metadataDict["Manufacturer"]:
+            bomMetaData.manufacture = OrganizationalEntity(
+                name=metadataDict["Manufacturer"]
+            )
+        if metadataDict["Supplier"]:
+            bomMetaData.supplier = OrganizationalEntity(
+                name=metadataDict["Supplier"])
+        if metadataDict["License"]:
+            bomMetaData.licenses = [LicenseChoice(
+                license_expression=metadataDict["License"]
+            )]
+        if metadataDict["Name"]:
+            bomMetaData.component = Component(
+                name=metadataDict["Name"],
+                component_type=metadataDict["Type"],
+                version=metadataDict["Version"],
+                description=metadataDict["Description"],
+                author=metadataDict["AuthorName"],
+                licenses=[LicenseChoice(
+                    license_expression=metadataDict["License"]
+                )],
+            )
+    
+    return bomMetaData

eric ide

mercurial