Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions custom_jinja_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def clean_stix_data(data):

def get_citations(data):
"""Given a description, find all of the citations."""
p = re.compile("\(Citation: (.*?)\)")
p = re.compile(r"\(Citation: (.*?)\)")
return p.findall(data)


Expand All @@ -92,7 +92,7 @@ def get_html_citation(citations, citation_name):
if citation:
ref_number = None
description = citation.get("description")

if citation.get("number"):
ref_number = citation["number"]
else:
Expand All @@ -101,10 +101,19 @@ def get_html_citation(citations, citation_name):
citation["number"] = ref_number

if not citation.get("url"):
reference_html = reference_marker_template_no_url.format(ref_number, ref_number, citation_name, description, ref_number)
reference_html = reference_marker_template_no_url.format(
ref_number, ref_number, citation_name, description, ref_number
)
else:
reference_html = reference_marker_template.format(
ref_number, ref_number, description, citation_name, citation["url"], ref_number - 1, ref_number - 1, ref_number
ref_number,
ref_number,
description,
citation_name,
citation["url"],
ref_number - 1,
ref_number - 1,
ref_number,
)

return reference_html
Expand Down Expand Up @@ -158,7 +167,7 @@ def stixToHTML(data, citations, firstParagraphOnly, convert):
citations (optional, object), if not None, add citation markers to the data.
firstParagraphOnly (optional, boolean), if true, only return the first paragraph of the data in question.
"""
if (convert):
if convert:
# Replace data from markdown format
data = markdown.markdown(data)

Expand Down
4 changes: 3 additions & 1 deletion modules/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ def sort_menu_by_priority():
def sort_run_ptr_by_priority():
global run_ptr
run_ptr = sorted(run_ptr, key=lambda k: k["priority"])
print(f"Building website using the following modules in this order: {[pointer_info['module_name'] for pointer_info in run_ptr]}")
print(
f"Building website using the following modules in this order: {[pointer_info['module_name'] for pointer_info in run_ptr]}"
)


def check_redirections(redirections_list):
Expand Down
1 change: 1 addition & 0 deletions modules/assets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
def get_priority():
return assets_config.priority


def run_module():
return (assets.generate_assets(), assets_config.module_name)
23 changes: 11 additions & 12 deletions modules/assets/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,18 +51,14 @@ def generate_markdown_files():
data = {}

notes = util.relationshipgetters.get_objects_using_notes()
side_menu_data = util.buildhelpers.get_side_menu_data(
"Assets", "/assets/", asset_list_no_deprecated_revoked
)
side_menu_data = util.buildhelpers.get_side_menu_data("Assets", "/assets/", asset_list_no_deprecated_revoked)
data["side_menu_data"] = side_menu_data
data["assets_table"] = get_assets_table_data(asset_list_no_deprecated_revoked)
data["assets_list_len"] = str(len(asset_list_no_deprecated_revoked))

subs = assets_config.asset_index_md + json.dumps(data)

with open(
os.path.join(assets_config.asset_markdown_path, "overview.md"), "w", encoding="utf8"
) as md_file:
with open(os.path.join(assets_config.asset_markdown_path, "overview.md"), "w", encoding="utf8") as md_file:
md_file.write(subs)

# Create the markdown for assets
Expand All @@ -77,7 +73,8 @@ def generate_asset_md(asset, side_menu_data, notes):

attack_id = util.buildhelpers.get_attack_id(asset)

if not attack_id: return
if not attack_id:
return

data = {}
data["attack_id"] = attack_id
Expand Down Expand Up @@ -178,7 +175,8 @@ def get_assets_table_data(asset_list):
assets_table_data = []
for asset in asset_list:
attack_id = util.buildhelpers.get_attack_id(asset)
if not attack_id: continue
if not attack_id:
continue

domain_list = util.buildhelpers.get_domain_name(asset)
row = {
Expand All @@ -187,7 +185,7 @@ def get_assets_table_data(asset_list):
}

for domain_idx in range(len(domain_list)):
domain_list[domain_idx] = domain_list[domain_idx].replace('-attack','')
domain_list[domain_idx] = domain_list[domain_idx].replace("-attack", "")
if domain_list[domain_idx] == "ics":
domain_list[domain_idx] = domain_list[domain_idx].upper()
else:
Expand All @@ -206,12 +204,13 @@ def get_assets_table_data(asset_list):


def get_related_asset_data(related_assets):
if not related_assets: return []
if not related_assets:
return []

related_asset_data = []
for related_asset in related_assets:
row = {
"name": related_asset["name"], # required
"name": related_asset["name"], # required
}
if related_asset.get("related_asset_sectors"):
related_asset["related_asset_sectors"].sort()
Expand All @@ -224,7 +223,7 @@ def get_related_asset_data(related_assets):

def get_techniques_targeting_asset_data(asset, reference_list):
"""Given an asset and its reference list, get the techniques targeting the asset.
Check the reference list for citations, if not found in list, add it.
Check the reference list for citations, if not found in list, add it.
"""
technique_list = {}
techniques_targeting_assets = util.relationshipgetters.get_techniques_targeting_assets()
Expand Down
8 changes: 2 additions & 6 deletions modules/assets/assets_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,10 @@
asset_markdown_path = "content/pages/assets/"

# String template for asset index page
asset_index_md = (
"Title: Asset overview\nTemplate: assets/assets-index\nsave_as: assets/index.html\ndata: "
)
asset_index_md = "Title: Asset overview\nTemplate: assets/assets-index\nsave_as: assets/index.html\ndata: "

# String template for asset page
asset_md = Template(
"Title: ${name}\nTemplate: assets/asset\nsave_as: assets/${attack_id}/index.html\ndata: "
)
asset_md = Template("Title: ${name}\nTemplate: assets/asset\nsave_as: assets/${attack_id}/index.html\ndata: ")

# Path for templates
assets_templates_path = "modules/assets/templates/"
Expand Down
1 change: 1 addition & 0 deletions modules/benefactors/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ def get_menu():
"children": [],
}


def run_module():
return (benefactors.generate_benefactors(), benefactors_config.module_name)
4 changes: 3 additions & 1 deletion modules/benefactors/benefactors.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,7 @@ def generate_benefactors():
benefactors_md = benefactors_config.benefactors_md

# write markdown to file
with open(os.path.join(benefactors_config.benefactors_markdown_path, "benefactors.md"), "w", encoding="utf8") as md_file:
with open(
os.path.join(benefactors_config.benefactors_markdown_path, "benefactors.md"), "w", encoding="utf8"
) as md_file:
md_file.write(benefactors_md)
5 changes: 4 additions & 1 deletion modules/benefactors/benefactors_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@

# String template for benefactors index page
benefactors_md = (
"Title: Benefactors\n" "Template: benefactors/benefactors\n" "save_as: resources/engage-with-attack/benefactors/index.html\n" "data: "
"Title: Benefactors\n"
"Template: benefactors/benefactors\n"
"save_as: resources/engage-with-attack/benefactors/index.html\n"
"data: "
)

benefactors_templates_path = "modules/benefactors/templates"
1 change: 1 addition & 0 deletions modules/campaigns/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
def get_priority():
return campaigns_config.priority


def run_module():
return (campaigns.generate_campaigns(), campaigns_config.module_name)
5 changes: 4 additions & 1 deletion modules/campaigns/campaigns.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ def get_software_table_data(campaign, reference_list):
software_data = sorted(software_data, key=lambda k: k["name"].lower())
return software_data


def generate_sidebar_campaigns(side_menu_data):
"""Responsible for generating the sidebar for the campaigns pages."""
logger.info("Generating campaigns sidebar")
Expand All @@ -316,5 +317,7 @@ def generate_sidebar_campaigns(side_menu_data):
sidebar_campaigns_md = campaigns_config.sidebar_campaigns_md + json.dumps(data)

# write markdown to file
with open(os.path.join(campaigns_config.campaign_markdown_path, "sidebar_campaigns.md"), "w", encoding="utf8") as md_file:
with open(
os.path.join(campaigns_config.campaign_markdown_path, "sidebar_campaigns.md"), "w", encoding="utf8"
) as md_file:
md_file.write(sidebar_campaigns_md)
6 changes: 3 additions & 3 deletions modules/campaigns/campaigns_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@

# String template for campaign index page
campaign_index_md = (
"Title: Campaign overview\n" "Template: campaigns/campaigns-index\n" "save_as: campaigns/index.html\n" "data: "
"Title: Campaign overview\nTemplate: campaigns/campaigns-index\nsave_as: campaigns/index.html\ndata: "
)

# String template for campaign page
campaign_md = Template(
"Title: ${name}\n" "Template: campaigns/campaign\n" "save_as: campaigns/${attack_id}/index.html\n" "data: "
"Title: ${name}\nTemplate: campaigns/campaign\nsave_as: campaigns/${attack_id}/index.html\ndata: "
)

# Path for templates
Expand All @@ -26,4 +26,4 @@
"Template: general/sidebar-template \n"
"save_as: campaigns/sidebar-campaigns/index.html\n"
"data: "
)
)
24 changes: 17 additions & 7 deletions modules/datasources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,23 @@ def get_menu():
"priority": datasources_config.priority,
"children": [
{"display_name": "Data Sources", "url": "/datasources", "external_link": False, "children": []},
{"display_name": "Mitigations", "url": "/mitigations/", "external_link": False, "children": [
{"display_name": "Enterprise", "url": "/mitigations/enterprise/", "external_link": False, "children": []},
{"display_name": "Mobile", "url": "/mitigations/mobile/", "external_link": False, "children": []},
{"display_name": "ICS", "url": "/mitigations/ics/", "external_link": False, "children": []},
]},
{"display_name": "Assets", "url": "/assets", "external_link": False, "children": [] }
]
{
"display_name": "Mitigations",
"url": "/mitigations/",
"external_link": False,
"children": [
{
"display_name": "Enterprise",
"url": "/mitigations/enterprise/",
"external_link": False,
"children": [],
},
{"display_name": "Mobile", "url": "/mitigations/mobile/", "external_link": False, "children": []},
{"display_name": "ICS", "url": "/mitigations/ics/", "external_link": False, "children": []},
],
},
{"display_name": "Assets", "url": "/assets", "external_link": False, "children": []},
],
}


Expand Down
35 changes: 19 additions & 16 deletions modules/datasources/datasources.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ def get_datasources_table_data(datasource_list):
row["id"] = attack_id

for domain_idx in range(len(domain_list)):
domain_list[domain_idx] = domain_list[domain_idx].replace('-attack','')
domain_list[domain_idx] = domain_list[domain_idx].replace("-attack", "")
if domain_list[domain_idx] == "ics":
domain_list[domain_idx] = domain_list[domain_idx].upper()
else:
Expand Down Expand Up @@ -322,21 +322,22 @@ def get_datacomponents_data(datasource, reference_list):


def get_domains_of_datacomponent(datacomponent, techniques_detected_by_datacomponent, technique_to_domain):
"""Retrives domains of given data component"""
domains_of_datacomponent = []
"""Retrives domains of given data component"""
domains_of_datacomponent = []

# get data components to techniques mapping to find domains
techniques_of_datacomp = techniques_detected_by_datacomponent.get(datacomponent["id"])
if techniques_of_datacomp:
technique_list = {}
for technique_rel in techniques_of_datacomp:
attack_id = util.buildhelpers.get_attack_id(technique_rel["object"])
if attack_id:
domain = technique_to_domain[attack_id].split("-")[0]
if not domain in domains_of_datacomponent:
domains_of_datacomponent.append(domain)
# get data components to techniques mapping to find domains
techniques_of_datacomp = techniques_detected_by_datacomponent.get(datacomponent["id"])
if techniques_of_datacomp:
technique_list = {}
for technique_rel in techniques_of_datacomp:
attack_id = util.buildhelpers.get_attack_id(technique_rel["object"])
if attack_id:
domain = technique_to_domain[attack_id].split("-")[0]
if not domain in domains_of_datacomponent:
domains_of_datacomponent.append(domain)

return domains_of_datacomponent

return domains_of_datacomponent

def get_datasources_domain(datasource):
"""Responsible for generating the list of domains for the datasources and datacomponents."""
Expand All @@ -357,10 +358,12 @@ def get_datasources_domain(datasource):
# get data component detections
techniques_of_datacomp = techniques_detected_by_datacomponent.get(datacomponent["id"])
if techniques_of_datacomp:
domains_of_datacomponent = get_domains_of_datacomponent(datacomponent, techniques_detected_by_datacomponent, technique_to_domain)
domains_of_datacomponent = get_domains_of_datacomponent(
datacomponent, techniques_detected_by_datacomponent, technique_to_domain
)
# Add missing domains to data source
for domain in domains_of_datacomponent:
if not domain in domains_of_datasource:
domains_of_datasource.append(domain)

return domains_of_datasource
return domains_of_datasource
9 changes: 3 additions & 6 deletions modules/datasources/datasources_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,13 @@

# String template for data sources index page
datasource_index_md = (
"Title: Data Sources overview\n"
"Template: datasources/datasources-index\n"
"save_as: datasources/index.html\n"
"data: "
"Title: Data Sources overview\nTemplate: datasources/datasources-index\nsave_as: datasources/index.html\ndata: "
)

# String template for data source page
datasource_md = Template(
"Title: ${name}\n" "Template: datasources/datasource\n" "save_as: datasources/${attack_id}/index.html\n" "data: "
"Title: ${name}\nTemplate: datasources/datasource\nsave_as: datasources/${attack_id}/index.html\ndata: "
)

# Path for templates
datasources_templates_path = "modules/datasources/templates/"
datasources_templates_path = "modules/datasources/templates/"
4 changes: 3 additions & 1 deletion modules/groups/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
def get_priority():
return groups_config.priority


def get_menu():
return {
"display_name": groups_config.module_tab_name,
Expand All @@ -17,8 +18,9 @@ def get_menu():
{"display_name": "Groups", "url": "/groups", "external_link": False, "children": []},
{"display_name": "Software", "url": "/software", "external_link": False, "children": []},
{"display_name": "Campaigns", "url": "/campaigns", "external_link": False, "children": []},
]
],
}


def run_module():
return (groups.generate_groups(), groups_config.module_name)
11 changes: 4 additions & 7 deletions modules/groups/groups_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,16 @@
group_markdown_path = "content/pages/groups/"

# String template for group index page
group_index_md = "Title: Group overview\n" "Template: groups/groups-index\n" "save_as: groups/index.html\n" "data: "
group_index_md = "Title: Group overview\nTemplate: groups/groups-index\nsave_as: groups/index.html\ndata: "

# String template for group page
group_md = Template("Title: ${name}\n" "Template: groups/group\n" "save_as: groups/${attack_id}/index.html\n" "data: ")
group_md = Template("Title: ${name}\nTemplate: groups/group\nsave_as: groups/${attack_id}/index.html\ndata: ")

# Path for templates
groups_templates_path = "modules/groups/templates/"

groups_redirection_location = "modules/groups/groups_redirections.json"

sidebar_groups_md = (
"Title: Groups Sidebar\n"
"Template: general/sidebar-template \n"
"save_as: groups/sidebar-groups/index.html\n"
"data: "
)
"Title: Groups Sidebar\nTemplate: general/sidebar-template \nsave_as: groups/sidebar-groups/index.html\ndata: "
)
Loading
Loading