check-msdefender 1.2.2__tar.gz → 1.2.4__tar.gz

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.
Files changed (53) hide show
  1. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/PKG-INFO +1 -1
  2. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/__init__.py +1 -1
  3. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/defender.py +3 -3
  4. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/products_service.py +6 -6
  5. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/pyproject.toml +55 -54
  6. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/LICENSE +0 -0
  7. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/README.md +0 -0
  8. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/__main__.py +0 -0
  9. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/check_msdefender.py +0 -0
  10. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/__init__.py +0 -0
  11. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/__main__.py +0 -0
  12. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/__init__.py +0 -0
  13. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/alerts.py +0 -0
  14. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/detail.py +0 -0
  15. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/lastseen.py +0 -0
  16. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/machines.py +0 -0
  17. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/onboarding.py +0 -0
  18. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/products.py +0 -0
  19. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/commands/vulnerabilities.py +0 -0
  20. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/decorators.py +0 -0
  21. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/cli/handlers.py +0 -0
  22. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/__init__.py +0 -0
  23. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/auth.py +0 -0
  24. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/config.py +0 -0
  25. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/exceptions.py +0 -0
  26. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/logging_config.py +0 -0
  27. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/core/nagios.py +0 -0
  28. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/integration.py +0 -0
  29. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/__init__.py +0 -0
  30. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/alerts_service.py +0 -0
  31. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/detail_service.py +0 -0
  32. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/lastseen_service.py +0 -0
  33. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/machines_service.py +0 -0
  34. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/models.py +0 -0
  35. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/onboarding_service.py +0 -0
  36. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/check_msdefender/services/vulnerabilities_service.py +0 -0
  37. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/__init__.py +0 -0
  38. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/__init__.py +0 -0
  39. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/alerts_data.json +0 -0
  40. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/machine_data.json +0 -0
  41. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/mock_defender_client.py +0 -0
  42. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/test_alerts_service.py +0 -0
  43. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/test_detail_service.py +0 -0
  44. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/test_lastseen_service.py +0 -0
  45. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/test_onboarding_service.py +0 -0
  46. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/test_vulnerabilities_service.py +0 -0
  47. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/fixtures/vulnerability_data.json +0 -0
  48. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/integration/__init__.py +0 -0
  49. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/integration/test_cli_integration.py +0 -0
  50. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/integration/test_lastseen_integration.py +0 -0
  51. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/unit/__init__.py +0 -0
  52. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/unit/test_alerts_service.py +0 -0
  53. {check_msdefender-1.2.2 → check_msdefender-1.2.4}/tests/unit/test_detail_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: check-msdefender
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: A Nagios plugin for monitoring Microsoft Defender API endpoints
5
5
  Keywords: nagios,monitoring,microsoft,graph,api,azure
6
6
  Author-Email: ldvchosal <ldvchosal@github.com>
@@ -1,4 +1,4 @@
1
1
  """Check Microsoft Defender API endpoints and check values - Nagios plugin."""
2
- __version__ = "1.2.2"
2
+ __version__ = "1.2.4"
3
3
  __author__ = "ldvchosal"
4
4
  __email__ = "ldvchosa@github.com"
@@ -225,14 +225,14 @@ class DefenderClient:
225
225
 
226
226
  token = self._get_token()
227
227
 
228
- # Use the TVM API endpoint for vulnerabilities by machine
229
- url = f"{self.base_url}/api/vulnerabilities/machinesVulnerabilities"
228
+ # Use the TVM API endpoint for products
229
+ url = f"{self.base_url}/api/machines/SoftwareVulnerabilitiesByMachine"
230
230
  headers = {
231
231
  "Authorization": f"Bearer {token}",
232
232
  "Content-Type": DefenderClient.application_json,
233
233
  }
234
234
 
235
- params = {"$top": "10000"}
235
+ params = {"pageIndex": "1", "pageSize": "50000"}
236
236
 
237
237
  try:
238
238
  start_time = time.time()
@@ -54,7 +54,7 @@ class ProductsService:
54
54
  products_data = self.defender.get_products()
55
55
  all_products = products_data.get("value", [])
56
56
  products = [
57
- product for product in all_products if product.get("machineId") == target_machine_id
57
+ product for product in all_products if product.get("deviceId") == target_machine_id
58
58
  ]
59
59
 
60
60
  self.logger.info(f"Found {len(products)} vulnerabilities for machine {target_dns_name}")
@@ -62,14 +62,14 @@ class ProductsService:
62
62
  # Group vulnerabilities by software
63
63
  software_vulnerabilities = {}
64
64
  for vulnerability in products:
65
- software_name = vulnerability.get("productName", "Unknown")
66
- software_version = vulnerability.get("productVersion", "Unknown")
67
- software_vendor = vulnerability.get("productVendor", "Unknown")
65
+ software_name = vulnerability.get("softwareName", "Unknown")
66
+ software_version = vulnerability.get("softwareVersion", "Unknown")
67
+ software_vendor = vulnerability.get("softwareVendor", "Unknown")
68
68
  cve_id = vulnerability.get("cveId", "Unknown")
69
69
  cvss_score = vulnerability.get("cvssScore", 0)
70
70
  disk_paths = vulnerability.get("diskPaths", [])
71
71
  registry_paths = vulnerability.get("registryPaths", [])
72
- severity = vulnerability.get("severity", "Unknown")
72
+ severity = vulnerability.get("vulnerabilitySeverityLevel", "Unknown")
73
73
 
74
74
  software_key = f"{software_name}-{software_version}-{software_vendor}"
75
75
 
@@ -101,7 +101,7 @@ class ProductsService:
101
101
  low_count = 0
102
102
 
103
103
  for vulnerability in products:
104
- severityLevel = vulnerability.get("severity", "Unknown")
104
+ severityLevel = vulnerability.get("vulnerabilitySeverityLevel", "Unknown")
105
105
  severity = (severityLevel or "Unknown").lower()
106
106
  if severity == "critical":
107
107
  critical_count += 1
@@ -39,7 +39,7 @@ dependencies = [
39
39
  "azure-identity>=1.12.0",
40
40
  "click>=8.0,<9.0",
41
41
  ]
42
- version = "1.2.2"
42
+ version = "1.2.4"
43
43
 
44
44
  [project.license]
45
45
  text = "MIT"
@@ -54,22 +54,49 @@ Documentation = "https://github.com/lduchosal/check_msdefender/blob/main/README.
54
54
  check_msdefender = "check_msdefender.cli:main"
55
55
  check_msdefender_integration = "check_msdefender.integration:main"
56
56
 
57
- [tool.pdm]
58
- distribution = true
57
+ [tool.setuptools.package-data]
58
+ "*" = [
59
+ "*.ini",
60
+ ]
59
61
 
60
- [tool.pdm.dev-dependencies]
61
- dev = [
62
- "pytest>=6.0",
63
- "pytest-cov>=2.0",
64
- "pytest-asyncio>=1.0",
65
- "black>=21.0",
66
- "flake8>=3.8",
67
- "mypy>=0.800",
68
- "twine>=6.2.0",
69
- "pdm>=2.0.0",
70
- "ruff>=0.13.0",
71
- "pdm-bump",
62
+ [tool.black]
63
+ line-length = 100
64
+ target-version = [
65
+ "py310",
66
+ ]
67
+
68
+ [tool.mypy]
69
+ python_version = "3.10"
70
+ warn_return_any = true
71
+ warn_unused_configs = true
72
+ disallow_untyped_defs = true
73
+ disallow_incomplete_defs = true
74
+ check_untyped_defs = true
75
+ disallow_untyped_decorators = false
76
+ no_implicit_optional = true
77
+ warn_redundant_casts = true
78
+ warn_unused_ignores = true
79
+ warn_no_return = true
80
+ warn_unreachable = true
81
+ strict_equality = true
82
+ ignore_missing_imports = true
83
+
84
+ [tool.pytest.ini_options]
85
+ testpaths = [
86
+ "tests",
72
87
  ]
88
+ python_files = "test_*.py"
89
+ python_classes = "Test*"
90
+ python_functions = "test_*"
91
+ addopts = "-v"
92
+
93
+ [tool.pdm-bump]
94
+ version-files = [
95
+ "check_msdefender/__init__.py:__version__",
96
+ ]
97
+
98
+ [tool.pdm]
99
+ distribution = true
73
100
 
74
101
  [tool.pdm.version]
75
102
  source = "file"
@@ -122,43 +149,17 @@ composite = [
122
149
  "cli",
123
150
  ]
124
151
 
125
- [tool.setuptools.package-data]
126
- "*" = [
127
- "*.ini",
128
- ]
129
-
130
- [tool.black]
131
- line-length = 100
132
- target-version = [
133
- "py310",
134
- ]
135
-
136
- [tool.mypy]
137
- python_version = "3.10"
138
- warn_return_any = true
139
- warn_unused_configs = true
140
- disallow_untyped_defs = true
141
- disallow_incomplete_defs = true
142
- check_untyped_defs = true
143
- disallow_untyped_decorators = false
144
- no_implicit_optional = true
145
- warn_redundant_casts = true
146
- warn_unused_ignores = true
147
- warn_no_return = true
148
- warn_unreachable = true
149
- strict_equality = true
150
- ignore_missing_imports = true
151
-
152
- [tool.pytest.ini_options]
153
- testpaths = [
154
- "tests",
155
- ]
156
- python_files = "test_*.py"
157
- python_classes = "Test*"
158
- python_functions = "test_*"
159
- addopts = "-v"
160
-
161
- [tool.pdm-bump]
162
- version-files = [
163
- "check_msdefender/__init__.py:__version__",
152
+ [dependency-groups]
153
+ dev = [
154
+ "pytest>=6.0",
155
+ "pytest-cov>=2.0",
156
+ "pytest-asyncio>=1.0",
157
+ "black>=21.0",
158
+ "flake8>=3.8",
159
+ "mypy>=0.800",
160
+ "twine>=6.2.0",
161
+ "pdm>=2.0.0",
162
+ "ruff>=0.13.0",
163
+ "pdm-bump",
164
+ "types-requests>=2.32.4.20260107",
164
165
  ]