mirror of https://github.com/MISP/misp-galaxy
Fix [generator] relations
parent
45bd5f7ddb
commit
65b87b53fe
|
@ -102,7 +102,8 @@ class Galaxy():
|
||||||
uuid=cluster.get('uuid', None),
|
uuid=cluster.get('uuid', None),
|
||||||
date=cluster.get('date', None),
|
date=cluster.get('date', None),
|
||||||
related_list=cluster.get('related', None),
|
related_list=cluster.get('related', None),
|
||||||
meta=cluster.get('meta', None)
|
meta=cluster.get('meta', None),
|
||||||
|
galaxie=self.name
|
||||||
))
|
))
|
||||||
return clusters
|
return clusters
|
||||||
|
|
||||||
|
@ -119,7 +120,7 @@ class Galaxy():
|
||||||
return self.entry
|
return self.entry
|
||||||
|
|
||||||
class Cluster():
|
class Cluster():
|
||||||
def __init__(self, description, uuid, date, value, related_list, meta):
|
def __init__(self, description, uuid, date, value, related_list, meta, galaxie):
|
||||||
self.description = description
|
self.description = description
|
||||||
self.uuid = uuid
|
self.uuid = uuid
|
||||||
self.date = date
|
self.date = date
|
||||||
|
@ -127,6 +128,7 @@ class Cluster():
|
||||||
self.related_list = related_list
|
self.related_list = related_list
|
||||||
self.meta = meta
|
self.meta = meta
|
||||||
self.entry = ""
|
self.entry = ""
|
||||||
|
self.galaxie = galaxie
|
||||||
|
|
||||||
def _create_title_entry(self):
|
def _create_title_entry(self):
|
||||||
self.entry += f'## {self.value}\n'
|
self.entry += f'## {self.value}\n'
|
||||||
|
@ -198,11 +200,15 @@ class Cluster():
|
||||||
visited = set()
|
visited = set()
|
||||||
|
|
||||||
related_clusters = []
|
related_clusters = []
|
||||||
if depth == 0 or not self.related_list:
|
if depth == 0 or not self.related_list or self.uuid in visited:
|
||||||
return related_clusters
|
return related_clusters
|
||||||
|
|
||||||
|
visited.add(self.uuid)
|
||||||
|
|
||||||
for cluster in self.related_list:
|
for cluster in self.related_list:
|
||||||
dest_uuid = cluster["dest-uuid"]
|
dest_uuid = cluster["dest-uuid"]
|
||||||
|
|
||||||
|
# Cluster is private
|
||||||
if dest_uuid not in cluster_dict:
|
if dest_uuid not in cluster_dict:
|
||||||
# Check if UUID is empty
|
# Check if UUID is empty
|
||||||
if not dest_uuid:
|
if not dest_uuid:
|
||||||
|
@ -211,27 +217,28 @@ class Cluster():
|
||||||
private_relations_count += 1
|
private_relations_count += 1
|
||||||
if dest_uuid not in private_clusters:
|
if dest_uuid not in private_clusters:
|
||||||
private_clusters.append(dest_uuid)
|
private_clusters.append(dest_uuid)
|
||||||
related_clusters.append((self, Cluster(value="Private Cluster", uuid=dest_uuid, date=None, description=None, related_list=None, meta=None)))
|
related_clusters.append((self, Cluster(value="Private Cluster", uuid=dest_uuid, date=None, description=None, related_list=None, meta=None, galaxie=None)))
|
||||||
continue
|
continue
|
||||||
if dest_uuid in visited:
|
|
||||||
continue
|
|
||||||
visited.add(dest_uuid)
|
|
||||||
related_cluster = cluster_dict[dest_uuid]
|
related_cluster = cluster_dict[dest_uuid]
|
||||||
|
|
||||||
public_relations_count += 1
|
public_relations_count += 1
|
||||||
if dest_uuid not in public_clusters:
|
if dest_uuid not in public_clusters:
|
||||||
public_clusters.append(dest_uuid)
|
public_clusters.append(dest_uuid)
|
||||||
|
|
||||||
related_clusters.append((self, related_cluster))
|
related_clusters.append((self, related_cluster))
|
||||||
|
|
||||||
if depth > 1 or depth == -1:
|
if (depth > 1 or depth == -1) and related_cluster.uuid not in visited:
|
||||||
new_depth = depth - 1 if depth > 1 else -1
|
new_depth = depth - 1 if depth > 1 else -1
|
||||||
related_clusters += related_cluster.get_related_clusters(depth=new_depth, visited=visited)
|
related_clusters += related_cluster.get_related_clusters(depth=new_depth, visited=visited)
|
||||||
|
|
||||||
if empty_uuids > 0:
|
if empty_uuids > 0:
|
||||||
empty_uuids_dict[self.value] = empty_uuids
|
empty_uuids_dict[self.value] = empty_uuids
|
||||||
|
|
||||||
for cluster in related_clusters:
|
for cluster in related_clusters:
|
||||||
if (cluster[1], cluster[0]) in related_clusters:
|
if (cluster[1], cluster[0]) in related_clusters:
|
||||||
related_clusters.remove(cluster)
|
related_clusters.remove(cluster)
|
||||||
|
|
||||||
return related_clusters
|
return related_clusters
|
||||||
|
|
||||||
def _create_related_entry(self):
|
def _create_related_entry(self):
|
||||||
|
@ -277,9 +284,6 @@ for galaxy in galaxies:
|
||||||
for cluster in galaxy.clusters:
|
for cluster in galaxy.clusters:
|
||||||
cluster_dict[cluster.uuid] = cluster
|
cluster_dict[cluster.uuid] = cluster
|
||||||
|
|
||||||
# test = cluster_dict['f0ec2df5-2e38-4df3-970d-525352006f2e']
|
|
||||||
# print(test.get_related_clusters())
|
|
||||||
|
|
||||||
def create_index(intro, contributing, galaxies):
|
def create_index(intro, contributing, galaxies):
|
||||||
index_output = intro
|
index_output = intro
|
||||||
for galaxie in galaxies:
|
for galaxie in galaxies:
|
||||||
|
@ -327,3 +331,13 @@ if __name__ == "__main__":
|
||||||
print(f"Number of empty UUIDs: {sum(empty_uuids_dict.values())}")
|
print(f"Number of empty UUIDs: {sum(empty_uuids_dict.values())}")
|
||||||
print(f"Empty UUIDs per cluster: {empty_uuids_dict}")
|
print(f"Empty UUIDs per cluster: {empty_uuids_dict}")
|
||||||
|
|
||||||
|
# test = cluster_dict['f0ec2df5-2e38-4df3-970d-525352006f2e']
|
||||||
|
# test = cluster_dict['d7247cf9-13b6-4781-b789-a5f33521633b']
|
||||||
|
# clusters = test.get_related_clusters()
|
||||||
|
# print(clusters)
|
||||||
|
# print(len(clusters))
|
||||||
|
# print("```mermaid")
|
||||||
|
# print(f"graph TD")
|
||||||
|
# for cluster in clusters:
|
||||||
|
# print(f"{cluster[0].uuid}[{cluster[0].value}] --- {cluster[1].uuid}[{cluster[1].value}]")
|
||||||
|
# print("```")
|
||||||
|
|
Loading…
Reference in New Issue