check-msdefender 1.1.1__py3-none-any.whl → 1.1.3__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.
@@ -1,6 +1,5 @@
1
1
  """Main entry point for check_msdefender Nagios plugin."""
2
2
 
3
- import sys
4
3
  from check_msdefender.cli import main
5
4
 
6
5
  if __name__ == "__main__":
@@ -1,7 +1,6 @@
1
1
  """Alerts commands for CLI."""
2
2
 
3
3
  import sys
4
- import click
5
4
  from typing import Optional, Any
6
5
 
7
6
  from check_msdefender.core.auth import get_authenticator
@@ -16,7 +16,6 @@ def register_detail_commands(main_group: Any) -> None:
16
16
  """Register detail commands with the main CLI group."""
17
17
 
18
18
  @main_group.command("detail")
19
- @click.option("-i", "--id", "machine_id_alt", help="Machine ID (GUID)")
20
19
  @common_options
21
20
  def detail_cmd(
22
21
  config: str,
@@ -25,7 +24,6 @@ def register_detail_commands(main_group: Any) -> None:
25
24
  dns_name: Optional[str],
26
25
  warning: Optional[float],
27
26
  critical: Optional[float],
28
- machine_id_alt: Optional[str],
29
27
  ) -> None:
30
28
  """Get detailed machine information from Microsoft Defender."""
31
29
  try:
@@ -44,9 +42,6 @@ def register_detail_commands(main_group: Any) -> None:
44
42
  # Create custom Nagios plugin for detail output
45
43
  plugin = NagiosPlugin(service, "detail")
46
44
 
47
- # Use -i option if provided, otherwise fallback to -m
48
- final_machine_id = machine_id_alt or machine_id
49
-
50
45
  # Set default thresholds for detail command to show proper performance data
51
46
  # Based on expected test output patterns
52
47
  if warning is not None and critical is None:
@@ -58,7 +53,7 @@ def register_detail_commands(main_group: Any) -> None:
58
53
 
59
54
  # Execute check
60
55
  result = plugin.check(
61
- machine_id=final_machine_id,
56
+ machine_id=machine_id,
62
57
  dns_name=dns_name,
63
58
  warning=warning,
64
59
  critical=critical,
@@ -1,7 +1,6 @@
1
1
  """Last seen commands for CLI."""
2
2
 
3
3
  import sys
4
- import click
5
4
  from typing import Optional, Any
6
5
 
7
6
  from check_msdefender.core.auth import get_authenticator
@@ -1,7 +1,6 @@
1
1
  """List machines commands for CLI."""
2
2
 
3
3
  import sys
4
- import click
5
4
  from typing import Optional, Any
6
5
 
7
6
  from check_msdefender.core.auth import get_authenticator
@@ -1,7 +1,6 @@
1
1
  """Onboarding status commands for CLI."""
2
2
 
3
3
  import sys
4
- import click
5
4
  from typing import Optional, Any
6
5
 
7
6
  from check_msdefender.core.auth import get_authenticator
@@ -1,7 +1,6 @@
1
1
  """Vulnerability commands for CLI."""
2
2
 
3
3
  import sys
4
- import click
5
4
  from typing import Optional, Any
6
5
 
7
6
  from check_msdefender.core.auth import get_authenticator
@@ -10,7 +10,9 @@ def common_options(func: Callable[..., Any]) -> Callable[..., Any]:
10
10
  "-c", "--config", default="check_msdefender.ini", help="Configuration file path"
11
11
  )(func)
12
12
  func = click.option("-v", "--verbose", count=True, help="Increase verbosity")(func)
13
- func = click.option("-m", "--machine-id", help="Machine ID (GUID)")(func)
13
+ func = click.option("-m", "--machine-id", "-i", "--id", help="Machine ID (GUID)")(
14
+ func
15
+ )
14
16
  func = click.option("-d", "--dns-name", help="Computer DNS Name (FQDN)")(func)
15
17
  func = click.option("-W", "--warning", type=float, help="Warning threshold")(func)
16
18
  func = click.option("-C", "--critical", type=float, help="Critical threshold")(func)
@@ -1,7 +1,6 @@
1
1
  """Error handlers and formatters for click CLI."""
2
2
 
3
3
  import click
4
- from typing import Any
5
4
 
6
5
 
7
6
  class ClickErrorHandler:
@@ -20,7 +20,9 @@ def get_authenticator(
20
20
  tenant_id = auth_section.get("tenant_id")
21
21
 
22
22
  if not client_id or not tenant_id:
23
- raise ConfigurationError("client_id and tenant_id are required in [auth] section")
23
+ raise ConfigurationError(
24
+ "client_id and tenant_id are required in [auth] section"
25
+ )
24
26
 
25
27
  # Check for client secret authentication
26
28
  client_secret = auth_section.get("client_secret")
@@ -13,7 +13,11 @@ class DefenderClient:
13
13
  application_json = "application/json"
14
14
 
15
15
  def __init__(
16
- self, authenticator: Any, timeout: int = 5, region: str = "eu3", verbose_level: int = 0
16
+ self,
17
+ authenticator: Any,
18
+ timeout: int = 5,
19
+ region: str = "eu3",
20
+ verbose_level: int = 0,
17
21
  ) -> None:
18
22
  """Initialize with authenticator and optional region.
19
23
 
@@ -56,7 +60,9 @@ class DefenderClient:
56
60
  try:
57
61
  start_time = time.time()
58
62
  self.logger.info(f"Querying machine by DNS name: {dns_name}")
59
- response = requests.get(url, headers=headers, params=params, timeout=self.timeout)
63
+ response = requests.get(
64
+ url, headers=headers, params=params, timeout=self.timeout
65
+ )
60
66
  elapsed = time.time() - start_time
61
67
 
62
68
  self.logger.api_call("GET", url, response.status_code, elapsed)
@@ -151,7 +157,9 @@ class DefenderClient:
151
157
  try:
152
158
  start_time = time.time()
153
159
  self.logger.info("Querying all machines")
154
- response = requests.get(url, headers=headers, params=params, timeout=self.timeout)
160
+ response = requests.get(
161
+ url, headers=headers, params=params, timeout=self.timeout
162
+ )
155
163
  elapsed = time.time() - start_time
156
164
 
157
165
  self.logger.api_call("GET", url, response.status_code, elapsed)
@@ -189,7 +197,9 @@ class DefenderClient:
189
197
  try:
190
198
  start_time = time.time()
191
199
  self.logger.info("Querying alerts")
192
- response = requests.get(url, headers=headers, params=params, timeout=self.timeout)
200
+ response = requests.get(
201
+ url, headers=headers, params=params, timeout=self.timeout
202
+ )
193
203
  elapsed = time.time() - start_time
194
204
 
195
205
  self.logger.api_call("GET", url, response.status_code, elapsed)
@@ -36,7 +36,8 @@ class VerboseLogger:
36
36
  if self.verbose_level >= 3:
37
37
  # Full trace format
38
38
  formatter = logging.Formatter(
39
- "[%(levelname)s] %(asctime)s %(name)s:%(lineno)d - %(message)s", datefmt="%H:%M:%S"
39
+ "[%(levelname)s] %(asctime)s %(name)s:%(lineno)d - %(message)s",
40
+ datefmt="%H:%M:%S",
40
41
  )
41
42
  elif self.verbose_level >= 2:
42
43
  # Debug format
@@ -81,7 +82,9 @@ class VerboseLogger:
81
82
  """Log API call details if verbose >= 2."""
82
83
  if self.verbose_level >= 2:
83
84
  if status_code and response_time:
84
- self.logger.debug(f"API {method} {url} -> {status_code} ({response_time:.3f}s)")
85
+ self.logger.debug(
86
+ f"API {method} {url} -> {status_code} ({response_time:.3f}s)"
87
+ )
85
88
  else:
86
89
  self.logger.debug(f"API {method} {url}")
87
90
 
@@ -128,7 +128,9 @@ class NagiosPlugin:
128
128
 
129
129
  # Create Nagios check with custom summary
130
130
  # Use 'found' as context name for detail command, otherwise use command name
131
- context_name = "found" if self.command_name == "detail" else self.command_name
131
+ context_name = (
132
+ "found" if self.command_name == "detail" else self.command_name
133
+ )
132
134
  check = nagiosplugin.Check(
133
135
  DefenderResource(self.command_name, value),
134
136
  DefenderScalarContext(context_name, warning, critical),
@@ -1,7 +1,7 @@
1
1
  """Alerts service implementation."""
2
2
 
3
- from datetime import datetime
4
- from typing import Dict, Optional, Any, List
3
+ from typing import Dict, Optional, Any
4
+
5
5
  from check_msdefender.core.exceptions import ValidationError
6
6
  from check_msdefender.core.logging_config import get_verbose_logger
7
7
 
@@ -53,12 +53,18 @@ class AlertsService:
53
53
  or alert.get("computerDnsName") == target_dns_name
54
54
  ]
55
55
 
56
- self.logger.info(f"Found {len(machine_alerts)} alerts for machine {target_dns_name}")
56
+ self.logger.info(
57
+ f"Found {len(machine_alerts)} alerts for machine {target_dns_name}"
58
+ )
57
59
 
58
60
  # Categorize alerts by status and severity
59
- unresolved_alerts = [alert for alert in machine_alerts if alert.get("status") != "Resolved"]
61
+ unresolved_alerts = [
62
+ alert for alert in machine_alerts if alert.get("status") != "Resolved"
63
+ ]
60
64
  informational_alerts = [
61
- alert for alert in unresolved_alerts if alert.get("severity") == "Informational"
65
+ alert
66
+ for alert in unresolved_alerts
67
+ if alert.get("severity") == "Informational"
62
68
  ]
63
69
  critical_warning_alerts = [
64
70
  alert
@@ -82,7 +88,9 @@ class AlertsService:
82
88
  title = alert.get("title", "Unknown alert")
83
89
  status = alert.get("status", "Unknown")
84
90
  severity = alert.get("severity", "Unknown")
85
- details.append(f"{creation_time} - {title} ({status} {severity.lower()})")
91
+ details.append(
92
+ f"{creation_time} - {title} ({status} {severity.lower()})"
93
+ )
86
94
 
87
95
  # Return the number of unresolved alerts as the value
88
96
  # This will be used by Nagios plugin for determining status based on thresholds
@@ -93,6 +101,8 @@ class AlertsService:
93
101
  "details": details,
94
102
  }
95
103
 
96
- self.logger.info(f"Alert analysis complete: {len(unresolved_alerts)} unresolved alerts")
104
+ self.logger.info(
105
+ f"Alert analysis complete: {len(unresolved_alerts)} unresolved alerts"
106
+ )
97
107
  self.logger.method_exit("get_result", result)
98
108
  return result
@@ -54,10 +54,16 @@ class DetailService:
54
54
  # Create detailed output
55
55
  details = []
56
56
  details.append(f"Machine ID: {machine_details.get('id', 'Unknown')}")
57
- details.append(f"Computer Name: {machine_details.get('computerDnsName', 'Unknown')}")
58
- details.append(f"OS Platform: {machine_details.get('osPlatform', 'Unknown')}")
57
+ details.append(
58
+ f"Computer Name: {machine_details.get('computerDnsName', 'Unknown')}"
59
+ )
60
+ details.append(
61
+ f"OS Platform: {machine_details.get('osPlatform', 'Unknown')}"
62
+ )
59
63
  details.append(f"OS Version: {machine_details.get('osVersion', 'Unknown')}")
60
- details.append(f"Health Status: {machine_details.get('healthStatus', 'Unknown')}")
64
+ details.append(
65
+ f"Health Status: {machine_details.get('healthStatus', 'Unknown')}"
66
+ )
61
67
  details.append(f"Risk Score: {machine_details.get('riskScore', 'Unknown')}")
62
68
 
63
69
  result = {"value": 1, "details": details}
@@ -62,7 +62,9 @@ class LastSeenService:
62
62
 
63
63
  result = {"value": days_diff, "details": details}
64
64
 
65
- self.logger.info(f"Machine last seen {days_diff} days ago ({last_seen_str})")
65
+ self.logger.info(
66
+ f"Machine last seen {days_diff} days ago ({last_seen_str})"
67
+ )
66
68
  self.logger.method_exit("get_result", result)
67
69
  return result
68
70
  except (ValueError, TypeError) as e:
@@ -1,7 +1,7 @@
1
1
  """Machines service implementation."""
2
2
 
3
3
  from typing import Dict, List, Any
4
- from check_msdefender.core.exceptions import ValidationError
4
+
5
5
  from check_msdefender.core.logging_config import get_verbose_logger
6
6
 
7
7
 
@@ -23,7 +23,10 @@ class MachinesService:
23
23
 
24
24
  if not machines_data.get("value"):
25
25
  self.logger.info("No machines found")
26
- result = {"value": 0, "details": ["No machines found in Microsoft Defender"]}
26
+ result = {
27
+ "value": 0,
28
+ "details": ["No machines found in Microsoft Defender"],
29
+ }
27
30
  self.logger.method_exit("get_result", result)
28
31
  return result
29
32
 
@@ -39,7 +42,11 @@ class MachinesService:
39
42
 
40
43
  # Sort by priority
41
44
  sorted_machines = sorted(
42
- machines, key=lambda x: (status_priority[x["onboardingStatus"]], x["computerDnsName"])
45
+ machines,
46
+ key=lambda x: (
47
+ status_priority[x["onboardingStatus"]],
48
+ x["computerDnsName"],
49
+ ),
43
50
  )
44
51
  for machine in sorted_machines:
45
52
  onboarded = "✓" if machine["onboardingStatus"] == "Onboarded" else "✗"
@@ -2,8 +2,8 @@
2
2
 
3
3
  from dataclasses import dataclass
4
4
  from datetime import datetime
5
- from typing import Optional, List
6
5
  from enum import Enum
6
+ from typing import Optional
7
7
 
8
8
 
9
9
  class OnboardingStatus(Enum):
@@ -54,6 +54,8 @@ class OnboardingService:
54
54
 
55
55
  result = {"value": result_value, "details": details}
56
56
 
57
- self.logger.info(f"Machine onboarding status: {onboarding_state} -> {result_value}")
57
+ self.logger.info(
58
+ f"Machine onboarding status: {onboarding_state} -> {result_value}"
59
+ )
58
60
  self.logger.method_exit("get_result", result)
59
61
  return result
@@ -41,7 +41,9 @@ class VulnerabilitiesService:
41
41
 
42
42
  # Process and deduplicate vulnerabilities
43
43
  vulnerabilities = self._process_vulnerabilities(raw_vulnerabilities)
44
- self.logger.info(f"Found {len(vulnerabilities)} unique vulnerabilities after deduplication")
44
+ self.logger.info(
45
+ f"Found {len(vulnerabilities)} unique vulnerabilities after deduplication"
46
+ )
45
47
 
46
48
  # Calculate vulnerability score
47
49
  score = VulnerabilityScore()
@@ -54,7 +56,9 @@ class VulnerabilitiesService:
54
56
 
55
57
  for vuln in sorted_vulnerabilities:
56
58
  severity = vuln.severity.lower()
57
- self.logger.debug(f"Processing vulnerability {vuln.id} with severity: {severity}")
59
+ self.logger.debug(
60
+ f"Processing vulnerability {vuln.id} with severity: {severity}"
61
+ )
58
62
 
59
63
  if severity == "critical":
60
64
  score.critical += 1
@@ -75,7 +79,8 @@ class VulnerabilitiesService:
75
79
  self.logger.info(f"Total vulnerability score: {score.total_score}")
76
80
 
77
81
  details.insert(
78
- 0, f"Vulnerabilities: {len(raw_vulnerabilities)}, score: {score.total_score}"
82
+ 0,
83
+ f"Vulnerabilities: {len(raw_vulnerabilities)}, score: {score.total_score}",
79
84
  )
80
85
 
81
86
  result = {"value": score.total_score, "details": details}
@@ -125,7 +130,9 @@ class VulnerabilitiesService:
125
130
  # Sort by severity
126
131
  sorted_vulnerabilities = self._sort_by_severity(vulnerabilities)
127
132
 
128
- self.logger.method_exit("get_detailed_vulnerabilities", len(sorted_vulnerabilities))
133
+ self.logger.method_exit(
134
+ "get_detailed_vulnerabilities", len(sorted_vulnerabilities)
135
+ )
129
136
  return sorted_vulnerabilities
130
137
 
131
138
  def _process_vulnerabilities(
@@ -156,8 +163,11 @@ class VulnerabilitiesService:
156
163
 
157
164
  return unique_vulnerabilities
158
165
 
159
- def _sort_by_severity(self, vulnerabilities: List[Vulnerability]) -> List[Vulnerability]:
166
+ def _sort_by_severity(
167
+ self, vulnerabilities: List[Vulnerability]
168
+ ) -> List[Vulnerability]:
160
169
  """Sort vulnerabilities by severity (Critical > High > Medium > Low)."""
161
170
  return sorted(
162
- vulnerabilities, key=lambda v: self._severity_order.get(v.severity.lower(), 999)
171
+ vulnerabilities,
172
+ key=lambda v: self._severity_order.get(v.severity.lower(), 999),
163
173
  )
@@ -1,14 +1,10 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: check-msdefender
3
- Version: 1.1.1
3
+ Version: 1.1.3
4
4
  Summary: A Nagios plugin for monitoring Microsoft Defender API endpoints
5
- Author-email: ldvchosal <ldvchosal@github.com>
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/lduchosal/check_msdefender
8
- Project-URL: Bug Reports, https://github.com/lduchosal/check_msdefender/issues
9
- Project-URL: Source, https://github.com/lduchosal/check_msdefender
10
- Project-URL: Documentation, https://github.com/lduchosal/check_msdefender/blob/main/README.md
11
5
  Keywords: nagios,monitoring,microsoft,graph,api,azure
6
+ Author-Email: ldvchosal <ldvchosal@github.com>
7
+ License: MIT
12
8
  Classifier: Development Status :: 5 - Production/Stable
13
9
  Classifier: Intended Audience :: System Administrators
14
10
  Classifier: License :: OSI Approved :: MIT License
@@ -19,9 +15,11 @@ Classifier: Programming Language :: Python :: 3.10
19
15
  Classifier: Programming Language :: Python :: 3.11
20
16
  Classifier: Topic :: System :: Monitoring
21
17
  Classifier: Topic :: System :: Systems Administration
18
+ Project-URL: Homepage, https://github.com/lduchosal/check_msdefender
19
+ Project-URL: Bug Reports, https://github.com/lduchosal/check_msdefender/issues
20
+ Project-URL: Source, https://github.com/lduchosal/check_msdefender
21
+ Project-URL: Documentation, https://github.com/lduchosal/check_msdefender/blob/main/README.md
22
22
  Requires-Python: >=3.9
23
- Description-Content-Type: text/markdown
24
- License-File: LICENSE
25
23
  Requires-Dist: nagiosplugin>=1.4.0
26
24
  Requires-Dist: azure-identity>=1.12.0
27
25
  Requires-Dist: click<9.0,>=8.0
@@ -33,7 +31,9 @@ Requires-Dist: black>=21.0; extra == "dev"
33
31
  Requires-Dist: flake8>=3.8; extra == "dev"
34
32
  Requires-Dist: mypy>=0.800; extra == "dev"
35
33
  Requires-Dist: twine>=6.2.0; extra == "dev"
36
- Dynamic: license-file
34
+ Requires-Dist: pdm>=2.0.0; extra == "dev"
35
+ Requires-Dist: ruff>=0.13.0; extra == "dev"
36
+ Description-Content-Type: text/markdown
37
37
 
38
38
  # 🛡️ Check MS Defender
39
39
 
@@ -295,7 +295,6 @@ source .venv/bin/activate # Windows: .venv\Scripts\activate
295
295
 
296
296
  # Install in development mode
297
297
  pip install -e .
298
- pip install -r requirements-dev.txt
299
298
  ```
300
299
 
301
300
  ### Code Quality Tools
@@ -428,4 +427,4 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE)
428
427
 
429
428
  [🐛 Report Bug](https://github.com/lduchosal/check_msdefender/issues) • [💡 Request Feature](https://github.com/lduchosal/check_msdefender/issues) • [📖 Documentation](https://github.com/lduchosal/check_msdefender/blob/main/README.md)
430
429
 
431
- </div>
430
+ </div>
@@ -0,0 +1,34 @@
1
+ check_msdefender-1.1.3.dist-info/METADATA,sha256=Wo8HZZf4fJp2hBI3j20sBKKh6zXDrYjnpZhlccFemL4,14079
2
+ check_msdefender-1.1.3.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
+ check_msdefender-1.1.3.dist-info/entry_points.txt,sha256=OqVzHI1PaD9V22g0K7BhA2nYv4O-pH8mcLzuGdsk5rM,79
4
+ check_msdefender-1.1.3.dist-info/licenses/LICENSE,sha256=kW3DwIsKc9HVYdS4f4tI6sLo-EPqBQbz-WmuvHU4Nak,1065
5
+ check_msdefender/__init__.py,sha256=HDn1Ub7Ohqkfko0kUPT8w7HqU52jXwo-leSTImO1x_k,161
6
+ check_msdefender/__main__.py,sha256=TuNsRSdnkQm9OdBTAwD5aB2zV_Irc50WgylVWhrfnLY,124
7
+ check_msdefender/check_msdefender.py,sha256=OO4Tg2DBW28AT-2LOH-qJM2pE5TPcF615BF7HjyZsmA,137
8
+ check_msdefender/cli/__init__.py,sha256=NWaS5ZI9_252AcReugF_WGPMOvQ_B7sC_s3pSrGujcI,291
9
+ check_msdefender/cli/__main__.py,sha256=TuNsRSdnkQm9OdBTAwD5aB2zV_Irc50WgylVWhrfnLY,124
10
+ check_msdefender/cli/commands/__init__.py,sha256=VkPrCVpBK3DnhVDZuwd_4uK69JYAE9rHZBjAZhyOBII,730
11
+ check_msdefender/cli/commands/alerts.py,sha256=bC3nSF1iE83hOjwJdrL76yBpH4ovnWYNUZTnMzoIdIw,1821
12
+ check_msdefender/cli/commands/detail.py,sha256=qCATgEo_au7t93usEqyWAer6jYlHktQ7D_6iaeLvg3E,2284
13
+ check_msdefender/cli/commands/lastseen.py,sha256=my-kW00ioaFdmec3zjqrLk12kt9Pld8rqu5n8wcT4Ys,1878
14
+ check_msdefender/cli/commands/machines.py,sha256=uyQal7P4VI4a3dECFWgXKBiUPcdxhUrpWFOyKHmpORU,1724
15
+ check_msdefender/cli/commands/onboarding.py,sha256=5QSP75uyrX0MQ1ABiGFSDKIzVszLF8U3uQ4bqFF9F2g,1912
16
+ check_msdefender/cli/commands/vulnerabilities.py,sha256=fl8NYAO4Ug2Yk5NmQ6CT9TuibhFHWE01R6YjDIPgYl4,1931
17
+ check_msdefender/cli/decorators.py,sha256=EWgchw56-_ZIYEdwZNZsc5LncSw6obFp1RXKGTknU2E,800
18
+ check_msdefender/cli/handlers.py,sha256=hp_CX_3qPoQGrPPVeiojb2j7tuFMva4ebWg9CxVUiPg,1395
19
+ check_msdefender/core/__init__.py,sha256=naBiEkixiWTuHU3GENk8fqC8H3p_hkzRsmSY2uiM_TQ,47
20
+ check_msdefender/core/auth.py,sha256=TDolCrwQoo37poaNUYJC2kgp4QpeH0W9AOathYCIUgw,1607
21
+ check_msdefender/core/config.py,sha256=IoWBL_DB110F4i6hFfli6iFDBXx57dHh32lCuLkcgNk,1170
22
+ check_msdefender/core/defender.py,sha256=e-KXaGrXPTftdLQZD6XsjeY2GVoCP_bP_-dTnpjDxYc,8961
23
+ check_msdefender/core/exceptions.py,sha256=X4s_XM64SEVSs-4mGKqnF8xXwGFY3E0buvkgRNuCCX4,600
24
+ check_msdefender/core/logging_config.py,sha256=J4vdxbJBM4LDpbNvjRsVPZcsvW0yfRz7TnkJmOwyjpE,4122
25
+ check_msdefender/core/nagios.py,sha256=uIp_WRkr-27gyjL1YKgzMhfcBmJt-0aSbm5XjtYyAN8,6632
26
+ check_msdefender/services/__init__.py,sha256=_fiKXxcz263IghXn9BnUWDKPgedhUPoSakEN3tBd2SU,44
27
+ check_msdefender/services/alerts_service.py,sha256=XxtP31Zt0WcfkW65YlJgoSVRxRX3yAJ4LTpgx9er-xc,4162
28
+ check_msdefender/services/detail_service.py,sha256=PMoBv_m0udwWdPus5SvDx49V6iP9ERGWg5pX5cGARvA,3472
29
+ check_msdefender/services/lastseen_service.py,sha256=T98Axx4ziUEavibXuG5FB2eHTyAcxktNM1DI4Y5fo1c,3158
30
+ check_msdefender/services/machines_service.py,sha256=XYWnAliNo1DyIvdQ5xcPh133_CaW8U39WGdmiATwZps,3166
31
+ check_msdefender/services/models.py,sha256=CDmQ5vU0-GawIalqXjXNk3rry6gsyjv6eSlW2NiXwQ0,979
32
+ check_msdefender/services/onboarding_service.py,sha256=5ekrDlt6Vc__28O7b8niY-KPA14Dnw0UbuSgdx7_Lyg,2708
33
+ check_msdefender/services/vulnerabilities_service.py,sha256=DfU6NaAkm-X5BVL3Zfm3lDe21vE-r1ErYh3r8nZLA6I,6926
34
+ check_msdefender-1.1.3.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: pdm-backend (2.4.5)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -1,2 +1,5 @@
1
1
  [console_scripts]
2
2
  check_msdefender = check_msdefender.cli:main
3
+
4
+ [gui_scripts]
5
+
@@ -1,35 +0,0 @@
1
- check_msdefender/__init__.py,sha256=HDn1Ub7Ohqkfko0kUPT8w7HqU52jXwo-leSTImO1x_k,161
2
- check_msdefender/__main__.py,sha256=TuNsRSdnkQm9OdBTAwD5aB2zV_Irc50WgylVWhrfnLY,124
3
- check_msdefender/check_msdefender.py,sha256=M_i2CIZWxfPisxxiWTFqGVAjoAS89euyVbbbtmaikQk,148
4
- check_msdefender/cli/__init__.py,sha256=NWaS5ZI9_252AcReugF_WGPMOvQ_B7sC_s3pSrGujcI,291
5
- check_msdefender/cli/__main__.py,sha256=TuNsRSdnkQm9OdBTAwD5aB2zV_Irc50WgylVWhrfnLY,124
6
- check_msdefender/cli/decorators.py,sha256=iMd2zrQI2SVSTa9hD8w4AjFqsctFaWUIzdT8_cSTVG8,772
7
- check_msdefender/cli/handlers.py,sha256=RAUsH8gI_fQV4ZNvs3Ih1lCoSOSortpVWRhyQHXe6yU,1418
8
- check_msdefender/cli/commands/__init__.py,sha256=VkPrCVpBK3DnhVDZuwd_4uK69JYAE9rHZBjAZhyOBII,730
9
- check_msdefender/cli/commands/alerts.py,sha256=R3Xb_X7fjc6zNQ0mYQ01DW_pIxIHu_NctbKjrZu8BH0,1834
10
- check_msdefender/cli/commands/detail.py,sha256=k2pDCGXtiGbKmXxDYUvkmUgmQA60jKdIzTY-Jt160jE,2532
11
- check_msdefender/cli/commands/lastseen.py,sha256=TJHArqLkQtXF1XL5U5Dk_ExfVhK95C2TJQg0WBHbyp8,1891
12
- check_msdefender/cli/commands/machines.py,sha256=uHpxc2j4iJnbhp2MRAW-KR1K0NPrqdqQtJbGgSRO5tk,1737
13
- check_msdefender/cli/commands/onboarding.py,sha256=I_hKWngVdSITkEFQ3pDE2oIGlYsCurG7XbCi_fKNoAM,1925
14
- check_msdefender/cli/commands/vulnerabilities.py,sha256=EzllIUw67qAnarKVTy-zx4nWVHDxg2icRsC1irdBhnU,1944
15
- check_msdefender/core/__init__.py,sha256=naBiEkixiWTuHU3GENk8fqC8H3p_hkzRsmSY2uiM_TQ,47
16
- check_msdefender/core/auth.py,sha256=7mkGmhGHy4t38O0e4Rz7dQ52xfMbK3IUXMlw3u83aB4,1585
17
- check_msdefender/core/config.py,sha256=IoWBL_DB110F4i6hFfli6iFDBXx57dHh32lCuLkcgNk,1170
18
- check_msdefender/core/defender.py,sha256=XicGQrWuc9UCBr_Vc0SZxNSoZ_OwFXiFwfP_c9-eRtc,8838
19
- check_msdefender/core/exceptions.py,sha256=X4s_XM64SEVSs-4mGKqnF8xXwGFY3E0buvkgRNuCCX4,600
20
- check_msdefender/core/logging_config.py,sha256=27gLjvbP_AgedDQWZQEFfn_CGn5y6HcJQlI5jlxQHow,4067
21
- check_msdefender/core/nagios.py,sha256=nZSo-1VV57WFSieyRp456tw_OqpjXOoM_MEjnLkgxlE,6600
22
- check_msdefender/services/__init__.py,sha256=_fiKXxcz263IghXn9BnUWDKPgedhUPoSakEN3tBd2SU,44
23
- check_msdefender/services/alerts_service.py,sha256=RNdjsmL9YPjPl4Dv98Z9ceWhIt7k9g4lwIGpJTk9BUo,4069
24
- check_msdefender/services/detail_service.py,sha256=i-jXubNfsNf-fS6ba2MQecN886GzU0UC40DwS3HrnnY,3382
25
- check_msdefender/services/lastseen_service.py,sha256=LiNVeUbAoMzowMvE90P7zCtKFHBLbIDp5mmkVHRLwqs,3128
26
- check_msdefender/services/machines_service.py,sha256=5s5BXB4GUMQ8z3rPy32lybp0DslG0QVhWxm-n_AU97k,3119
27
- check_msdefender/services/models.py,sha256=8p8UHh86h9TjeYahhu_qCBpfuGGS3tObhtlpYk9kB8I,985
28
- check_msdefender/services/onboarding_service.py,sha256=RIOsvALCoKV0YqnCHKYRkelSPrO-F-6vNBLlto4MpiI,2686
29
- check_msdefender/services/vulnerabilities_service.py,sha256=ikD6E-hg7LtvCiTg7cTCqGSTly6Wgtql82NJD81D2n0,6812
30
- check_msdefender-1.1.1.dist-info/licenses/LICENSE,sha256=kW3DwIsKc9HVYdS4f4tI6sLo-EPqBQbz-WmuvHU4Nak,1065
31
- check_msdefender-1.1.1.dist-info/METADATA,sha256=Ew5sloXo0tys9KMjetkTtsu35oPa2MYuqL3g0fPFkPw,14074
32
- check_msdefender-1.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
33
- check_msdefender-1.1.1.dist-info/entry_points.txt,sha256=EMA_qKSvf5dC6yRrajd0W-UgS3C5Ce0o04i3_5A34Cs,63
34
- check_msdefender-1.1.1.dist-info/top_level.txt,sha256=0XgjD7gBWFImxE44zghS94ZGdonRZlfVEpfspnBnG5A,17
35
- check_msdefender-1.1.1.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- check_msdefender