From 62c96fcbf63af38fd821b789a26de4709dda635b Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Tue, 13 Dec 2022 17:51:01 +0100 Subject: [PATCH] Added rule icons --- createreadmes.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/createreadmes.py b/createreadmes.py index 97268ed..2c7115a 100644 --- a/createreadmes.py +++ b/createreadmes.py @@ -4,7 +4,7 @@ import json import itertools import yaml import jsonschema -from typing import Any, List, NotRequired, Optional, TypedDict +from typing import Any, Dict, List, Literal, NotRequired, Optional, TypedDict import requests try: from yachalk import chalk @@ -220,8 +220,10 @@ class Artifact(TypedDict): lines: NotRequired[list[int]] repository: NotRequired[str] +RuleStatus = Literal["disregarded", "observed", "not applicable", "unknown"] + class SecurityRule(TypedDict): - status: str + status: RuleStatus argument: str | list[str] artifacts: NotRequired[list[Artifact]] @@ -322,7 +324,7 @@ def rule_to_string(info: ModelInformation, id: int, rule: SecurityRule | None): return "" argument = rule['argument'] argument = argument if isinstance(argument, str) else "".join(f"\n1. {arg}" for arg in argument) - text = f"""#### Rule {id}: {rule_names[id]} + text = f"""#### Rule {id}: {rule_names[id]} {{#rule{id:02}}} This rule is {rule['status']}: {argument}""" artifacts = rule.get("artifacts", []) @@ -334,8 +336,18 @@ Artifacts: return text def write_security_rules(info: ModelInformation, security_rules: dict[int, SecurityRule]): + icons: Dict[RuleStatus | str, str] = { + 'disregarded': '', + 'observed': '', + 'not applicable': '', + 'unknown': '', + } return f"""## Security Rules +{" | ".join(f"R{i}" for i in range(1, 19))} +{" | ".join("--" for _ in range(1, 19))} +{" | ".join(f'{icons[security_rules.get(i, {"status": "unknown"})["status"]]}' for i in range(1, 19))} + ### Authentication / Authorization {(chr(10)*2).join(rule_to_string(info, i, security_rules.get(i)) for i in range(1, 7))}