From 7c58c1366a93f76bffb397e7f3b2fa8434869f30 Mon Sep 17 00:00:00 2001 From: blockisec <62061776+blockisec@users.noreply.github.com> Date: Wed, 10 Jan 2024 19:27:53 +0100 Subject: [PATCH] Breaking: Simplify report generator and customization (#125) * first draft to simplify report generation --- .../dialogs/ReportTemplateCreateDialog.vue | 38 +- .../dialogs/ReportTemplateUpdateDialog.vue | 29 +- frontend/src/utils/file.js | 16 +- .../views/pages/admin/ReportTemplateList.vue | 3 +- .../views/pages/advisories/AdvisoryDetail.vue | 51 +- .../pages/projects/findings/FindingDetail.vue | 2 +- .../advisories/tests/test_advisory_export.py | 45 - .../tests/test_advisory_export_tasks.py | 11 +- server/advisories/viewsets/advisory.py | 23 +- server/backend/apps.py | 3 - ...template_path_alter_reporttemplate_name.py | 23 + server/backend/models/report_templates.py | 11 +- server/backend/models/reports/report.py | 10 +- .../backend/serializers/report_templates.py | 1 - server/backend/tasks/finding_export.py | 29 - server/backend/tasks/reporting.py | 27 +- .../backend/tests/test_report_generation.py | 2 +- server/backend/viewsets/findings.py | 2 +- server/backend/viewsets/reports/release.py | 18 +- server/extensions/.gitignore | 3 + .../jinja => extensions}/__init__.py | 0 .../report_templates}/__init__.py | 0 .../default_template}/__init__.py | 0 .../default_template/charts.py | 40 + .../default_template/excel.py} | 25 +- .../locale/de/LC_MESSAGES/django.mo | Bin .../locale/de/LC_MESSAGES/django.po | 643 ++++++++ .../default_template/plugin.py | 103 ++ .../default_template/report_errors.py | 73 + .../templates/advisory_export.html | 0 .../components/report_error_for_section.html | 2 +- .../default_template/templates/css/main.css | 44 + .../templates/fonts/roboto/Roboto-Black.ttf | Bin .../fonts/roboto/Roboto-BlackItalic.ttf | Bin .../templates/fonts/roboto/Roboto-Bold.ttf | Bin .../fonts/roboto/Roboto-BoldItalic.ttf | Bin .../templates/fonts/roboto/Roboto-Italic.ttf | Bin .../templates/fonts/roboto/Roboto-Light.ttf | Bin .../fonts/roboto/Roboto-LightItalic.ttf | Bin .../templates/fonts/roboto/Roboto-Medium.ttf | Bin .../fonts/roboto/Roboto-MediumItalic.ttf | Bin .../templates/fonts/roboto/Roboto-Regular.ttf | Bin .../templates/fonts/roboto/Roboto-Thin.ttf | Bin .../fonts/roboto/Roboto-ThinItalic.ttf | Bin .../templates/fonts/roboto/style.scss | 0 .../templates/images/assets/generic.svg | 0 .../templates/images/assets/host.svg | 0 .../images/assets/mobile_application.svg | 0 .../templates/images/assets/thick_client.svg | 0 .../images/assets/web_application.svg | 0 .../templates/images/cover.jpg | Bin .../templates/images/draft.png | Bin .../templates/images/logo-old.svg | 0 .../templates/images/logo.svg | 0 .../templates/pages/advisories/cover.html | 0 .../scope-generic-asset.html | 0 .../assessment-information/scope-host.html | 0 .../scope-mobile-application.html | 0 .../scope-thick-client.html | 0 .../scope-web-application.html | 0 .../pages/assessment_information.html | 0 .../templates/pages/cover.html | 2 +- .../templates/pages/errors.html | 2 +- .../templates/pages/executive_summary.html | 14 +- .../templates/pages/last_page.html | 0 .../templates/pages/single_finding.html | 0 .../templates/pages/technical_details.html | 0 .../templates/pages/technical_summary.html | 0 .../templates/pages/toc.html | 0 .../templates/pages/version_history.html | 0 .../pages/vulnerabilities_overview.html | 0 .../templates/pentest_report.html | 0 .../templates/scss/_base.scss | 41 +- .../templates/scss/_charts.scss | 0 .../templates/scss/_page.scss | 0 .../templates/scss/advisory.scss | 0 .../templates/scss/components/_table.scss | 6 +- .../templates/scss/components/codehilite.scss | 0 .../templates/scss/main.scss | 1 - .../scss/pages/_assessment_information.scss | 0 .../templates/scss/pages/_cover.scss | 18 +- .../templates/scss/pages/_errors.scss | 0 .../templates/scss/pages/_last_page.scss | 6 +- .../templates/scss/pages/_single_finding.scss | 2 +- .../scss/pages/_technical_summary.scss | 2 +- .../templates/scss/pages/_toc.scss | 4 +- .../scss/pages/_vulnerabilities.scss | 0 .../templates/single_finding_export.html | 0 .../templates/vulnerability_overview.csv | 0 server/locale/de/LC_MESSAGES/django.po | 1303 ++++++++++++++++- server/pecoret/core/reporting/loader.py | 11 +- server/pecoret/core/reporting/translation.py | 6 +- .../pecoret/core/reporting/types/__init__.py | 5 - .../core/reporting/types/advisory_export.py | 37 - server/pecoret/core/reporting/types/base.py | 180 --- .../core/reporting/types/mixins/plain.py | 8 - .../core/reporting/types/pentest_csv.py | 19 - .../core/reporting/types/pentest_pdf.py | 11 - .../reporting/types/single_finding_export.py | 40 - server/pecoret/reporting/__init__.py | 0 .../pecoret/reporting/generators/__init__.py | 3 + server/pecoret/reporting/generators/base.py | 96 ++ server/pecoret/reporting/generators/csv.py | 12 + server/pecoret/reporting/generators/excel.py | 9 + .../mixins => reporting/generators}/pdf.py | 50 +- server/pecoret/reporting/report_plugin.py | 74 + .../reporting/jinja => reporting}/utils.py | 0 server/pecoret/settings.py | 2 + server/report/locale/de/LC_MESSAGES/django.po | 469 ------ server/report/report.py | 180 --- server/report/templates/advisory.md | 38 - server/report/templates/scss/_variables.scss | 44 - 112 files changed, 2610 insertions(+), 1362 deletions(-) create mode 100644 server/backend/migrations/0041_remove_reporttemplate_path_alter_reporttemplate_name.py delete mode 100644 server/backend/tasks/finding_export.py create mode 100644 server/extensions/.gitignore rename server/{pecoret/core/reporting/jinja => extensions}/__init__.py (100%) rename server/{pecoret/core/reporting/types/mixins => extensions/report_templates}/__init__.py (100%) rename server/{report => extensions/report_templates/default_template}/__init__.py (100%) create mode 100644 server/extensions/report_templates/default_template/charts.py rename server/{pecoret/core/reporting/types/pentest_excel.py => extensions/report_templates/default_template/excel.py} (64%) rename server/{report => extensions/report_templates/default_template}/locale/de/LC_MESSAGES/django.mo (100%) create mode 100644 server/extensions/report_templates/default_template/locale/de/LC_MESSAGES/django.po create mode 100644 server/extensions/report_templates/default_template/plugin.py create mode 100644 server/extensions/report_templates/default_template/report_errors.py rename server/{report => extensions/report_templates/default_template}/templates/advisory_export.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/components/report_error_for_section.html (85%) create mode 100644 server/extensions/report_templates/default_template/templates/css/main.css rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Black.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-BlackItalic.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Bold.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-BoldItalic.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Italic.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Light.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-LightItalic.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Medium.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-MediumItalic.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Regular.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-Thin.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/Roboto-ThinItalic.ttf (100%) rename server/{report => extensions/report_templates/default_template}/templates/fonts/roboto/style.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/assets/generic.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/assets/host.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/assets/mobile_application.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/assets/thick_client.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/assets/web_application.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/cover.jpg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/draft.png (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/logo-old.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/images/logo.svg (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/advisories/cover.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/assessment-information/scope-generic-asset.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/assessment-information/scope-host.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/assessment-information/scope-mobile-application.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/assessment-information/scope-thick-client.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/assessment-information/scope-web-application.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/assessment_information.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/cover.html (94%) rename server/{report => extensions/report_templates/default_template}/templates/pages/errors.html (81%) rename server/{report => extensions/report_templates/default_template}/templates/pages/executive_summary.html (81%) rename server/{report => extensions/report_templates/default_template}/templates/pages/last_page.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/single_finding.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/technical_details.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/technical_summary.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/toc.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/version_history.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pages/vulnerabilities_overview.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/pentest_report.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/_base.scss (80%) rename server/{report => extensions/report_templates/default_template}/templates/scss/_charts.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/_page.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/advisory.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/components/_table.scss (54%) rename server/{report => extensions/report_templates/default_template}/templates/scss/components/codehilite.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/main.scss (94%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_assessment_information.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_cover.scss (71%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_errors.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_last_page.scss (64%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_single_finding.scss (91%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_technical_summary.scss (82%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_toc.scss (88%) rename server/{report => extensions/report_templates/default_template}/templates/scss/pages/_vulnerabilities.scss (100%) rename server/{report => extensions/report_templates/default_template}/templates/single_finding_export.html (100%) rename server/{report => extensions/report_templates/default_template}/templates/vulnerability_overview.csv (100%) delete mode 100644 server/pecoret/core/reporting/types/__init__.py delete mode 100644 server/pecoret/core/reporting/types/advisory_export.py delete mode 100644 server/pecoret/core/reporting/types/base.py delete mode 100644 server/pecoret/core/reporting/types/mixins/plain.py delete mode 100644 server/pecoret/core/reporting/types/pentest_csv.py delete mode 100644 server/pecoret/core/reporting/types/pentest_pdf.py delete mode 100644 server/pecoret/core/reporting/types/single_finding_export.py create mode 100644 server/pecoret/reporting/__init__.py create mode 100644 server/pecoret/reporting/generators/__init__.py create mode 100644 server/pecoret/reporting/generators/base.py create mode 100644 server/pecoret/reporting/generators/csv.py create mode 100644 server/pecoret/reporting/generators/excel.py rename server/pecoret/{core/reporting/types/mixins => reporting/generators}/pdf.py (55%) create mode 100644 server/pecoret/reporting/report_plugin.py rename server/pecoret/{core/reporting/jinja => reporting}/utils.py (100%) delete mode 100644 server/report/locale/de/LC_MESSAGES/django.po delete mode 100644 server/report/report.py delete mode 100644 server/report/templates/advisory.md delete mode 100644 server/report/templates/scss/_variables.scss diff --git a/frontend/src/components/dialogs/ReportTemplateCreateDialog.vue b/frontend/src/components/dialogs/ReportTemplateCreateDialog.vue index 86d83071..cf589617 100644 --- a/frontend/src/components/dialogs/ReportTemplateCreateDialog.vue +++ b/frontend/src/components/dialogs/ReportTemplateCreateDialog.vue @@ -1,24 +1,22 @@ - \ No newline at end of file + diff --git a/frontend/src/components/dialogs/ReportTemplateUpdateDialog.vue b/frontend/src/components/dialogs/ReportTemplateUpdateDialog.vue index 6e9a627d..a38b330c 100644 --- a/frontend/src/components/dialogs/ReportTemplateUpdateDialog.vue +++ b/frontend/src/components/dialogs/ReportTemplateUpdateDialog.vue @@ -1,24 +1,23 @@