Sat, 23 Dec 2023 15:48:12 +0100
Updated copyright for 2024.
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:
9653
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 a dialog to configure the CycloneDX SBOM generation. |
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 pyqtSlot |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
13 | from PyQt6.QtWidgets import QDialog, QDialogButtonBox |
9117
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:
9278
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:
9278
diff
changeset
|
16 | from eric7.EricWidgets.EricPathPicker import EricPathPickerModes |
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 .Ui_CycloneDXConfigDialog import Ui_CycloneDXConfigDialog |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | class CycloneDXConfigDialog(QDialog, Ui_CycloneDXConfigDialog): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | """ |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | Class implementing a dialog to configure the CycloneDX SBOM generation. |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | """ |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
25 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | SupportedSchemas = { |
9119 | 27 | "JSON": [ |
28 | (1, 4), | |
29 | (1, 3), | |
30 | (1, 2), | |
31 | ], | |
32 | "XML": [ | |
33 | (1, 4), | |
34 | (1, 3), | |
35 | (1, 2), | |
36 | (1, 1), | |
37 | (1, 0), | |
38 | ], | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | } |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | Sources = { |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | "pipenv": "Pipfile.lock", |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | "poetry": "poetry.lock", |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | "requirements": "requirements.txt", |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | } |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | DefaultFileFormat = "JSON" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | DefaultFileNames = { |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | "JSON": "cyclonedx.json", |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | "XML": "cyclonedx.xml", |
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, environment, parent=None): |
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 environment 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 | @param parent reference to the parent widget (defaults to None) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | @type QWidget (optional) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | super().__init__(parent) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | self.setupUi(self) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
62 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | if environment == "<project>": |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
64 | self.__project = ericApp().getObject("Project") |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
65 | self.__defaultDirectory = self.__project.getProjectPath() |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | else: |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
67 | self.__project = None |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | venvManager = ericApp().getObject("VirtualEnvManager") |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
69 | self.__defaultDirectory = venvManager.getVirtualenvDirectory(environment) |
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 | self.environmentLabel.setText(environment) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
72 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
73 | self.pipenvButton.setEnabled( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
74 | os.path.isfile( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
75 | os.path.join( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
76 | self.__defaultDirectory, CycloneDXConfigDialog.Sources["pipenv"] |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
77 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
78 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
79 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
80 | self.poetryButton.setEnabled( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
81 | os.path.isfile( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
82 | os.path.join( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
83 | self.__defaultDirectory, CycloneDXConfigDialog.Sources["poetry"] |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
84 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
85 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
86 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
87 | self.requirementsButton.setEnabled( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
88 | os.path.isfile( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
89 | os.path.join( |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
90 | self.__defaultDirectory, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
91 | CycloneDXConfigDialog.Sources["requirements"], |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
92 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
93 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
94 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
95 | |
9119 | 96 | self.vulnerabilityCheckBox.toggled.connect( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
97 | self.__repopulateSchemaVersionComboBox |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
98 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
99 | |
9258
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
100 | self.filePicker.setMode(EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE) |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | self.filePicker.setDefaultDirectory(self.__defaultDirectory) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
102 | |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
103 | self.fileFormatComboBox.setCurrentText(CycloneDXConfigDialog.DefaultFileFormat) |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | self.on_fileFormatComboBox_currentTextChanged( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
105 | CycloneDXConfigDialog.DefaultFileFormat |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
106 | ) |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
107 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
108 | self.__metadata = None |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
109 | self.__metadataButton = self.buttonBox.addButton( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
110 | self.tr("Edit Metadata..."), QDialogButtonBox.ButtonRole.ActionRole |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
111 | ) |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
112 | self.__metadataButton.clicked.connect(self.__editMetaData) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
113 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | msh = self.minimumSizeHint() |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | self.resize(max(self.width(), msh.width()), msh.height()) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
116 | |
9119 | 117 | @pyqtSlot() |
118 | def __repopulateSchemaVersionComboBox(self): | |
119 | """ | |
120 | Private slot to repopulate the schema version selector. | |
121 | """ | |
122 | fileFormat = self.fileFormatComboBox.currentText() | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
123 | minSchemaVersion = (1, 4) if self.vulnerabilityCheckBox.isChecked() else (1, 0) |
9119 | 124 | self.schemaVersionComboBox.clear() |
125 | self.schemaVersionComboBox.addItems( | |
126 | "{0}.{1}".format(*f) | |
127 | for f in CycloneDXConfigDialog.SupportedSchemas[fileFormat] | |
128 | if f >= minSchemaVersion | |
129 | ) | |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
130 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | @pyqtSlot(str) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | def on_fileFormatComboBox_currentTextChanged(self, fileFormat): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | """ |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | Private slot to handle the selection of a SBOM file format. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
135 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | @param fileFormat selected format |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | @type str |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | """ |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | # re-populate the file schema combo box |
9119 | 140 | self.__repopulateSchemaVersionComboBox() |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
141 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | # set the file filter |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | if fileFormat == "JSON": |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
144 | self.filePicker.setFilters(self.tr("JSON Files (*.json);;All Files (*)")) |
9258
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
145 | suffix = ".json" |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | elif fileFormat == "XML": |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
147 | self.filePicker.setFilters(self.tr("XML Files (*.xml);;All Files (*)")) |
9258
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
148 | suffix = ".xml" |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149 | else: |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150 | self.filePicker.setFilters(self.tr("All Files (*)")) |
9258
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
151 | suffix = "" |
9278
36448ca469c2
Simplified some code iaw. recommendations of the extended style checker and reformatted the code with black.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9258
diff
changeset
|
152 | |
9258
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
153 | filePath = self.filePicker.path() |
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
154 | if bool(filePath.name): |
52a1ff7adb16
Implemented a little change to the CycloneDX configuration dialog to ensure the selected file has an extension and that it matches the selected format..
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9221
diff
changeset
|
155 | self.filePicker.setPath(filePath.with_suffix(suffix)) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
156 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
157 | @pyqtSlot() |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
158 | def __editMetaData(self): |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
159 | """ |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
160 | Private slot to open a dialog for editing the SBOM metadata. |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
161 | """ |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
162 | from .CycloneDXMetaDataDialog import CycloneDXMetaDataDialog |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
163 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
164 | # populate a metadata dictionary from project data |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
165 | metadata = ( |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
166 | { |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
167 | "Name": self.__project.getProjectName(), |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
168 | "Type": "", |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
169 | "Version": self.__project.getProjectVersion(), |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
170 | "Description": self.__project.getProjectDescription(), |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
171 | "AuthorName": self.__project.getProjectAuthor(), |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
172 | "AuthorEmail": self.__project.getProjectAuthorEmail(), |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
173 | "License": self.__project.getProjectLicense(), |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
174 | "Manufacturer": "", |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
175 | "Supplier": "", |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
176 | } |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
177 | if self.__metadata is None and self.__project is not None |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
178 | else self.__metadata |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
179 | ) |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
180 | |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
181 | dlg = CycloneDXMetaDataDialog(metadata=metadata, parent=self) |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
182 | if dlg.exec() == QDialog.DialogCode.Accepted: |
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
183 | self.__metadata = dlg.getMetaData() |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
184 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | def getData(self): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | """ |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | Public method to get the SBOM configuration data. |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
188 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | @return tuple containing the input source, the input file name, the |
9119 | 190 | file format, the schema version, the path of the SBOM file to be |
9141
7085ece52151
Completed the SBOM generation support by adding a metadata dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9122
diff
changeset
|
191 | written, a flag indicating to include vulnerability information, |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
192 | a flag indicating to include dependency information, a flag indicating |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
193 | to generate readable output and a dictionary containing the SBOM meta data |
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
194 | @rtype tuple of (str, str, str, str, str, bool, bool, bool, dict) |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | """ |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | if self.environmentButton.isChecked(): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | inputSource = "environment" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | inputFile = None |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | elif self.pipenvButton.isChecked(): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | inputSource = "pipenv" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | inputFile = os.path.join( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
202 | self.__defaultDirectory, CycloneDXConfigDialog.Sources["pipenv"] |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | ) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | elif self.poetryButton.isChecked(): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | inputSource = "poetry" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | inputFile = os.path.join( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
207 | self.__defaultDirectory, CycloneDXConfigDialog.Sources["poetry"] |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | ) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | elif self.requirementsButton.isChecked(): |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | inputSource = "requirements" |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | inputFile = os.path.join( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
212 | self.__defaultDirectory, CycloneDXConfigDialog.Sources["requirements"] |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | ) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | else: |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | # should not happen |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | inputSource = None |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | inputFile = None |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
218 | |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | fileFormat = self.fileFormatComboBox.currentText() |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220 | schemaVersion = self.schemaVersionComboBox.currentText() |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221 | sbomFile = self.filePicker.text() |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222 | if not sbomFile: |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | try: |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | sbomFile = os.path.join( |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | self.__defaultDirectory, |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
226 | CycloneDXConfigDialog.DefaultFileNames[fileFormat], |
9117
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | ) |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | except KeyError: |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229 | # should not happen |
c6afba2049cf
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | sbomFile = None |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
231 | |
9119 | 232 | return ( |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
233 | inputSource, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
234 | inputFile, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
235 | fileFormat, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
236 | schemaVersion, |
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
237 | sbomFile, |
9119 | 238 | self.vulnerabilityCheckBox.isChecked(), |
9122 | 239 | self.dependenciesCheckBox.isChecked(), |
9509
c06561080e32
CycloneDX Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9413
diff
changeset
|
240 | self.readableCheckBox.isChecked(), |
9221
bf71ee032bb4
Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9209
diff
changeset
|
241 | self.__metadata, |
9119 | 242 | ) |