diff --git a/.gitignore b/.gitignore index b6e4761..58e4800 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,7 @@ dmypy.json # Pyre type checker .pyre/ + +# Dont store CSV files or reports +*.csv +report.html diff --git a/README.md b/README.md index 1cae9e0..6573951 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,20 @@ # prowler-report Quick prototype for rendering Prowler scan CSV exports in pretty HTML + +## Setup + +``` +git clone https://github.com/lalanza808/prowler-report +cd prowler-report +python3 -m venv .venv +source .venv/bin/activate +pip install -r requirements.txt +``` + +## Running + +I've hardcoded paths for now. Make sure your CSV export is stored in this directory as "prowler-test.csv" + +``` +.venv/bin/python generate_report.py +``` diff --git a/generate_report.py b/generate_report.py new file mode 100644 index 0000000..821003e --- /dev/null +++ b/generate_report.py @@ -0,0 +1,39 @@ +from jinja2 import Template +from os import path +from csv import reader + + +def run(): + csv_data = {} + + with open('template.html') as f: + tpl = f.read() + + with open('prowler-test.csv') as csv_file: + csv_reader = reader(csv_file, delimiter=',') + for idx, row in enumerate(csv_reader): + csv_data[idx] = { + 'profile': row[0], + 'account_id': row[1], + 'region': row[2], + 'title_id': row[3], + 'result': row[4], + 'scored': row[5], + 'level': row[6], + 'title_text': row[7], + 'notes': row[8], + 'compliance': row[9], + 'severity': row[10], + 'service_name': row[11], + } + + t = Template(tpl) + rendered = t.render(data=csv_data) + + with open('report.html', 'w') as f: + f.write(rendered) + print('Generated report as "report.html"') + + +if __name__ == '__main__': + run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7f7afbf --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +jinja2 diff --git a/template.html b/template.html new file mode 100644 index 0000000..b856674 --- /dev/null +++ b/template.html @@ -0,0 +1,27 @@ + + + + Jinja2 Template Example + + + + + +
+

Loop through the list:

+ +
+ + + +