regscale-cli 6.26.0.0__py3-none-any.whl → 6.27.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of regscale-cli might be problematic. Click here for more details.
- regscale/_version.py +1 -1
- regscale/core/app/application.py +1 -1
- regscale/core/app/internal/evidence.py +419 -2
- regscale/dev/code_gen.py +24 -20
- regscale/integrations/commercial/__init__.py +0 -1
- regscale/integrations/commercial/jira.py +367 -126
- regscale/integrations/commercial/qualys/__init__.py +7 -8
- regscale/integrations/commercial/qualys/scanner.py +8 -3
- regscale/integrations/commercial/synqly/assets.py +17 -0
- regscale/integrations/commercial/synqly/vulnerabilities.py +45 -28
- regscale/integrations/commercial/tenablev2/cis_parsers.py +453 -0
- regscale/integrations/commercial/tenablev2/cis_scanner.py +447 -0
- regscale/integrations/commercial/tenablev2/commands.py +142 -1
- regscale/integrations/commercial/tenablev2/scanner.py +0 -1
- regscale/integrations/commercial/tenablev2/stig_parsers.py +113 -57
- regscale/integrations/commercial/wizv2/WizDataMixin.py +1 -1
- regscale/integrations/commercial/wizv2/click.py +44 -59
- regscale/integrations/commercial/wizv2/compliance/__init__.py +15 -0
- regscale/integrations/commercial/wizv2/{policy_compliance_helpers.py → compliance/helpers.py} +78 -60
- regscale/integrations/commercial/wizv2/compliance_report.py +10 -9
- regscale/integrations/commercial/wizv2/core/__init__.py +133 -0
- regscale/integrations/commercial/wizv2/{async_client.py → core/client.py} +3 -3
- regscale/integrations/commercial/wizv2/{constants.py → core/constants.py} +1 -17
- regscale/integrations/commercial/wizv2/core/file_operations.py +237 -0
- regscale/integrations/commercial/wizv2/fetchers/__init__.py +11 -0
- regscale/integrations/commercial/wizv2/{data_fetcher.py → fetchers/policy_assessment.py} +5 -9
- regscale/integrations/commercial/wizv2/issue.py +1 -1
- regscale/integrations/commercial/wizv2/models/__init__.py +0 -0
- regscale/integrations/commercial/wizv2/parsers/__init__.py +34 -0
- regscale/integrations/commercial/wizv2/{parsers.py → parsers/main.py} +1 -1
- regscale/integrations/commercial/wizv2/processors/__init__.py +11 -0
- regscale/integrations/commercial/wizv2/{finding_processor.py → processors/finding.py} +1 -1
- regscale/integrations/commercial/wizv2/reports.py +1 -1
- regscale/integrations/commercial/wizv2/sbom.py +1 -1
- regscale/integrations/commercial/wizv2/scanner.py +40 -100
- regscale/integrations/commercial/wizv2/utils/__init__.py +48 -0
- regscale/integrations/commercial/wizv2/{utils.py → utils/main.py} +116 -61
- regscale/integrations/commercial/wizv2/variables.py +89 -3
- regscale/integrations/compliance_integration.py +0 -46
- regscale/integrations/control_matcher.py +22 -3
- regscale/integrations/due_date_handler.py +14 -8
- regscale/integrations/public/fedramp/docx_parser.py +10 -1
- regscale/integrations/public/fedramp/fedramp_cis_crm.py +393 -340
- regscale/integrations/public/fedramp/fedramp_five.py +1 -1
- regscale/integrations/scanner_integration.py +127 -57
- regscale/models/integration_models/cisa_kev_data.json +132 -9
- regscale/models/integration_models/qualys.py +3 -4
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +24 -7
- regscale/models/integration_models/synqly_models/synqly_model.py +8 -1
- regscale/models/regscale_models/control_implementation.py +1 -1
- regscale/models/regscale_models/issue.py +0 -1
- {regscale_cli-6.26.0.0.dist-info → regscale_cli-6.27.0.1.dist-info}/METADATA +1 -17
- {regscale_cli-6.26.0.0.dist-info → regscale_cli-6.27.0.1.dist-info}/RECORD +94 -61
- tests/regscale/integrations/commercial/test_jira.py +481 -91
- tests/regscale/integrations/commercial/test_wiz.py +96 -200
- tests/regscale/integrations/commercial/wizv2/__init__.py +1 -1
- tests/regscale/integrations/commercial/wizv2/compliance/__init__.py +1 -0
- tests/regscale/integrations/commercial/wizv2/compliance/test_helpers.py +903 -0
- tests/regscale/integrations/commercial/wizv2/core/__init__.py +1 -0
- tests/regscale/integrations/commercial/wizv2/core/test_auth.py +701 -0
- tests/regscale/integrations/commercial/wizv2/core/test_client.py +1037 -0
- tests/regscale/integrations/commercial/wizv2/core/test_file_operations.py +989 -0
- tests/regscale/integrations/commercial/wizv2/fetchers/__init__.py +1 -0
- tests/regscale/integrations/commercial/wizv2/fetchers/test_policy_assessment.py +805 -0
- tests/regscale/integrations/commercial/wizv2/parsers/__init__.py +1 -0
- tests/regscale/integrations/commercial/wizv2/parsers/test_main.py +1153 -0
- tests/regscale/integrations/commercial/wizv2/processors/__init__.py +1 -0
- tests/regscale/integrations/commercial/wizv2/processors/test_finding.py +671 -0
- tests/regscale/integrations/commercial/wizv2/test_WizDataMixin.py +537 -0
- tests/regscale/integrations/commercial/wizv2/test_click_comprehensive.py +851 -0
- tests/regscale/integrations/commercial/wizv2/test_compliance_report_comprehensive.py +910 -0
- tests/regscale/integrations/commercial/wizv2/test_file_cleanup.py +283 -0
- tests/regscale/integrations/commercial/wizv2/test_file_operations.py +260 -0
- tests/regscale/integrations/commercial/wizv2/test_issue.py +1 -1
- tests/regscale/integrations/commercial/wizv2/test_issue_comprehensive.py +1203 -0
- tests/regscale/integrations/commercial/wizv2/test_reports.py +497 -0
- tests/regscale/integrations/commercial/wizv2/test_sbom.py +643 -0
- tests/regscale/integrations/commercial/wizv2/test_scanner_comprehensive.py +805 -0
- tests/regscale/integrations/commercial/wizv2/test_wiz_click_client_id.py +1 -1
- tests/regscale/integrations/commercial/wizv2/test_wiz_compliance_report.py +72 -29
- tests/regscale/integrations/commercial/wizv2/test_wiz_findings_comprehensive.py +364 -0
- tests/regscale/integrations/commercial/wizv2/test_wiz_inventory_comprehensive.py +644 -0
- tests/regscale/integrations/commercial/wizv2/test_wizv2.py +946 -78
- tests/regscale/integrations/commercial/wizv2/test_wizv2_utils.py +97 -202
- tests/regscale/integrations/commercial/wizv2/utils/__init__.py +1 -0
- tests/regscale/integrations/commercial/wizv2/utils/test_main.py +1523 -0
- tests/regscale/integrations/public/test_fedramp.py +301 -0
- tests/regscale/integrations/test_control_matcher.py +83 -0
- regscale/integrations/commercial/wizv2/policy_compliance.py +0 -3543
- tests/regscale/integrations/commercial/wizv2/test_wiz_policy_compliance.py +0 -750
- /regscale/integrations/commercial/wizv2/{wiz_auth.py → core/auth.py} +0 -0
- {regscale_cli-6.26.0.0.dist-info → regscale_cli-6.27.0.1.dist-info}/LICENSE +0 -0
- {regscale_cli-6.26.0.0.dist-info → regscale_cli-6.27.0.1.dist-info}/WHEEL +0 -0
- {regscale_cli-6.26.0.0.dist-info → regscale_cli-6.27.0.1.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.26.0.0.dist-info → regscale_cli-6.27.0.1.dist-info}/top_level.txt +0 -0
|
@@ -34,9 +34,8 @@ from regscale.integrations.commercial.qualys.scanner import QualysTotalCloudJSON
|
|
|
34
34
|
from regscale.integrations.commercial.qualys.variables import QualysVariables
|
|
35
35
|
from regscale.integrations.scanner_integration import IntegrationAsset, IntegrationFinding
|
|
36
36
|
from regscale.integrations.variables import ScannerVariables
|
|
37
|
-
from regscale.models import Asset, Issue, Search, regscale_models
|
|
38
|
-
from regscale.models.app_models.click import NotRequiredIf,
|
|
39
|
-
from regscale.models.integration_models.ecr_models.data import Finding
|
|
37
|
+
from regscale.models import Asset, Issue, Search, regscale_models, IssueStatus, IssueSeverity
|
|
38
|
+
from regscale.models.app_models.click import NotRequiredIf, save_output_to, ssp_or_component_id
|
|
40
39
|
from regscale.models.integration_models.flat_file_importer import FlatFileImporter
|
|
41
40
|
from regscale.models.integration_models.qualys import (
|
|
42
41
|
Qualys,
|
|
@@ -2116,7 +2115,7 @@ def lookup_asset(asset_list: list, asset_id: str = None) -> list[Asset]:
|
|
|
2116
2115
|
return list(set(asset_list)) or []
|
|
2117
2116
|
|
|
2118
2117
|
|
|
2119
|
-
def map_qualys_severity_to_regscale(severity: int) -> tuple[
|
|
2118
|
+
def map_qualys_severity_to_regscale(severity: int) -> tuple[IssueSeverity, str]:
|
|
2120
2119
|
"""
|
|
2121
2120
|
Map Qualys vulnerability severity to RegScale Issue severity
|
|
2122
2121
|
|
|
@@ -2125,12 +2124,12 @@ def map_qualys_severity_to_regscale(severity: int) -> tuple[str, str]:
|
|
|
2125
2124
|
:rtype: tuple[str, str]
|
|
2126
2125
|
"""
|
|
2127
2126
|
if severity <= 2:
|
|
2128
|
-
return
|
|
2127
|
+
return IssueSeverity.Low, "low"
|
|
2129
2128
|
if severity == 3:
|
|
2130
|
-
return
|
|
2129
|
+
return IssueSeverity.Moderate, "moderate"
|
|
2131
2130
|
if severity > 3:
|
|
2132
|
-
return
|
|
2133
|
-
return
|
|
2131
|
+
return IssueSeverity.High, "high"
|
|
2132
|
+
return IssueSeverity.NotAssigned, "low"
|
|
2134
2133
|
|
|
2135
2134
|
|
|
2136
2135
|
def create_regscale_issue_from_vuln(
|
|
@@ -4,6 +4,7 @@ Qualys Total Cloud scanner integration class using JSONLScannerIntegration.
|
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
|
+
import threading
|
|
7
8
|
import time
|
|
8
9
|
import traceback
|
|
9
10
|
import xml.etree.ElementTree as ET
|
|
@@ -1554,17 +1555,21 @@ class QualysTotalCloudJSONLIntegration(JSONLScannerIntegration):
|
|
|
1554
1555
|
|
|
1555
1556
|
return vulnerability_id
|
|
1556
1557
|
|
|
1557
|
-
def set_severity_count_for_scan(
|
|
1558
|
+
def set_severity_count_for_scan(
|
|
1559
|
+
self, severity: str, scan_history: regscale_models.ScanHistory, lock: Optional[threading.RLock] = None
|
|
1560
|
+
) -> None:
|
|
1558
1561
|
"""
|
|
1559
1562
|
Override parent method to ensure Qualys scan history severity counts are properly updated.
|
|
1560
1563
|
This ensures that the vulnerability counts are accurately reflected in the scan history.
|
|
1561
1564
|
|
|
1562
1565
|
:param str severity: Severity of the vulnerability
|
|
1563
1566
|
:param regscale_models.ScanHistory scan_history: Scan history object
|
|
1567
|
+
:param Optional[threading.RLock] lock: Thread lock for synchronization
|
|
1564
1568
|
:rtype: None
|
|
1565
1569
|
"""
|
|
1566
|
-
# Use parent method to update severity counts
|
|
1567
|
-
|
|
1570
|
+
# Use parent method to update severity counts with thread-safe locking
|
|
1571
|
+
# Pass lock if provided, otherwise use our instance lock
|
|
1572
|
+
super().set_severity_count_for_scan(severity, scan_history, lock or self.scan_history_lock)
|
|
1568
1573
|
|
|
1569
1574
|
def create_scan_history(self) -> regscale_models.ScanHistory:
|
|
1570
1575
|
"""
|
|
@@ -74,6 +74,23 @@ def sync_axonius(regscale_ssp_id: int, filter: str) -> None:
|
|
|
74
74
|
assets_axonius.run_sync(regscale_ssp_id=regscale_ssp_id, filter=filter.split(";") if filter else [])
|
|
75
75
|
|
|
76
76
|
|
|
77
|
+
@assets.command(name="sync_claroty_xdome")
|
|
78
|
+
@regscale_ssp_id()
|
|
79
|
+
@click.option(
|
|
80
|
+
"--filter",
|
|
81
|
+
help='STRING: Apply filters to the query. Can be a single filter "field[operator]value" or semicolon-separated filters "field1[op]value1;field2[op]value2"',
|
|
82
|
+
required=False,
|
|
83
|
+
type=str,
|
|
84
|
+
default=None,
|
|
85
|
+
)
|
|
86
|
+
def sync_claroty_xdome(regscale_ssp_id: int, filter: str) -> None:
|
|
87
|
+
"""Sync Assets from Claroty Xdome to RegScale."""
|
|
88
|
+
from regscale.models.integration_models.synqly_models.connectors import Assets
|
|
89
|
+
|
|
90
|
+
assets_claroty_xdome = Assets("claroty_xdome")
|
|
91
|
+
assets_claroty_xdome.run_sync(regscale_ssp_id=regscale_ssp_id, filter=filter.split(";") if filter else [])
|
|
92
|
+
|
|
93
|
+
|
|
77
94
|
@assets.command(name="sync_crowdstrike")
|
|
78
95
|
@regscale_ssp_id()
|
|
79
96
|
@click.option(
|
|
@@ -44,8 +44,9 @@ def build_query(provider, validate, list_fields):
|
|
|
44
44
|
@vulnerabilities.command(name="sync_crowdstrike")
|
|
45
45
|
@regscale_ssp_id()
|
|
46
46
|
@click.option(
|
|
47
|
-
"--
|
|
48
|
-
|
|
47
|
+
"--minimum_severity_filter",
|
|
48
|
+
"-s",
|
|
49
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
49
50
|
required=False,
|
|
50
51
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
51
52
|
default=None,
|
|
@@ -78,7 +79,12 @@ def build_query(provider, validate, list_fields):
|
|
|
78
79
|
required=False,
|
|
79
80
|
)
|
|
80
81
|
def sync_crowdstrike(
|
|
81
|
-
regscale_ssp_id: int,
|
|
82
|
+
regscale_ssp_id: int,
|
|
83
|
+
minimum_severity_filter: str,
|
|
84
|
+
scan_date: datetime,
|
|
85
|
+
all_scans: bool,
|
|
86
|
+
asset_filter: str,
|
|
87
|
+
url: str,
|
|
82
88
|
) -> None:
|
|
83
89
|
"""Sync Vulnerabilities from Crowdstrike to RegScale."""
|
|
84
90
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -86,7 +92,7 @@ def sync_crowdstrike(
|
|
|
86
92
|
vulnerabilities_crowdstrike = Vulnerabilities("crowdstrike")
|
|
87
93
|
vulnerabilities_crowdstrike.run_sync(
|
|
88
94
|
regscale_ssp_id=regscale_ssp_id,
|
|
89
|
-
|
|
95
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
90
96
|
scan_date=scan_date,
|
|
91
97
|
all_scans=all_scans,
|
|
92
98
|
filter=asset_filter.split(";") if asset_filter else [],
|
|
@@ -97,8 +103,9 @@ def sync_crowdstrike(
|
|
|
97
103
|
@vulnerabilities.command(name="sync_nucleus")
|
|
98
104
|
@regscale_ssp_id()
|
|
99
105
|
@click.option(
|
|
100
|
-
"--
|
|
101
|
-
|
|
106
|
+
"--minimum_severity_filter",
|
|
107
|
+
"-s",
|
|
108
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
102
109
|
required=False,
|
|
103
110
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
104
111
|
default=None,
|
|
@@ -121,7 +128,7 @@ def sync_crowdstrike(
|
|
|
121
128
|
default=None,
|
|
122
129
|
)
|
|
123
130
|
def sync_nucleus(
|
|
124
|
-
regscale_ssp_id: int,
|
|
131
|
+
regscale_ssp_id: int, minimum_severity_filter: str, scan_date: datetime, all_scans: bool, asset_filter: str
|
|
125
132
|
) -> None:
|
|
126
133
|
"""Sync Vulnerabilities from Nucleus to RegScale."""
|
|
127
134
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -129,7 +136,7 @@ def sync_nucleus(
|
|
|
129
136
|
vulnerabilities_nucleus = Vulnerabilities("nucleus")
|
|
130
137
|
vulnerabilities_nucleus.run_sync(
|
|
131
138
|
regscale_ssp_id=regscale_ssp_id,
|
|
132
|
-
|
|
139
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
133
140
|
scan_date=scan_date,
|
|
134
141
|
all_scans=all_scans,
|
|
135
142
|
filter=asset_filter.split(";") if asset_filter else [],
|
|
@@ -139,8 +146,9 @@ def sync_nucleus(
|
|
|
139
146
|
@vulnerabilities.command(name="sync_qualys_cloud")
|
|
140
147
|
@regscale_ssp_id()
|
|
141
148
|
@click.option(
|
|
142
|
-
"--
|
|
143
|
-
|
|
149
|
+
"--minimum_severity_filter",
|
|
150
|
+
"-s",
|
|
151
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
144
152
|
required=False,
|
|
145
153
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
146
154
|
default=None,
|
|
@@ -167,7 +175,7 @@ def sync_nucleus(
|
|
|
167
175
|
default=None,
|
|
168
176
|
)
|
|
169
177
|
def sync_qualys_cloud(
|
|
170
|
-
regscale_ssp_id: int,
|
|
178
|
+
regscale_ssp_id: int, minimum_severity_filter: str, scan_date: datetime, all_scans: bool, asset_filter: str
|
|
171
179
|
) -> None:
|
|
172
180
|
"""Sync Vulnerabilities from Qualys Cloud to RegScale."""
|
|
173
181
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -175,7 +183,7 @@ def sync_qualys_cloud(
|
|
|
175
183
|
vulnerabilities_qualys_cloud = Vulnerabilities("qualys_cloud")
|
|
176
184
|
vulnerabilities_qualys_cloud.run_sync(
|
|
177
185
|
regscale_ssp_id=regscale_ssp_id,
|
|
178
|
-
|
|
186
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
179
187
|
scan_date=scan_date,
|
|
180
188
|
all_scans=all_scans,
|
|
181
189
|
filter=asset_filter.split(";") if asset_filter else [],
|
|
@@ -185,8 +193,9 @@ def sync_qualys_cloud(
|
|
|
185
193
|
@vulnerabilities.command(name="sync_rapid7_insight_cloud")
|
|
186
194
|
@regscale_ssp_id()
|
|
187
195
|
@click.option(
|
|
188
|
-
"--
|
|
189
|
-
|
|
196
|
+
"--minimum_severity_filter",
|
|
197
|
+
"-s",
|
|
198
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
190
199
|
required=False,
|
|
191
200
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
192
201
|
default=None,
|
|
@@ -213,7 +222,7 @@ def sync_qualys_cloud(
|
|
|
213
222
|
default=None,
|
|
214
223
|
)
|
|
215
224
|
def sync_rapid7_insight_cloud(
|
|
216
|
-
regscale_ssp_id: int,
|
|
225
|
+
regscale_ssp_id: int, minimum_severity_filter: str, scan_date: datetime, all_scans: bool, asset_filter: str
|
|
217
226
|
) -> None:
|
|
218
227
|
"""Sync Vulnerabilities from Rapid7 Insight Cloud to RegScale."""
|
|
219
228
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -221,7 +230,7 @@ def sync_rapid7_insight_cloud(
|
|
|
221
230
|
vulnerabilities_rapid7_insight_cloud = Vulnerabilities("rapid7_insight_cloud")
|
|
222
231
|
vulnerabilities_rapid7_insight_cloud.run_sync(
|
|
223
232
|
regscale_ssp_id=regscale_ssp_id,
|
|
224
|
-
|
|
233
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
225
234
|
scan_date=scan_date,
|
|
226
235
|
all_scans=all_scans,
|
|
227
236
|
filter=asset_filter.split(";") if asset_filter else [],
|
|
@@ -231,8 +240,9 @@ def sync_rapid7_insight_cloud(
|
|
|
231
240
|
@vulnerabilities.command(name="sync_servicenow_vr")
|
|
232
241
|
@regscale_ssp_id()
|
|
233
242
|
@click.option(
|
|
234
|
-
"--
|
|
235
|
-
|
|
243
|
+
"--minimum_severity_filter",
|
|
244
|
+
"-s",
|
|
245
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
236
246
|
required=False,
|
|
237
247
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
238
248
|
default=None,
|
|
@@ -259,7 +269,7 @@ def sync_rapid7_insight_cloud(
|
|
|
259
269
|
default=None,
|
|
260
270
|
)
|
|
261
271
|
def sync_servicenow_vr(
|
|
262
|
-
regscale_ssp_id: int,
|
|
272
|
+
regscale_ssp_id: int, minimum_severity_filter: str, scan_date: datetime, all_scans: bool, asset_filter: str
|
|
263
273
|
) -> None:
|
|
264
274
|
"""Sync Vulnerabilities from Servicenow Vr to RegScale."""
|
|
265
275
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -267,7 +277,7 @@ def sync_servicenow_vr(
|
|
|
267
277
|
vulnerabilities_servicenow_vr = Vulnerabilities("servicenow_vr")
|
|
268
278
|
vulnerabilities_servicenow_vr.run_sync(
|
|
269
279
|
regscale_ssp_id=regscale_ssp_id,
|
|
270
|
-
|
|
280
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
271
281
|
scan_date=scan_date,
|
|
272
282
|
all_scans=all_scans,
|
|
273
283
|
filter=asset_filter.split(";") if asset_filter else [],
|
|
@@ -277,8 +287,9 @@ def sync_servicenow_vr(
|
|
|
277
287
|
@vulnerabilities.command(name="sync_tanium_cloud")
|
|
278
288
|
@regscale_ssp_id()
|
|
279
289
|
@click.option(
|
|
280
|
-
"--
|
|
281
|
-
|
|
290
|
+
"--minimum_severity_filter",
|
|
291
|
+
"-s",
|
|
292
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
282
293
|
required=False,
|
|
283
294
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
284
295
|
default=None,
|
|
@@ -305,7 +316,7 @@ def sync_servicenow_vr(
|
|
|
305
316
|
default=None,
|
|
306
317
|
)
|
|
307
318
|
def sync_tanium_cloud(
|
|
308
|
-
regscale_ssp_id: int,
|
|
319
|
+
regscale_ssp_id: int, minimum_severity_filter: str, scan_date: datetime, all_scans: bool, asset_filter: str
|
|
309
320
|
) -> None:
|
|
310
321
|
"""Sync Vulnerabilities from Tanium Cloud to RegScale."""
|
|
311
322
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -313,7 +324,7 @@ def sync_tanium_cloud(
|
|
|
313
324
|
vulnerabilities_tanium_cloud = Vulnerabilities("tanium_cloud")
|
|
314
325
|
vulnerabilities_tanium_cloud.run_sync(
|
|
315
326
|
regscale_ssp_id=regscale_ssp_id,
|
|
316
|
-
|
|
327
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
317
328
|
scan_date=scan_date,
|
|
318
329
|
all_scans=all_scans,
|
|
319
330
|
filter=asset_filter.split(";") if asset_filter else [],
|
|
@@ -323,8 +334,9 @@ def sync_tanium_cloud(
|
|
|
323
334
|
@vulnerabilities.command(name="sync_tenable_cloud")
|
|
324
335
|
@regscale_ssp_id()
|
|
325
336
|
@click.option(
|
|
326
|
-
"--
|
|
327
|
-
|
|
337
|
+
"--minimum_severity_filter",
|
|
338
|
+
"-s",
|
|
339
|
+
help="Minimum severity of the vulnerabilities to sync. (Options: critical, high, medium, low, info), e.g. providing high will sync all vulnerabilities with a severity of high and critical.",
|
|
328
340
|
required=False,
|
|
329
341
|
type=click.Choice(["critical", "high", "medium", "low", "info"]),
|
|
330
342
|
default=None,
|
|
@@ -357,7 +369,12 @@ def sync_tanium_cloud(
|
|
|
357
369
|
required=False,
|
|
358
370
|
)
|
|
359
371
|
def sync_tenable_cloud(
|
|
360
|
-
regscale_ssp_id: int,
|
|
372
|
+
regscale_ssp_id: int,
|
|
373
|
+
minimum_severity_filter: str,
|
|
374
|
+
scan_date: datetime,
|
|
375
|
+
all_scans: bool,
|
|
376
|
+
asset_filter: str,
|
|
377
|
+
url: str,
|
|
361
378
|
) -> None:
|
|
362
379
|
"""Sync Vulnerabilities from Tenable Cloud to RegScale."""
|
|
363
380
|
from regscale.models.integration_models.synqly_models.connectors import Vulnerabilities
|
|
@@ -365,7 +382,7 @@ def sync_tenable_cloud(
|
|
|
365
382
|
vulnerabilities_tenable_cloud = Vulnerabilities("tenable_cloud")
|
|
366
383
|
vulnerabilities_tenable_cloud.run_sync(
|
|
367
384
|
regscale_ssp_id=regscale_ssp_id,
|
|
368
|
-
|
|
385
|
+
minimum_severity_filter=minimum_severity_filter,
|
|
369
386
|
scan_date=scan_date,
|
|
370
387
|
all_scans=all_scans,
|
|
371
388
|
filter=asset_filter.split(";") if asset_filter else [],
|