From baaecd06fe397242b90a1ca674fc1fa3daa41ccd Mon Sep 17 00:00:00 2001 From: Jan Polonsky Date: Fri, 24 Nov 2023 15:58:26 +0100 Subject: [PATCH] Update presenters 2 - replace png with new svg image - updated pdf_template.html - add script to change existing DB settings --- .../d776f47ce040_update_pdf_template_path.py | 83 ++++++ src/presenters/templates/images/taranis.svg | 16 ++ src/presenters/templates/pdf_template.html | 267 ++++++++++++++++++ 3 files changed, 366 insertions(+) create mode 100644 src/core/migrations/versions/d776f47ce040_update_pdf_template_path.py create mode 100644 src/presenters/templates/images/taranis.svg create mode 100644 src/presenters/templates/pdf_template.html diff --git a/src/core/migrations/versions/d776f47ce040_update_pdf_template_path.py b/src/core/migrations/versions/d776f47ce040_update_pdf_template_path.py new file mode 100644 index 000000000..7357d6a3f --- /dev/null +++ b/src/core/migrations/versions/d776f47ce040_update_pdf_template_path.py @@ -0,0 +1,83 @@ +"""Correct old presenter template details + +Revision ID: d776f47ce040 +Revises: 1c4eed243364 +Create Date: 2023-11-24 12:58:32.377642 + +""" +from alembic import op +from sqlalchemy import orm, Column, ForeignKey, String, Integer, Boolean, text +from sqlalchemy.ext.declarative import declarative_base +import sqlalchemy as sa + +Base = declarative_base() + +# revision identifiers, used by Alembic. +revision = 'd776f47ce040' +down_revision = '1c4eed243364' +branch_labels = None +depends_on = None + +class Presenter_d776f47ce040(Base): + __tablename__ = 'presenter' + id = Column(String(64), primary_key=True) + type = Column(String, nullable=False) + +class PresenterParameter_d776f47ce040(Base): + __tablename__ = 'presenter_parameter' + presenter_id = Column(String(64), ForeignKey('presenter.id'), primary_key=True, nullable=False) + parameter_id = Column(Integer, ForeignKey('parameter.id'), primary_key=True, nullable=False) + +class Parameter_d776f47ce040(Base): + __tablename__ = 'parameter' + id = Column(Integer, primary_key=True, server_default=text("nextval('parameter_id_seq'::regclass)")) + key = Column(String, nullable=False) + name = Column(String, nullable=False) + description = Column(String) + +class ParameterValue_d776f47ce040(Base): + __tablename__ = 'parameter_value' + id = Column(Integer, primary_key=True, server_default=text("nextval('parameter_value_id_seq'::regclass)")) + value = Column(String, nullable=False) + parameter_id = Column(ForeignKey('parameter.id')) + +def upgrade(): + bind = op.get_bind() + session = orm.Session(bind=bind) + + # add cascade delete + delete_previous() + # parameter -> presenter_parameter + op.create_foreign_key('presenter_parameter_parameter_id_fkey', 'presenter_parameter', 'parameter', ['parameter_id'], ['id'], ondelete='CASCADE') + + # Correct old presenter template details + presenters = session.query(Presenter_d776f47ce040).filter_by(type = 'PDF_PRESENTER').all() + for pres in presenters: + presenterParameters = session.query(PresenterParameter_d776f47ce040).filter_by(presenter_id = pres.id).all() + for presParam in presenterParameters: + parameters = session.query(Parameter_d776f47ce040).filter_by(id = presParam.parameter_id).all() + for param in parameters: + if param.key == "HEADER_TEMPLATE_PATH" or param.key == "FOOTER_TEMPLATE_PATH": + session.delete(param) + print(f"Old parameter deleted... ({param.key})", flush=True) + elif param.key == "BODY_TEMPLATE_PATH": + param.key = "PDF_TEMPLATE_PATH" + param.name = "PDF template with its path" + param.description = "Path of pdf template file" + session.add(param) + val = session.query(ParameterValue_d776f47ce040).filter_by(parameter_id = param.id).first() + if val: + val.value = val.value.replace("pdf_body_template.html", "pdf_template.html") + session.add(val) + print(f"Old parameter updated... ({param.key})", flush=True) + session.commit() + +def downgrade(): + delete_previous() + # parameter -> presenter_parameter + op.create_foreign_key('presenter_parameter_parameter_id_fkey', 'presenter_parameter', 'parameter', ['parameter_id'], ['id']) + +def delete_previous(): + print("Deleting previous constraints...", flush=True) + op.drop_constraint('presenter_parameter_parameter_id_fkey', 'presenter_parameter', type_='foreignkey') + print("Adding new constraints...", flush=True) \ No newline at end of file diff --git a/src/presenters/templates/images/taranis.svg b/src/presenters/templates/images/taranis.svg new file mode 100644 index 000000000..2801b9584 --- /dev/null +++ b/src/presenters/templates/images/taranis.svg @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/src/presenters/templates/pdf_template.html b/src/presenters/templates/pdf_template.html new file mode 100644 index 000000000..45d55fd2e --- /dev/null +++ b/src/presenters/templates/pdf_template.html @@ -0,0 +1,267 @@ + + + + + + + + + + + +
+ + + + + +
VULNERABILITY REPORT
+
+
+ {% for report_item in data.report_items %} + + + + + + + + + + + + + + + + + + + + + +
+ CONFIDENTIALITY, DISTRIBUTION, SEVERITY
+
Confidentiality
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
TLP
+
+ {% if report_item.attrs.tlp == 'CLEAR' or report_item.attrs.tlp == 'WHITE' %} + TLP:CLEAR + {% endif %} + {% if report_item.attrs.tlp == 'GREEN' %} + TLP:GREEN + {% endif %} + {% if report_item.attrs.tlp == 'AMBER' %} + TLP:AMBER + {% endif %} + {% if report_item.attrs.tlp == 'AMBER+STRICT' %} + TLP:AMBER+STRICT + {% endif %} + {% if report_item.attrs.tlp == 'RED' %} + TLP:RED + {% endif %} +
+
CVSS vector
+
+
{{ report_item.attrs.cvss|e }}
+
+ +
+ + + + + + + + +
DESCRIPTION
+ {{ report_item.attrs.description|e }} +
+ + + + + + + + +
PUBLISHED
+ {{ report_item.attrs.exposure_date }} +
+ + + + + + + + +
UPDATED
+ {{ report_item.attrs.update_date }} +
+ + + + + + + + +
CVE
+ {% if report_item.attrs.cve %} + {% for i in report_item.attrs.cve %} +
{{ i|e }}
+ {% endfor %} + {% endif %} +
+ + + + + + + + +
IMPACT
+ {% if report_item.attrs.impact %} + {% for i in report_item.attrs.impact %} +
{{ i|e }}
+ {% endfor %} + {% endif %} +
+ + + + + + + + +
IOC
+ {% if report_item.attrs.ioc %} + {% for i in report_item.attrs.ioc %} +
{{ i|e }}
+ {% endfor %} + {% endif %} +
+ + + + + + + + +
AFFECTED SYSTEMS
+ {% if report_item.attrs.affected_systems %} + {% for i in report_item.attrs.affected_systems %} +
{{ i|e }}
+ {% endfor %} + {% endif %} +
+ + + + + + + + +
RECOMMENDATIONS
+ {{ report_item.attrs.recommendations }} +
+ + + + + + + + +
LINKS
+
    + {% if report_item.attrs.links %} + {% for i in report_item.attrs.links %} +
    {{ i|e }}
    + {% endfor %} + {% endif %} +
+
+ {% endfor %} +
+
+
+ + + + + + + + + + + + + + + + +
+
+ + +