91 lines
3.3 KiB
Python
91 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from datetime import datetime
|
|
import jinja2
|
|
|
|
|
|
def generateHtmlReport(path, data):
|
|
today = datetime.now().isoformat()[0:10]
|
|
dataJinja2 = dict()
|
|
dataJinja2['title'] = 'Report check system'
|
|
dataJinja2['plugins'] = list()
|
|
|
|
# Env jinja2
|
|
env = jinja2.Environment(
|
|
loader=jinja2.PackageLoader("reports"),
|
|
autoescape=jinja2.select_autoescape()
|
|
)
|
|
# print(env.list_templates())
|
|
tmplIndex = env.get_template("index.html.j2")
|
|
|
|
body = str()
|
|
for plugin in data['system']:
|
|
dataJinja2['plugins'].append(f"{plugin}.html.j2")
|
|
|
|
if 'postfix' in data['system']:
|
|
dataJinja2['postfix'] = dict()
|
|
dataJinja2['postfix']['filename'] = data["system"]["postfix"]["filename"]
|
|
dataJinja2['postfix']['vulnerabilities'] = data['system']['postfix']['postfix']
|
|
|
|
_generateAccordion(dataJinja2['postfix']['vulnerabilities'], 'postfix')
|
|
|
|
if 'sysctl' in data['system']:
|
|
dataJinja2['sysctl'] = dict()
|
|
dataJinja2['sysctl']['file'] = dict()
|
|
dataJinja2['sysctl']['file']['filename'] = data['system']['sysctl']['file']['filename']
|
|
dataJinja2['sysctl']['file']['sysctl'] = data['system']['sysctl']['file']['sysctl']
|
|
|
|
_generateAccordion(dataJinja2['sysctl']['file']['sysctl'], 'sysctl')
|
|
|
|
if 'apache' in data['system']:
|
|
dataJinja2['apache'] = data['system']['apache']
|
|
|
|
if data['system']['apache']['audit']:
|
|
if data['system']['apache']['ssl']['audit']:
|
|
_generateAccordion(
|
|
dataJinja2["apache"]["ssl"]["virtualhost"],
|
|
"apache-virtualhost"
|
|
)
|
|
if data['system']['apache']['signature']['audit']:
|
|
_generateAccordion(
|
|
dataJinja2["apache"]["signature"]["signature"],
|
|
"apache-signature"
|
|
)
|
|
if data['system']['apache']['indexes']['audit']:
|
|
_generateAccordion(
|
|
dataJinja2["apache"]["indexes"]["directories"],
|
|
"apache-indexes"
|
|
)
|
|
|
|
if 'localaccount' in data['system']:
|
|
if 'profile' in data['system']['localaccount']:
|
|
dataJinja2['profile'] = dict()
|
|
dataJinja2['profile']['filename'] = data['system']['localaccount']['profile']['filename']
|
|
dataJinja2['profile']['vulnerabilities'] = data['system']['localaccount']['profile']['vulnerabilities']
|
|
|
|
_generateAccordion(dataJinja2['profile']['vulnerabilities'], 'profile')
|
|
if 'pwd_quality' in data['system']['localaccount']:
|
|
pass
|
|
if 'grub' in data['system']:
|
|
dataJinja2['grub'] = data['system']['grub']
|
|
dataJinja2['grub']['accordion-id'] = f"accordion-grub-1"
|
|
|
|
dataJinja2['year'] = '2023'
|
|
dataJinja2['hostname'] = data['hostname']
|
|
dataJinja2['kernel'] = data['kernel']
|
|
dataJinja2['release'] = data['release']
|
|
rdr = tmplIndex.render(data=dataJinja2)
|
|
|
|
hostname = data['hostname'].lower()
|
|
with open(f"{path}/reports/reports_{hostname}_{today}.html", "w") as f:
|
|
f.write(rdr)
|
|
|
|
print("The report is generated at this location: " \
|
|
f"reports/reports_{hostname}_{today}.html")
|
|
|
|
def _generateAccordion(obj, parent):
|
|
index = 1
|
|
for entry in obj:
|
|
obj[entry]['accordion-id'] = f"accordion-{parent}-{index}"
|
|
index += 1
|