Sun, 19 May 2024 17:20:16 +0200
Relocated the Version information into a top level '__version__.py' module.
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 | |
10439
21c28b0f9e41
Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10170
diff
changeset
|
3 | # Copyright (c) 2022 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
9117
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 | |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
10 | import contextlib |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
11 | import json |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | import os |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
10170
6cf1ee737d8f
Corrected some more code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9674
diff
changeset
|
14 | from xml.etree import ElementTree # secok |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
15 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
16 | from cyclonedx.model import ( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
17 | ExternalReference, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
18 | ExternalReferenceType, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
19 | LicenseChoice, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
20 | OrganizationalContact, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
21 | OrganizationalEntity, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
22 | Tool, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
23 | XsUri, |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
24 | ) |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | from cyclonedx.model.bom import Bom |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | from cyclonedx.model.component import Component |
9119 | 27 | from cyclonedx.model.vulnerability import Vulnerability, VulnerabilitySource |
9482
a2bc06a54d9d
Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9473
diff
changeset
|
28 | from cyclonedx.output import ( |
a2bc06a54d9d
Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9473
diff
changeset
|
29 | OutputFormat, |
a2bc06a54d9d
Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9473
diff
changeset
|
30 | SchemaVersion, |
a2bc06a54d9d
Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9473
diff
changeset
|
31 | get_instance as get_output_instance, |
a2bc06a54d9d
Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9473
diff
changeset
|
32 | ) |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | from cyclonedx.parser import BaseParser |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | from cyclonedx_py.parser.pipenv import PipEnvFileParser |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | from cyclonedx_py.parser.poetry import PoetryFileParser |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | from cyclonedx_py.parser.requirements import RequirementsFileParser |
9473
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
37 | from packageurl import PackageURL |
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
38 | from PyQt6.QtCore import QCoreApplication |
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
39 | from PyQt6.QtWidgets import QDialog |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | |
9473
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
41 | from eric7.EricWidgets import EricMessageBox |
3f23dbf37dbe
Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
42 | from eric7.EricWidgets.EricApplication import ericApp |
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 | 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, |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
98 | readableOutput, |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
99 | metadataDict, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
100 | ) = dlg.getData() |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
101 | |
9119 | 102 | # check error conditions first |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
103 | if inputSource not in ("environment", "pipenv", "poetry", "requirements"): |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | raise RuntimeError("Unsupported input source given.") |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | if fileFormat not in ("XML", "JSON"): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | 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
|
107 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | if inputSource == "environment": |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | parser = CycloneDXEnvironmentParser(venvName) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | else: |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | # all other parsers need an input file |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | if not os.path.isfile(inputFile): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | EricMessageBox.warning( |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | None, |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | QCoreApplication.translate( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
116 | "CycloneDX", "CycloneDX - SBOM Creation" |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
117 | ), |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | QCoreApplication.translate( |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | "CycloneDX", |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | "<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
|
121 | " exist. Aborting...</p>", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
122 | ).format(inputFile), |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | ) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | return |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
125 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | if inputSource == "pipenv": |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | parser = PipEnvFileParser(pipenv_lock_filename=inputFile) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | elif inputSource == "poetry": |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | parser = PoetryFileParser(poetry_lock_filename=inputFile) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | elif inputSource == "requirements": |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | 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
|
132 | |
9119 | 133 | if withVulnerabilities: |
134 | addCycloneDXVulnerabilities(parser) | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
135 | |
9122 | 136 | if withDependencies: |
137 | addCycloneDXDependencies(parser, venvName) | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
138 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | if fileFormat == "XML": |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | outputFormat = OutputFormat.XML |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | elif fileFormat == "JSON": |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | outputFormat = OutputFormat.JSON |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
143 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | if parser.has_warnings(): |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
145 | excludedList = [ |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
146 | "<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
|
147 | 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
|
148 | ] |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149 | EricMessageBox.warning( |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150 | None, |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
151 | QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"), |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | QCoreApplication.translate( |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | "CycloneDX", |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | "<p>Some of the dependencies do not have pinned version" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | " numbers.<ul>{0}</ul>The above listed packages will NOT" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | " 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
|
157 | " 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
|
158 | ).format("".join(excludedList)), |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159 | ) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
160 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | 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
|
162 | _amendMetaData(bom.metadata, metadataDict) |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | output = get_output_instance( |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | bom=bom, |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | output_format=outputFormat, |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
166 | schema_version=SchemaVersion[ |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
167 | "V{0}".format(schemaVersion.replace(".", "_")) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
168 | ], |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | ) |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
170 | outputStr = output.output_as_string() |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
171 | if readableOutput: |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
172 | if fileFormat == "XML": |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
173 | outputStr = _prettifyXML(outputStr) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
174 | elif fileFormat == "JSON": |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
175 | outputStr = _prettifyJSON(outputStr) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
176 | |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
177 | try: |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
178 | with open(sbomFile, "w", encoding="utf-8") as f: |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
179 | f.write(outputStr) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
180 | EricMessageBox.information( |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
181 | None, |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
182 | QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"), |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
183 | QCoreApplication.translate( |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
184 | "CycloneDX", "<p>The SBOM data was written to file <b>{0}</b>.</p>" |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
185 | ).format(sbomFile), |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
186 | ) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
187 | except OSError as err: |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
188 | EricMessageBox.critical( |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
189 | None, |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
190 | QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"), |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
191 | QCoreApplication.translate( |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
192 | "CycloneDX", |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
193 | "<p>The SBOM file <b>{0}</b> could not be written.</p>" |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
194 | "<p>Reason: {1}</p>", |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
195 | ).format(sbomFile, str(err)), |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
196 | ) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
197 | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
198 | |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
199 | def _prettifyXML(inputStr): |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
200 | """ |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
201 | Function to prettify the SBOM XML output generated by CycloneDX. |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
202 | |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
203 | Note: Prettifying an XML tree works only with Python 3.9 and above! |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
204 | |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
205 | @param inputStr output generated by CycloneDX |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
206 | @type str |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
207 | @return prettified SBOM string |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
208 | @rtype str |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
209 | """ |
10170
6cf1ee737d8f
Corrected some more code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9674
diff
changeset
|
210 | tree = ElementTree.fromstring(inputStr) # secok |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
211 | with contextlib.suppress(AttributeError): |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
212 | ElementTree.indent(tree) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
213 | return '<?xml version="1.0" encoding="UTF-8"?>\n' + ElementTree.tostring( |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
214 | tree, encoding="unicode" |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | ) |
9119 | 216 | |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
217 | return inputStr |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
218 | |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
219 | |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
220 | def _prettifyJSON(inputStr): |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
221 | """ |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
222 | Function to prettify the SBOM JSON output generated by CycloneDX. |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
223 | |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
224 | @param inputStr output generated by CycloneDX |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
225 | @type str |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
226 | @return prettified SBOM string |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
227 | @rtype str |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
228 | """ |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
229 | sbom = json.loads(inputStr) |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
230 | return json.dumps(sbom, indent=" ") |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9482
diff
changeset
|
231 | |
9119 | 232 | |
233 | def addCycloneDXVulnerabilities(parser): | |
234 | """ | |
235 | 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
|
236 | |
9119 | 237 | @param parser reference to the parser object containing the list of |
238 | components | |
239 | @type BaseParser | |
240 | """ | |
241 | components = parser.get_components() | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
242 | |
9119 | 243 | packages = [ |
244 | Package(name=component.name, version=component.version) | |
245 | for component in components | |
246 | ] | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
247 | |
9119 | 248 | pip = ericApp().getObject("Pip") |
249 | 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
|
250 | |
9119 | 251 | if error == VulnerabilityCheckError.OK: |
252 | for package in vulnerabilities: | |
253 | component = findCyccloneDXComponent(components, package) | |
254 | if component: | |
255 | 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
|
256 | component.add_vulnerability( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
257 | Vulnerability( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
258 | id=vuln.cve, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
259 | description=vuln.advisory, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
260 | recommendation="upgrade required", |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
261 | source=VulnerabilitySource(name="pyup.io"), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
262 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
263 | ) |
9119 | 264 | |
265 | ||
9122 | 266 | def addCycloneDXDependencies(parser, venvName): |
267 | """ | |
268 | 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
|
269 | |
9122 | 270 | @param parser reference to the parser object containing the list of |
271 | components | |
272 | @type BaseParser | |
273 | @param venvName name of the virtual environment | |
274 | @type str | |
275 | """ | |
276 | components = parser.get_components() | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
277 | |
9122 | 278 | pip = ericApp().getObject("Pip") |
279 | dependencies = pip.getDependencyTree(venvName) | |
280 | for dependency in dependencies: | |
281 | _addCycloneDXDependency(dependency, components) | |
282 | ||
283 | ||
284 | def _addCycloneDXDependency(dependency, components): | |
285 | """ | |
286 | 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
|
287 | |
9122 | 288 | @param dependency dependency to be added |
289 | @type dict | |
290 | @param components list of components | |
291 | @type list of Component | |
292 | """ | |
293 | component = findCyccloneDXComponent(components, dependency["package_name"]) | |
294 | if component is not None: | |
295 | bomRefs = component.dependencies | |
296 | 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
|
297 | depComponent = findCyccloneDXComponent(components, dep["package_name"]) |
9122 | 298 | if depComponent is not None: |
299 | bomRefs.add(depComponent.bom_ref) | |
300 | # recursively add sub-dependencies | |
301 | _addCycloneDXDependency(dep, components) | |
302 | component.dependencies = bomRefs | |
303 | ||
304 | ||
9119 | 305 | def findCyccloneDXComponent(components, name): |
306 | """ | |
307 | 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
|
308 | |
9119 | 309 | @param components list of components to scan |
310 | @type list of Component | |
311 | @param name name of the component to search for | |
312 | @type str | |
313 | @return reference to the found component or None | |
314 | @rtype Component or None | |
315 | """ | |
316 | for component in components: | |
317 | if component.name == name: | |
318 | return component | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
319 | |
9119 | 320 | return None |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
321 | |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
322 | |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
323 | 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
|
324 | """ |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
325 | 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
|
326 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
327 | 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
|
328 | <ul> |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
329 | <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
|
330 | </ul> |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
331 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
332 | @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
|
333 | @type BomMetaData |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
334 | @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
|
335 | @type dict |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
336 | @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
|
337 | @rtype BomMetaData |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
338 | """ |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
339 | # 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
|
340 | try: |
9482
a2bc06a54d9d
Corrected/acknowledged some bad import style and removed some obsolete code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9473
diff
changeset
|
341 | from importlib.metadata import version as meta_version # __IGNORE_WARNING_I10__ |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
342 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
343 | __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
|
344 | except Exception: |
10716
11cdcc824469
Relocated the Version information into a top level '__version__.py' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10439
diff
changeset
|
345 | from eric7.__version__ import Version # __IGNORE_WARNING_I101__ |
9221
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 | __EricToolVersion = Version |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
348 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
349 | EricTool = Tool( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
350 | 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
|
351 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
352 | EricTool.external_references.update( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
353 | [ |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
354 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
355 | reference_type=ExternalReferenceType.DISTRIBUTION, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
356 | 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
|
357 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
358 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
359 | reference_type=ExternalReferenceType.DOCUMENTATION, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
360 | 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
|
361 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
362 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
363 | reference_type=ExternalReferenceType.ISSUE_TRACKER, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
364 | 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
|
365 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
366 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
367 | reference_type=ExternalReferenceType.LICENSE, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
368 | url=XsUri( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
369 | "https://hg.die-offenbachs.homelinux.org/eric/file/tip/docs/" |
9674
43dd357b3bff
Modified the pyproject.toml file to include a reference to the license file and changed its extension to be .txt.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
370 | "LICENSE.txt" |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
371 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
372 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
373 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
374 | reference_type=ExternalReferenceType.RELEASE_NOTES, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
375 | url=XsUri( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
376 | "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
|
377 | "changelog" |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
378 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
379 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
380 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
381 | reference_type=ExternalReferenceType.VCS, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
382 | 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
|
383 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
384 | ExternalReference( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
385 | reference_type=ExternalReferenceType.WEBSITE, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
386 | 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
|
387 | ), |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
388 | ] |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
389 | ) |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
390 | bomMetaData.tools.add(EricTool) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
391 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
392 | # 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
|
393 | 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
|
394 | if metadataDict["AuthorName"]: |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
395 | bomMetaData.authors = [ |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
396 | OrganizationalContact( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
397 | 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
|
398 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
399 | ] |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
400 | if metadataDict["Manufacturer"]: |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
401 | bomMetaData.manufacture = OrganizationalEntity( |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
402 | name=metadataDict["Manufacturer"] |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
403 | ) |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
404 | if metadataDict["Supplier"]: |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
405 | 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
|
406 | if metadataDict["License"]: |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
407 | bomMetaData.licenses = [ |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
408 | LicenseChoice(license_expression=metadataDict["License"]) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
409 | ] |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
410 | if metadataDict["Name"]: |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
411 | bomMetaData.component = Component( |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
412 | name=metadataDict["Name"], |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
413 | 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
|
414 | version=metadataDict["Version"], |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
415 | description=metadataDict["Description"], |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
416 | author=metadataDict["AuthorName"], |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
417 | 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
|
418 | ) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
419 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
420 | return bomMetaData |