cartography 0.101.1rc1__py3-none-any.whl → 0.101.1rc2__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 cartography might be problematic. Click here for more details.

cartography/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.101.1rc1'
20
+ __version__ = version = '0.101.1rc2'
21
21
  __version_tuple__ = version_tuple = (0, 101, 1)
@@ -65,9 +65,6 @@ CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.accesskeyid);
65
65
  CREATE INDEX IF NOT EXISTS FOR (n:AccountAccessKey) ON (n.lastupdated);
66
66
  CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.arn);
67
67
  CREATE INDEX IF NOT EXISTS FOR (n:AutoScalingGroup) ON (n.lastupdated);
68
- CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.id);
69
- CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.instance_id);
70
- CREATE INDEX IF NOT EXISTS FOR (n:CrowdstrikeHost) ON (n.lastupdated);
71
68
  CREATE INDEX IF NOT EXISTS FOR (n:CVE) ON (n.id);
72
69
  CREATE INDEX IF NOT EXISTS FOR (n:CVE) ON (n.lastupdated);
73
70
  CREATE INDEX IF NOT EXISTS FOR (n:Dependency) ON (n.id);
@@ -5,11 +5,6 @@
5
5
  "iterative": true,
6
6
  "iterationsize": 100
7
7
  },
8
- {
9
- "query": "MATCH (h:CrowdstrikeHost) WHERE h.lastupdated <> $UPDATE_TAG WITH h LIMIT $LIMIT_SIZE DETACH DELETE (h)",
10
- "iterative": true,
11
- "iterationsize": 100
12
- },
13
8
  {
14
9
  "query": "MATCH (:CrowdstrikeFinding)<-[hc:HAS_CVE]-(:SpotlightVulnerability) WHERE hc.lastupdated <> $UPDATE_TAG WITH hc LIMIT $LIMIT_SIZE DELETE (hc)",
15
10
  "iterative": true,
@@ -37,18 +37,37 @@ def get_launch_template_versions(
37
37
  boto3_session: boto3.session.Session,
38
38
  region: str,
39
39
  launch_templates: list[dict[str, Any]],
40
- ) -> list[dict[str, Any]]:
41
- template_versions: list[dict[str, Any]] = []
40
+ ) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
41
+ found_versions: list[dict[str, Any]] = []
42
+ found_templates: list[dict[str, Any]] = []
42
43
  for template in launch_templates:
43
44
  launch_template_id = template['LaunchTemplateId']
44
- versions = get_launch_template_versions_by_template(boto3_session, launch_template_id, region)
45
- template_versions.extend(versions)
46
-
47
- return template_versions
45
+ try:
46
+ versions = get_launch_template_versions_by_template(
47
+ boto3_session,
48
+ launch_template_id,
49
+ region,
50
+ )
51
+ # If the call succeeded, the template still exists.
52
+ # Add it and its versions (list might be empty if no versions exist).
53
+ found_templates.append(template)
54
+ found_versions.extend(versions)
55
+ except botocore.exceptions.ClientError as e:
56
+ if e.response['Error']['Code'] == 'InvalidLaunchTemplateId.NotFound':
57
+ logger.warning(
58
+ "Launch template %s no longer exists in region %s, skipping.",
59
+ launch_template_id, region,
60
+ )
61
+ # Skip this template, don't add it or its versions
62
+ continue
63
+ else:
64
+ # Re-raise any other client error
65
+ raise
66
+
67
+ return found_versions, found_templates
48
68
 
49
69
 
50
70
  @timeit
51
- @aws_handle_regions
52
71
  def get_launch_template_versions_by_template(
53
72
  boto3_session: boto3.session.Session,
54
73
  launch_template_id: str,
@@ -57,15 +76,8 @@ def get_launch_template_versions_by_template(
57
76
  client = boto3_session.client('ec2', region_name=region, config=get_botocore_config())
58
77
  v_paginator = client.get_paginator('describe_launch_template_versions')
59
78
  template_versions = []
60
- try:
61
- for versions in v_paginator.paginate(LaunchTemplateId=launch_template_id):
62
- template_versions.extend(versions['LaunchTemplateVersions'])
63
- except botocore.exceptions.ClientError as e:
64
- error_code = e.response['Error']['Code']
65
- if error_code == 'InvalidLaunchTemplateId.NotFound':
66
- logger.warning("Launch template %s no longer exists in region %s", launch_template_id, region)
67
- else:
68
- raise
79
+ for versions_page in v_paginator.paginate(LaunchTemplateId=launch_template_id):
80
+ template_versions.extend(versions_page['LaunchTemplateVersions'])
69
81
  return template_versions
70
82
 
71
83
 
@@ -164,10 +176,12 @@ def sync_ec2_launch_templates(
164
176
  for region in regions:
165
177
  logger.info(f"Syncing launch templates for region '{region}' in account '{current_aws_account_id}'.")
166
178
  templates = get_launch_templates(boto3_session, region)
167
- versions = get_launch_template_versions(boto3_session, region, templates)
168
- templates = transform_launch_templates(templates)
169
- load_launch_templates(neo4j_session, templates, region, current_aws_account_id, update_tag)
170
- versions = transform_launch_template_versions(versions)
171
- load_launch_template_versions(neo4j_session, versions, region, current_aws_account_id, update_tag)
179
+ versions, found_templates = get_launch_template_versions(boto3_session, region, templates)
180
+
181
+ # Transform and load only the templates that were found to exist
182
+ transformed_templates = transform_launch_templates(found_templates)
183
+ load_launch_templates(neo4j_session, transformed_templates, region, current_aws_account_id, update_tag)
184
+ transformed_versions = transform_launch_template_versions(versions)
185
+ load_launch_template_versions(neo4j_session, transformed_versions, region, current_aws_account_id, update_tag)
172
186
 
173
187
  cleanup(neo4j_session, common_job_parameters)
@@ -1,11 +1,14 @@
1
1
  import logging
2
+ from typing import Any
2
3
 
3
4
  import neo4j
4
5
 
5
6
  from cartography.config import Config
7
+ from cartography.graph.job import GraphJob
6
8
  from cartography.intel.crowdstrike.endpoints import sync_hosts
7
9
  from cartography.intel.crowdstrike.spotlight import sync_vulnerabilities
8
10
  from cartography.intel.crowdstrike.util import get_authorization
11
+ from cartography.models.crowdstrike.hosts import CrowdstrikeHostSchema
9
12
  from cartography.stats import get_stats_client
10
13
  from cartography.util import merge_module_sync_metadata
11
14
  from cartography.util import run_cleanup_job
@@ -50,11 +53,7 @@ def start_crowdstrike_ingestion(
50
53
  config.update_tag,
51
54
  authorization,
52
55
  )
53
- run_cleanup_job(
54
- "crowdstrike_import_cleanup.json",
55
- neo4j_session,
56
- common_job_parameters,
57
- )
56
+ cleanup(neo4j_session, common_job_parameters)
58
57
 
59
58
  group_id = "public"
60
59
  if config.crowdstrike_api_url:
@@ -67,3 +66,16 @@ def start_crowdstrike_ingestion(
67
66
  update_tag=config.update_tag,
68
67
  stat_handler=stat_handler,
69
68
  )
69
+
70
+
71
+ @timeit
72
+ def cleanup(neo4j_session: neo4j.Session, common_job_parameters: dict[str, Any]) -> None:
73
+ logger.info("Running Crowdstrike cleanup")
74
+ GraphJob.from_node_schema(CrowdstrikeHostSchema(), common_job_parameters).run(neo4j_session)
75
+
76
+ # Cleanup other crowdstrike assets not handled by the data model
77
+ run_cleanup_job(
78
+ "crowdstrike_import_cleanup.json",
79
+ neo4j_session,
80
+ common_job_parameters,
81
+ )
@@ -6,6 +6,8 @@ import neo4j
6
6
  from falconpy.hosts import Hosts
7
7
  from falconpy.oauth2 import OAuth2
8
8
 
9
+ from cartography.client.core.tx import load
10
+ from cartography.models.crowdstrike.hosts import CrowdstrikeHostSchema
9
11
  from cartography.util import timeit
10
12
 
11
13
  logger = logging.getLogger(__name__)
@@ -24,55 +26,21 @@ def sync_hosts(
24
26
  load_host_data(neo4j_session, host_data, update_tag)
25
27
 
26
28
 
29
+ @timeit
27
30
  def load_host_data(
28
- neo4j_session: neo4j.Session, data: List[Dict], update_tag: int,
31
+ neo4j_session: neo4j.Session,
32
+ data: List[Dict],
33
+ update_tag: int,
29
34
  ) -> None:
30
35
  """
31
- Transform and load scan information
32
- """
33
- ingestion_cypher_query = """
34
- UNWIND $Hosts AS host
35
- MERGE (h:CrowdstrikeHost{id: host.device_id})
36
- ON CREATE SET h.cid = host.cid,
37
- h.instance_id = host.instance_id,
38
- h.serial_number = host.serial_number,
39
- h.firstseen = timestamp()
40
- SET h.status = host.status,
41
- h.hostname = host.hostname,
42
- h.machine_domain = host.machine_domain,
43
- h.crowdstrike_first_seen = host.first_seen,
44
- h.crowdstrike_last_seen = host.last_seen,
45
- h.local_ip = host.local_ip,
46
- h.external_ip = host.external_ip,
47
- h.cpu_signature = host.cpu_signature,
48
- h.bios_manufacturer = host.bios_manufacturer,
49
- h.bios_version = host.bios_version,
50
- h.mac_address = host.mac_address,
51
- h.os_version = host.os_version,
52
- h.os_build = host.os_build,
53
- h.platform_id = host.platform_id,
54
- h.platform_name = host.platform_name,
55
- h.service_provider = host.service_provider,
56
- h.service_provider_account_id = host.service_provider_account_id,
57
- h.agent_version = host.agent_version,
58
- h.system_manufacturer = host.system_manufacturer,
59
- h.system_product_name = host.system_product_name,
60
- h.product_type = host.product_type,
61
- h.product_type_desc = host.product_type_desc,
62
- h.provision_status = host.provision_status,
63
- h.reduced_functionality_mode = host.reduced_functionality_mode,
64
- h.kernel_version = host.kernel_version,
65
- h.major_version = host.major_version,
66
- h.minor_version = host.minor_version,
67
- h.tags = host.tags,
68
- h.modified_timestamp = host.modified_timestamp,
69
- h.lastupdated = $update_tag
36
+ Load Crowdstrike host data into Neo4j.
70
37
  """
71
38
  logger.info(f"Loading {len(data)} crowdstrike hosts.")
72
- neo4j_session.run(
73
- ingestion_cypher_query,
74
- Hosts=data,
75
- update_tag=update_tag,
39
+ load(
40
+ neo4j_session,
41
+ CrowdstrikeHostSchema(),
42
+ data,
43
+ lastupdated=update_tag,
76
44
  )
77
45
 
78
46
 
@@ -25,10 +25,34 @@ def get(kandji_base_uri: str, kandji_token: str) -> List[Dict[str, Any]]:
25
25
  'Authorization': f'Bearer {kandji_token}',
26
26
  }
27
27
 
28
+ offset = 0
29
+ limit = 300
30
+ params: dict[str, str | int] = {
31
+ "sort": "serial_number",
32
+ "limit": limit,
33
+ "offset": offset,
34
+ }
35
+
36
+ devices: List[Dict[str, Any]] = []
28
37
  session = Session()
29
- req = session.get(api_endpoint, headers=headers, timeout=_TIMEOUT)
30
- req.raise_for_status()
31
- return req.json()
38
+ while True:
39
+ logger.debug("Kandji device offset: %s", offset)
40
+
41
+ params["offset"] = offset
42
+ response = session.get(api_endpoint, headers=headers, timeout=_TIMEOUT, params=params)
43
+ response.raise_for_status()
44
+
45
+ result = response.json()
46
+ # If no more result, we are done
47
+ if len(result) == 0:
48
+ break
49
+
50
+ devices.extend(result)
51
+
52
+ offset += limit
53
+
54
+ logger.debug("Kandji device count: %d", len(devices))
55
+ return devices
32
56
 
33
57
 
34
58
  @timeit
File without changes
@@ -0,0 +1,49 @@
1
+ from dataclasses import dataclass
2
+
3
+ from cartography.models.core.common import PropertyRef
4
+ from cartography.models.core.nodes import CartographyNodeProperties
5
+ from cartography.models.core.nodes import CartographyNodeSchema
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class CrowdstrikeHostNodeProperties(CartographyNodeProperties):
10
+ id: PropertyRef = PropertyRef('device_id')
11
+ cid: PropertyRef = PropertyRef('cid')
12
+ instance_id: PropertyRef = PropertyRef('instance_id', extra_index=True)
13
+ serial_number: PropertyRef = PropertyRef('serial_number', extra_index=True)
14
+ status: PropertyRef = PropertyRef('status')
15
+ hostname: PropertyRef = PropertyRef('hostname')
16
+ machine_domain: PropertyRef = PropertyRef('machine_domain')
17
+ crowdstrike_first_seen: PropertyRef = PropertyRef('first_seen')
18
+ crowdstrike_last_seen: PropertyRef = PropertyRef('last_seen')
19
+ local_ip: PropertyRef = PropertyRef('local_ip')
20
+ external_ip: PropertyRef = PropertyRef('external_ip')
21
+ cpu_signature: PropertyRef = PropertyRef('cpu_signature')
22
+ bios_manufacturer: PropertyRef = PropertyRef('bios_manufacturer')
23
+ bios_version: PropertyRef = PropertyRef('bios_version')
24
+ mac_address: PropertyRef = PropertyRef('mac_address')
25
+ os_version: PropertyRef = PropertyRef('os_version')
26
+ os_build: PropertyRef = PropertyRef('os_build')
27
+ platform_id: PropertyRef = PropertyRef('platform_id')
28
+ platform_name: PropertyRef = PropertyRef('platform_name')
29
+ service_provider: PropertyRef = PropertyRef('service_provider')
30
+ service_provider_account_id: PropertyRef = PropertyRef('service_provider_account_id')
31
+ agent_version: PropertyRef = PropertyRef('agent_version')
32
+ system_manufacturer: PropertyRef = PropertyRef('system_manufacturer')
33
+ system_product_name: PropertyRef = PropertyRef('system_product_name')
34
+ product_type: PropertyRef = PropertyRef('product_type')
35
+ product_type_desc: PropertyRef = PropertyRef('product_type_desc')
36
+ provision_status: PropertyRef = PropertyRef('provision_status')
37
+ reduced_functionality_mode: PropertyRef = PropertyRef('reduced_functionality_mode')
38
+ kernel_version: PropertyRef = PropertyRef('kernel_version')
39
+ major_version: PropertyRef = PropertyRef('major_version')
40
+ minor_version: PropertyRef = PropertyRef('minor_version')
41
+ tags: PropertyRef = PropertyRef('tags')
42
+ modified_timestamp: PropertyRef = PropertyRef('modified_timestamp')
43
+ lastupdated: PropertyRef = PropertyRef('lastupdated', set_in_kwargs=True)
44
+
45
+
46
+ @dataclass(frozen=True)
47
+ class CrowdstrikeHostSchema(CartographyNodeSchema):
48
+ label: str = 'CrowdstrikeHost'
49
+ properties: CrowdstrikeHostNodeProperties = CrowdstrikeHostNodeProperties()
cartography/stats.py CHANGED
@@ -97,7 +97,7 @@ def set_stats_client(stats_client: StatsClient) -> None:
97
97
  """
98
98
  This is used to set the module level stats client configured to talk with a statsd host
99
99
  """
100
- global _scoped_stats_client
100
+ global _scoped_stats_client # noqa: F824
101
101
  _scoped_stats_client.set_stats_client(stats_client)
102
102
 
103
103
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cartography
3
- Version: 0.101.1rc1
3
+ Version: 0.101.1rc2
4
4
  Summary: Explore assets and their relationships across your technical infrastructure.
5
5
  Maintainer: Cartography Contributors
6
6
  License: apache2
@@ -1,10 +1,10 @@
1
1
  cartography/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cartography/__main__.py,sha256=JftXT_nUPkqcEh8uxCCT4n-OyHYqbldEgrDS-4ygy0U,101
3
- cartography/_version.py,sha256=8kfUZC7PNnC8p044X5JGd8fihSWqOPBbU8RxewCFS2g,518
3
+ cartography/_version.py,sha256=lOruTfTM2wWzcS6Tb58hcXZGJqOXqfj431-1AWYroHk,518
4
4
  cartography/cli.py,sha256=-77DOKUQn3N-TDIi55V4RHLb3k36ZGZ64o1XgiT0qmE,33370
5
5
  cartography/config.py,sha256=ZcadsKmooAkti9Kv0eDl8Ec1PcZDu3lWobtNaCnwY3k,11872
6
6
  cartography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- cartography/stats.py,sha256=dbybb9V2FuvSuHjjNwz6Vjwnd1hap2C7h960rLoKcl8,4406
7
+ cartography/stats.py,sha256=-KiqrNfUe_39z9TKAQamJwKs5XePnzXscEJocAuNiJs,4420
8
8
  cartography/sync.py,sha256=ziD63T_774gXSuD5zdz6fLGvv1Kt2ntQySSVbmcCZb8,9708
9
9
  cartography/util.py,sha256=VZgiHcAprn3nGzItee4_TggfsGWxWPTkLN-2MIhYUqM,14999
10
10
  cartography/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -13,7 +13,7 @@ cartography/client/aws/iam.py,sha256=dYsGikc36DEsSeR2XVOVFFUDwuU9yWj_EVkpgVYCFgM
13
13
  cartography/client/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  cartography/client/core/tx.py,sha256=55Cf9DJGHHXQk4HmPOdFwr1eh9Pr1nzmIvs4XoCVr0g,10892
15
15
  cartography/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- cartography/data/indexes.cypher,sha256=KMhj8DoKl3d-o6Zx4PY6IZ_8eZNPqZWWVNnOzIi5dRw,26946
16
+ cartography/data/indexes.cypher,sha256=t5HfeNoMRswsOEaZN3vy8XuJEbbXWOQ06l-94vTnHCo,26742
17
17
  cartography/data/permission_relationships.yaml,sha256=RuKGGc_3ZUQ7ag0MssB8k_zaonCkVM5E8I_svBWTmGc,969
18
18
  cartography/data/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  cartography/data/jobs/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -85,7 +85,7 @@ cartography/data/jobs/cleanup/azure_sql_server_cleanup.json,sha256=97I2jIMBkqR3a
85
85
  cartography/data/jobs/cleanup/azure_storage_account_cleanup.json,sha256=XZdjKDOjTcvn9XYScFzHts6cbtYvXETaU142N_R2qlY,5431
86
86
  cartography/data/jobs/cleanup/azure_subscriptions_cleanup.json,sha256=bowUBCjHYlC4Xd60lv33sxRi-bv1wiT5gAOStaHMX4k,430
87
87
  cartography/data/jobs/cleanup/azure_tenant_cleanup.json,sha256=jcjmZH6kfVGZ9q68rfvnroF0kNNHZ2uTZQ17Rmd4FH0,220
88
- cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json,sha256=bBPwftvz1iMUKrqKFCFZEH3LgVRzg-t5fRUh6Chx-vo,1426
88
+ cartography/data/jobs/cleanup/crowdstrike_import_cleanup.json,sha256=mkC96aKS_m7THGQ3LOE_ROXxIk11moK6Fd5cSPkcYsA,1239
89
89
  cartography/data/jobs/cleanup/digitalocean_droplet_cleanup.json,sha256=f26TdPUPYnIp45ipPys5M6VVfConUZySIbkgSr3iQno,703
90
90
  cartography/data/jobs/cleanup/digitalocean_project_cleanup.json,sha256=5mo9vPshCdUZfgTWd_22_TLSyfe6hd41u7z-B8H1qgY,702
91
91
  cartography/data/jobs/cleanup/gcp_compute_firewall_cleanup.json,sha256=FVNJ8EPaPhmQ_sh4vyTdMyEgs6Y-DIoFTdWJaELgz44,1904
@@ -174,7 +174,7 @@ cartography/intel/aws/ec2/images.py,sha256=SLoxcy_PQgNomVMDMdutm0zXJCOLosiHJlN63
174
174
  cartography/intel/aws/ec2/instances.py,sha256=uI8eVJmeEybS8y_T8CVKAkwxJyVDCH7sbuEJYeWGSWY,12468
175
175
  cartography/intel/aws/ec2/internet_gateways.py,sha256=dI-4-85_3DGGZZBcY_DN6XqESx9P26S6jKok314lcnQ,2883
176
176
  cartography/intel/aws/ec2/key_pairs.py,sha256=g4imIo_5jk8upq9J4--erg-OZXG2i3cJMe6SnNCYj9s,2635
177
- cartography/intel/aws/ec2/launch_templates.py,sha256=nHpX-JobVzIHngJ-BBeKwp8wryBjPcJnUX_VJhIU5hE,6233
177
+ cartography/intel/aws/ec2/launch_templates.py,sha256=Bv1mD5-44X1MkCh1Hif-uteozadfdgdQtnr9eX_kzjQ,6910
178
178
  cartography/intel/aws/ec2/load_balancer_v2s.py,sha256=95FfQQn740gexINIHDJizOM4OKzRtQT_y2XQMipQ5Dg,8661
179
179
  cartography/intel/aws/ec2/load_balancers.py,sha256=1GwErzGqi3BKCARqfGJcD_r_D84rFKVy5kNMas9jAok,6756
180
180
  cartography/intel/aws/ec2/network_acls.py,sha256=_UiOx79OxcqH0ecRjcVMglAzz5XJ4aVYLlv6dl_ism4,6809
@@ -202,8 +202,8 @@ cartography/intel/azure/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
202
202
  cartography/intel/azure/util/credentials.py,sha256=99PjTs0vZ2iu0tHD7TohN1VJYjuXYstfMg27F4CE0xU,7416
203
203
  cartography/intel/bigfix/__init__.py,sha256=3LoDCm01VNNaDRGsRiykJm1GJgUQ8zI1HO6NodLFVIA,1058
204
204
  cartography/intel/bigfix/computers.py,sha256=HAwA-muDBLu2xkFFL2Ae-xjCH1gxKKwxGMZM4BE_Qdo,5909
205
- cartography/intel/crowdstrike/__init__.py,sha256=dAtgI-0vZAQZ3cTFQhMEzzt7aqiNSNuiIYiw0qbut-I,1896
206
- cartography/intel/crowdstrike/endpoints.py,sha256=1Sn8jC5YARKbec-idUZniqCTLldde5ymwpBzSeGZVoM,3835
205
+ cartography/intel/crowdstrike/__init__.py,sha256=qDFCtNzUSnvMZFFoLjRAPK3pbKpIO6BaerY3bDyEASc,2397
206
+ cartography/intel/crowdstrike/endpoints.py,sha256=MVuUw7yXesJmQL79lbPxOnHjO48lD3WCH5WzL5asKUU,2144
207
207
  cartography/intel/crowdstrike/spotlight.py,sha256=yNhj44-RYF6ubck-hHMKhKiNU0fCfhQf4Oagopc31EM,4754
208
208
  cartography/intel/crowdstrike/util.py,sha256=gfJ6Ptr6YdbBS9Qj9a_-Jc-IJroADDRcXqjh5TW0qXE,277
209
209
  cartography/intel/cve/__init__.py,sha256=u9mv5O_qkSLmdhLhLm1qbwmhoeLQ3A3fQTjNyLQpEyI,3656
@@ -238,7 +238,7 @@ cartography/intel/jamf/__init__.py,sha256=Nof-LrUeevoieo6oP2GyfTwx8k5TUIgreW6hSj
238
238
  cartography/intel/jamf/computers.py,sha256=EfjlupQ-9HYTjOrmuwrGuJDy9ApAnJvk8WrYcp6_Jkk,1673
239
239
  cartography/intel/jamf/util.py,sha256=EAyP8VpOY2uAvW3HtX6r7qORNjGa1Tr3fuqezuLQ0j4,1017
240
240
  cartography/intel/kandji/__init__.py,sha256=Y38bVRmrGVJRy0mSof8xU-cuEyJ7N_oI7KekYjYyuiQ,1076
241
- cartography/intel/kandji/devices.py,sha256=j_rP6rQ5VPT_XEcGXx7Yt6eCOm1Oe3I2qWIxXODXEcA,2224
241
+ cartography/intel/kandji/devices.py,sha256=bRePUC0xFeaST3PQdJ6Af2MdTeFZuIVq4r7CY5YEid0,2797
242
242
  cartography/intel/kubernetes/__init__.py,sha256=jaOTEanWnTrYvcBN1XUC5oqBhz1AJbFmzoT9uu_VBSg,1481
243
243
  cartography/intel/kubernetes/namespaces.py,sha256=6o-FgAX_Ai5NCj2xOWM-RNWEvn0gZjVQnZSGCJlcIhw,2710
244
244
  cartography/intel/kubernetes/pods.py,sha256=aX3pP_vs6icMe2vK4vgMak6HZ64okhRzoihpkPHscGU,4502
@@ -329,6 +329,8 @@ cartography/models/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
329
329
  cartography/models/core/common.py,sha256=Bk0dCBkO9Udj9v4e8WE9mgBGaZTI170m9QpoiiYoz48,6206
330
330
  cartography/models/core/nodes.py,sha256=h5dwBOk_a2uCHZWeQz3pidr7gkqMKf7buIZgl6M1Ox4,3699
331
331
  cartography/models/core/relationships.py,sha256=6AwXvk0dq48BxqyxBpHyBXZ3dJNm65t1y4vNg4n25uA,5103
332
+ cartography/models/crowdstrike/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
333
+ cartography/models/crowdstrike/hosts.py,sha256=5PiDAhCPWDUd9kE61FliaPzsuIQBZRIQ87eHMgQF_M4,2672
332
334
  cartography/models/cve/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
333
335
  cartography/models/cve/cve.py,sha256=zaCLcGuEL2EnScExjbmpPBNVBivMBKnnRajCYL0LJFE,3720
334
336
  cartography/models/cve/cve_feed.py,sha256=A_h9ET2vQYGpgMr8_--iqdQfF5ZyUNM6aQDruUuA5OU,740
@@ -360,9 +362,9 @@ cartography/models/snipeit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
360
362
  cartography/models/snipeit/asset.py,sha256=FyRAaeXuZjMy0eUQcSDFcgEAF5lbLMlvqp1Tv9d3Lv4,3238
361
363
  cartography/models/snipeit/tenant.py,sha256=p4rFnpNNuF1W5ilGBbexDaETWTwavfb38RcQGoImkQI,679
362
364
  cartography/models/snipeit/user.py,sha256=MsB4MiCVNTH6JpESime7cOkB89autZOXQpL6Z0l7L6o,2113
363
- cartography-0.101.1rc1.dist-info/licenses/LICENSE,sha256=kvLEBRYaQ1RvUni6y7Ti9uHeooqnjPoo6n_-0JO1ETc,11351
364
- cartography-0.101.1rc1.dist-info/METADATA,sha256=UxWV1DHIXB3ZSFQDE9bmM_21i4gh-3wkYnXgNJlBiG0,11909
365
- cartography-0.101.1rc1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
366
- cartography-0.101.1rc1.dist-info/entry_points.txt,sha256=GVIAWD0o0_K077qMA_k1oZU4v-M0a8GLKGJR8tZ-qH8,112
367
- cartography-0.101.1rc1.dist-info/top_level.txt,sha256=BHqsNJQiI6Q72DeypC1IINQJE59SLhU4nllbQjgJi9g,12
368
- cartography-0.101.1rc1.dist-info/RECORD,,
365
+ cartography-0.101.1rc2.dist-info/licenses/LICENSE,sha256=kvLEBRYaQ1RvUni6y7Ti9uHeooqnjPoo6n_-0JO1ETc,11351
366
+ cartography-0.101.1rc2.dist-info/METADATA,sha256=EJwfITVKkdw-MJYwpKuAVYQ9uBgh3RECunXMu3GiyK8,11909
367
+ cartography-0.101.1rc2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
368
+ cartography-0.101.1rc2.dist-info/entry_points.txt,sha256=GVIAWD0o0_K077qMA_k1oZU4v-M0a8GLKGJR8tZ-qH8,112
369
+ cartography-0.101.1rc2.dist-info/top_level.txt,sha256=BHqsNJQiI6Q72DeypC1IINQJE59SLhU4nllbQjgJi9g,12
370
+ cartography-0.101.1rc2.dist-info/RECORD,,