src/eric7/CycloneDXInterface/CycloneDXUtilities.py

Tue, 18 Oct 2022 16:06:21 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 18 Oct 2022 16:06:21 +0200
branch
eric7
changeset 9413
80c06d472826
parent 9221
bf71ee032bb4
child 9473
3f23dbf37dbe
permissions
-rw-r--r--

Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.

9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the interface to CycloneDX.
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QCoreApplication
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtWidgets import QDialog
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
15 from eric7.EricWidgets.EricApplication import ericApp
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
16 from eric7.EricWidgets import EricMessageBox
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from packageurl import PackageURL
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
20 from cyclonedx.model import (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
21 ExternalReference,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
22 ExternalReferenceType,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
23 LicenseChoice,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
24 OrganizationalContact,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
25 OrganizationalEntity,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
26 Tool,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27 XsUri,
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
28 )
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 from cyclonedx.model.bom import Bom
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 from cyclonedx.model.component import Component
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
31 from cyclonedx.model.vulnerability import Vulnerability, VulnerabilitySource
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 from cyclonedx.output import (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
33 OutputFormat,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
34 SchemaVersion,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
35 get_instance as get_output_instance,
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 )
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 from cyclonedx.parser import BaseParser
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 from cyclonedx_py.parser.pipenv import PipEnvFileParser
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 from cyclonedx_py.parser.poetry import PoetryFileParser
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 from cyclonedx_py.parser.requirements import RequirementsFileParser
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
43 from eric7.PipInterface.PipVulnerabilityChecker import Package, VulnerabilityCheckError
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
44
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 class CycloneDXEnvironmentParser(BaseParser):
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 Class implementing a parser to get package data for a named environment.
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
50
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 def __init__(self, venvName):
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
54
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @param venvName name of the virtual environment
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @type str
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 super().__init__()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
59
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 pip = ericApp().getObject("Pip")
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 packages = pip.getLicenses(venvName)
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 for package in packages:
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 comp = Component(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 name=package["Name"],
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 version=package["Version"],
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 author=package["Author"],
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 description=package["Description"],
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 purl=PackageURL(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
69 type="pypi", name=package["Name"], version=package["Version"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70 ),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 )
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 for lic in package["License"].split(";"):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
73 comp.licenses.add(LicenseChoice(license_expression=lic.strip()))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
74
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self._components.append(comp)
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 def createCycloneDXFile(venvName):
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 Function to create a CyccloneDX SBOM file.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 @param venvName name of the virtual environment
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @type str
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 @exception RuntimeError raised to indicate illegal creation parameters
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 from .CycloneDXConfigDialog import CycloneDXConfigDialog
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
87
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 dlg = CycloneDXConfigDialog(venvName)
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 if dlg.exec() == QDialog.DialogCode.Accepted:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
90 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91 inputSource,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
92 inputFile,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
93 fileFormat,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
94 schemaVersion,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95 sbomFile,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96 withVulnerabilities,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
97 withDependencies,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98 metadataDict,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99 ) = dlg.getData()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
101 # check error conditions first
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
102 if inputSource not in ("environment", "pipenv", "poetry", "requirements"):
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 raise RuntimeError("Unsupported input source given.")
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 if fileFormat not in ("XML", "JSON"):
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 raise RuntimeError("Unsupported SBOM file format given.")
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
106
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 if inputSource == "environment":
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 parser = CycloneDXEnvironmentParser(venvName)
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 else:
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 # all other parsers need an input file
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 if not os.path.isfile(inputFile):
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 EricMessageBox.warning(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 None,
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 QCoreApplication.translate(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
115 "CycloneDX", "CycloneDX - SBOM Creation"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
116 ),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 QCoreApplication.translate(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 "CycloneDX",
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 "<p>The configured input file <b>{0}</b> does not"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
120 " exist. Aborting...</p>",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
121 ).format(inputFile),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 )
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 return
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
124
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 if inputSource == "pipenv":
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 parser = PipEnvFileParser(pipenv_lock_filename=inputFile)
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 elif inputSource == "poetry":
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 parser = PoetryFileParser(poetry_lock_filename=inputFile)
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 elif inputSource == "requirements":
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 parser = RequirementsFileParser(requirements_file=inputFile)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
131
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
132 if withVulnerabilities:
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
133 addCycloneDXVulnerabilities(parser)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
134
9122
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
135 if withDependencies:
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
136 addCycloneDXDependencies(parser, venvName)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
137
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 if fileFormat == "XML":
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 outputFormat = OutputFormat.XML
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 elif fileFormat == "JSON":
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 outputFormat = OutputFormat.JSON
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
142
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 if parser.has_warnings():
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
144 excludedList = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
145 "<li>{0}</li>".format(warning.get_item())
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
146 for warning in parser.get_warnings()
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
147 ]
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 EricMessageBox.warning(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 None,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150 QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 QCoreApplication.translate(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 "CycloneDX",
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 "<p>Some of the dependencies do not have pinned version"
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 " numbers.<ul>{0}</ul>The above listed packages will NOT"
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 " be included in the generated CycloneDX SBOM file as"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156 " version is a mandatory field.</p>",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
157 ).format("".join(excludedList)),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
159
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 bom = Bom.from_parser(parser=parser)
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
161 _amendMetaData(bom.metadata, metadataDict)
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 output = get_output_instance(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 bom=bom,
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 output_format=outputFormat,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
165 schema_version=SchemaVersion[
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
166 "V{0}".format(schemaVersion.replace(".", "_"))
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
167 ],
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 )
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 output.output_to_file(filename=sbomFile, allow_overwrite=True)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
170
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 EricMessageBox.information(
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 None,
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
173 QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 QCoreApplication.translate(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175 "CycloneDX", "<p>The SBOM data was written to file <b>{0}</b>.</p>"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
176 ).format(sbomFile),
9117
c6afba2049cf CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 )
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
178
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
179
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
180 def addCycloneDXVulnerabilities(parser):
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
181 """
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
182 Function to add vulnerability data to the list of created components.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
183
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
184 @param parser reference to the parser object containing the list of
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
185 components
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
186 @type BaseParser
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
187 """
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
188 components = parser.get_components()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
189
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
190 packages = [
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
191 Package(name=component.name, version=component.version)
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
192 for component in components
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
193 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
194
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
195 pip = ericApp().getObject("Pip")
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
196 error, vulnerabilities = pip.getVulnerabilityChecker().check(packages)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
198 if error == VulnerabilityCheckError.OK:
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
199 for package in vulnerabilities:
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
200 component = findCyccloneDXComponent(components, package)
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
201 if component:
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
202 for vuln in vulnerabilities[package]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
203 component.add_vulnerability(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
204 Vulnerability(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
205 id=vuln.cve,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
206 description=vuln.advisory,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
207 recommendation="upgrade required",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
208 source=VulnerabilitySource(name="pyup.io"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
209 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
210 )
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
211
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
212
9122
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
213 def addCycloneDXDependencies(parser, venvName):
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
214 """
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
215 Function to add dependency data to the list of created components.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
216
9122
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
217 @param parser reference to the parser object containing the list of
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
218 components
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
219 @type BaseParser
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
220 @param venvName name of the virtual environment
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
221 @type str
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
222 """
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
223 components = parser.get_components()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
224
9122
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
225 pip = ericApp().getObject("Pip")
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
226 dependencies = pip.getDependencyTree(venvName)
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
227 for dependency in dependencies:
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
228 _addCycloneDXDependency(dependency, components)
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
229
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
230
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
231 def _addCycloneDXDependency(dependency, components):
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
232 """
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
233 Function to add a dependency to the given list of components.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
234
9122
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
235 @param dependency dependency to be added
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
236 @type dict
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
237 @param components list of components
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
238 @type list of Component
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
239 """
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
240 component = findCyccloneDXComponent(components, dependency["package_name"])
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
241 if component is not None:
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
242 bomRefs = component.dependencies
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
243 for dep in dependency["dependencies"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
244 depComponent = findCyccloneDXComponent(components, dep["package_name"])
9122
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
245 if depComponent is not None:
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
246 bomRefs.add(depComponent.bom_ref)
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
247 # recursively add sub-dependencies
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
248 _addCycloneDXDependency(dep, components)
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
249 component.dependencies = bomRefs
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
250
ddf8ed8f7387 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9119
diff changeset
251
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
252 def findCyccloneDXComponent(components, name):
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
253 """
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
254 Function to find a component in a given list of components.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
255
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
256 @param components list of components to scan
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
257 @type list of Component
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
258 @param name name of the component to search for
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
259 @type str
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
260 @return reference to the found component or None
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
261 @rtype Component or None
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
262 """
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
263 for component in components:
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
264 if component.name == name:
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
265 return component
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
266
9119
5bcdef5207f6 CycloneDX
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9117
diff changeset
267 return None
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
268
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
269
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
270 def _amendMetaData(bomMetaData, metadataDict):
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
271 """
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
272 Function to amend the SBOM meta data according the given data.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
273
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
274 The modifications done are:
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
275 <ul>
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
276 <li>add eric7 to the tools</li>
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
277 </ul>
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
278
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
279 @param bomMetaData reference to the SBOM meta data object
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
280 @type BomMetaData
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
281 @param metadataDict dictionary containing additional meta data
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
282 @type dict
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
283 @return reference to the modified SBOM meta data object
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
284 @rtype BomMetaData
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
285 """
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
286 # add a Tool entry for eric7
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
287 try:
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
288 from importlib.metadata import version as meta_version
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
289
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
290 __EricToolVersion = str(meta_version("eric-ide"))
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
291 except Exception:
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
292 from eric7.UI.Info import Version
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
293
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
294 __EricToolVersion = Version
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
295
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
296 EricTool = Tool(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
297 vendor="python-projects.org", name="eric-ide", version=__EricToolVersion
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
298 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
299 EricTool.external_references.update(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
300 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
301 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
302 reference_type=ExternalReferenceType.DISTRIBUTION,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
303 url=XsUri("https://pypi.org/project/eric-ide/"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
304 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
305 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
306 reference_type=ExternalReferenceType.DOCUMENTATION,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
307 url=XsUri("https://pypi.org/project/eric-ide/"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
308 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
309 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
310 reference_type=ExternalReferenceType.ISSUE_TRACKER,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
311 url=XsUri("https://tracker.die-offenbachs.homelinux.org"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
312 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
313 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
314 reference_type=ExternalReferenceType.LICENSE,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
315 url=XsUri(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
316 "https://hg.die-offenbachs.homelinux.org/eric/file/tip/docs/"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
317 "LICENSE.GPL3"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
318 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
319 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
320 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
321 reference_type=ExternalReferenceType.RELEASE_NOTES,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
322 url=XsUri(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
323 "https://hg.die-offenbachs.homelinux.org/eric/file/tip/docs/"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
324 "changelog"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
325 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
326 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
327 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
328 reference_type=ExternalReferenceType.VCS,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
329 url=XsUri("https://hg.die-offenbachs.homelinux.org/eric"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
330 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
331 ExternalReference(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
332 reference_type=ExternalReferenceType.WEBSITE,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
333 url=XsUri("https://eric-ide.python-projects.org"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
334 ),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
335 ]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
336 )
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
337 bomMetaData.tools.add(EricTool)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
338
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
339 # add the meta data info entered by the user (if any)
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
340 if metadataDict is not None:
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
341 if metadataDict["AuthorName"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
342 bomMetaData.authors = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
343 OrganizationalContact(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
344 name=metadataDict["AuthorName"], email=metadataDict["AuthorEmail"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
345 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
346 ]
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
347 if metadataDict["Manufacturer"]:
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
348 bomMetaData.manufacture = OrganizationalEntity(
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
349 name=metadataDict["Manufacturer"]
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
350 )
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
351 if metadataDict["Supplier"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
352 bomMetaData.supplier = OrganizationalEntity(name=metadataDict["Supplier"])
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
353 if metadataDict["License"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
354 bomMetaData.licenses = [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
355 LicenseChoice(license_expression=metadataDict["License"])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
356 ]
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
357 if metadataDict["Name"]:
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
358 bomMetaData.component = Component(
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
359 name=metadataDict["Name"],
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
360 component_type=metadataDict["Type"],
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
361 version=metadataDict["Version"],
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
362 description=metadataDict["Description"],
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
363 author=metadataDict["AuthorName"],
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
364 licenses=[LicenseChoice(license_expression=metadataDict["License"])],
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
365 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
366
9141
7085ece52151 Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9122
diff changeset
367 return bomMetaData

eric ide

mercurial