2024-02-10 15:24:57 -05:00
|
|
|
import os
|
|
|
|
import yaml
|
|
|
|
import logging
|
|
|
|
|
|
|
|
# Configure Logging
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
yaml_file_path = os.path.join(project_root, 'personal-security-checklist.yml')
|
|
|
|
markdown_file_path = os.path.join(project_root, 'CHECKLIST.md')
|
|
|
|
|
|
|
|
|
|
|
|
def read_yaml(file_path):
|
|
|
|
logger.info(f"Reading YAML file from {file_path}...")
|
|
|
|
with open(file_path, 'r') as file:
|
|
|
|
return yaml.safe_load(file)
|
|
|
|
|
|
|
|
def generate_markdown_section(section):
|
|
|
|
markdown = f"## {section['title']}\n\n"
|
|
|
|
markdown += f"{section['intro']}\n\n"
|
|
|
|
markdown += "**Security** | **Priority** | **Details and Hints**\n"
|
|
|
|
markdown += "--- | --- | ---\n"
|
|
|
|
for item in section['checklist']:
|
|
|
|
markdown += f"**{item['point']}** | {item['priority']} | {item['details']}\n"
|
|
|
|
|
|
|
|
if 'softwareLinks' in section:
|
|
|
|
software_links = [software for software in section['softwareLinks'] if 'title' in software and 'url' in software]
|
|
|
|
if software_links:
|
|
|
|
markdown += "\n### Recommended Software\n"
|
|
|
|
for software in software_links:
|
|
|
|
markdown += f"- [{software['title']}]({software['url']})\n"
|
|
|
|
|
|
|
|
return markdown
|
|
|
|
|
|
|
|
def insert_markdown_content(md_file_path, new_content):
|
|
|
|
start_marker, end_marker = "<!-- checklist-start -->", "<!-- checklist-end -->"
|
|
|
|
logger.info(f"Inserting generated markdown into {md_file_path} between markers...")
|
|
|
|
|
|
|
|
with open(md_file_path, 'r') as file:
|
|
|
|
content = file.read()
|
|
|
|
|
|
|
|
start_index = content.find(start_marker)
|
|
|
|
end_index = content.find(end_marker, start_index)
|
|
|
|
|
|
|
|
if start_index == -1 or end_index == -1:
|
|
|
|
logger.error("Markers not found in the markdown file.")
|
|
|
|
return
|
|
|
|
|
|
|
|
updated_content = content[:start_index + len(start_marker)] + "\n" + new_content + "\n" + content[end_index:]
|
|
|
|
|
|
|
|
with open(md_file_path, 'w') as file:
|
|
|
|
file.write(updated_content)
|
|
|
|
logger.info("Markdown content successfully inserted.")
|
|
|
|
|
|
|
|
def main():
|
|
|
|
yaml_data = read_yaml(yaml_file_path)
|
|
|
|
markdown_content = ""
|
|
|
|
for section in yaml_data:
|
|
|
|
markdown_content += generate_markdown_section(section) + "\n\n"
|
|
|
|
insert_markdown_content(markdown_file_path, markdown_content)
|
|
|
|
logger.info("Script completed successfully!")
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|