From 2753f354ab3291985b8beb9aa745fe30d1e6b2a8 Mon Sep 17 00:00:00 2001 From: Vincent-CIRCL Date: Mon, 18 Feb 2019 14:27:16 +0100 Subject: [PATCH 1/6] test update --- misp_modules/modules/export_mod/pdfexport.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misp_modules/modules/export_mod/pdfexport.py b/misp_modules/modules/export_mod/pdfexport.py index df7f879..1b4c731 100755 --- a/misp_modules/modules/export_mod/pdfexport.py +++ b/misp_modules/modules/export_mod/pdfexport.py @@ -12,7 +12,7 @@ from pymisp import MISPEvent misperrors = {'error': 'Error'} -moduleinfo = {'version': '1', +moduleinfo = {'version': '42', 'author': 'Raphaël Vinot', 'description': 'Simple export to PDF', 'module-type': ['export'], From be01d547791f7f9950dad170b3908155e15ff3c8 Mon Sep 17 00:00:00 2001 From: Vincent-CIRCL Date: Mon, 18 Feb 2019 15:23:57 +0100 Subject: [PATCH 2/6] print values --- misp_modules/modules/export_mod/pdfexport.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/misp_modules/modules/export_mod/pdfexport.py b/misp_modules/modules/export_mod/pdfexport.py index 1b4c731..074e473 100755 --- a/misp_modules/modules/export_mod/pdfexport.py +++ b/misp_modules/modules/export_mod/pdfexport.py @@ -144,6 +144,8 @@ def handler(q=False): return False for evt in request['data']: + print(request['data']) + report = ReportGenerator() report.report_headers() report.from_event(evt) From 2d29ce11bbf8dadd82fe886330476488df32c140 Mon Sep 17 00:00:00 2001 From: Falconieri Date: Thu, 21 Feb 2019 15:42:18 +0100 Subject: [PATCH 3/6] Test 1 - PDF call --- misp_modules/modules/export_mod/pdfexport.py | 68 +++++++------------- 1 file changed, 22 insertions(+), 46 deletions(-) diff --git a/misp_modules/modules/export_mod/pdfexport.py b/misp_modules/modules/export_mod/pdfexport.py index 074e473..23d0edd 100755 --- a/misp_modules/modules/export_mod/pdfexport.py +++ b/misp_modules/modules/export_mod/pdfexport.py @@ -7,61 +7,26 @@ import shlex import subprocess import base64 -from pymisp import MISPEvent +from pymisp import MISPEvent, reportlab_generator misperrors = {'error': 'Error'} -moduleinfo = {'version': '42', - 'author': 'Raphaël Vinot', +moduleinfo = {'version': '2', + 'author': 'Vincent Falconieri (prev. Raphaël Vinot)', 'description': 'Simple export to PDF', 'module-type': ['export'], 'require_standard_format': True} moduleconfig = [] - mispattributes = {} + outputFileExtension = "pdf" responseType = "application/pdf" types_to_attach = ['ip-dst', 'url', 'domain'] objects_to_attach = ['domain-ip'] -headers = """ -:toc: right -:toclevels: 1 -:toc-title: Daily Report -:icons: font -:sectanchors: -:sectlinks: -= Daily report by {org_name} -{date} - -:icons: font - -""" - -event_level_tags = """ -IMPORTANT: This event is classified TLP:{value}. - -{expanded} - -""" - -attributes = """ -=== Indicator(s) of compromise - -{list_attributes} - -""" - -title = """ -== ({internal_id}) {title} - -{summary} - -""" - class ReportGenerator(): def __init__(self): @@ -79,6 +44,9 @@ class ReportGenerator(): self.misp_event = MISPEvent() self.misp_event.load(event) + ''' + + def attributes(self): if not self.misp_event.attributes: return '' @@ -132,7 +100,7 @@ class ReportGenerator(): self.report += self.title() self.report += self.event_level_tags() self.report += self.attributes() - + ''' def handler(q=False): if q is False: @@ -144,19 +112,27 @@ def handler(q=False): return False for evt in request['data']: + + ''' + print(" DATA ") print(request['data']) + + reportlab_generator. report = ReportGenerator() report.report_headers() report.from_event(evt) report.asciidoc() - command_line = 'asciidoctor-pdf -' - args = shlex.split(command_line) - with subprocess.Popen(args, stdout=subprocess.PIPE, stdin=subprocess.PIPE) as process: - cmd_out, cmd_err = process.communicate( - input=report.report.encode('utf-8')) - return {'response': [], 'data': str(base64.b64encode(cmd_out), 'utf-8')} + print(" REPORT : ") + print(report) + ''' + misp_event = MISPEvent() + misp_event.load(request['data']) + + pdf = reportlab_generator.get_base64_from_buffer(reportlab_generator.convert_event_in_pdf_buffer(misp_event)) + + return {'response': [], 'data': str(pdf, 'utf-8')} def introspection(): From a93b34208f358c76184b725f656f43f39dbd8e18 Mon Sep 17 00:00:00 2001 From: Falconieri Date: Fri, 22 Feb 2019 10:14:22 +0100 Subject: [PATCH 4/6] fix: [pdfexport] Bugfix on PyMisp exportpdf call --- misp_modules/modules/export_mod/pdfexport.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/misp_modules/modules/export_mod/pdfexport.py b/misp_modules/modules/export_mod/pdfexport.py index 23d0edd..cb4e297 100755 --- a/misp_modules/modules/export_mod/pdfexport.py +++ b/misp_modules/modules/export_mod/pdfexport.py @@ -7,8 +7,10 @@ import shlex import subprocess import base64 -from pymisp import MISPEvent, reportlab_generator +print("test PDF pdf export (reportlab generator import)") +from pymisp import MISPEvent +from pymisp.tools import reportlab_generator misperrors = {'error': 'Error'} @@ -45,8 +47,6 @@ class ReportGenerator(): self.misp_event.load(event) ''' - - def attributes(self): if not self.misp_event.attributes: return '' @@ -127,12 +127,13 @@ def handler(q=False): print(" REPORT : ") print(report) ''' - misp_event = MISPEvent() - misp_event.load(request['data']) - pdf = reportlab_generator.get_base64_from_buffer(reportlab_generator.convert_event_in_pdf_buffer(misp_event)) + misp_event = MISPEvent() + misp_event.load(evt) - return {'response': [], 'data': str(pdf, 'utf-8')} + pdf = reportlab_generator.get_base64_from_value(reportlab_generator.convert_event_in_pdf_buffer(misp_event)) + + return {'response': [], 'data': str(pdf, 'utf-8')} def introspection(): @@ -164,3 +165,8 @@ def introspection(): def version(): moduleinfo['config'] = moduleconfig return moduleinfo + +import pprint + +if __name__ == "__main__": + pprint.pprint("test") \ No newline at end of file From 40cd32f1b8c073caf20d133ca0e9780ec2f602cc Mon Sep 17 00:00:00 2001 From: Falconieri Date: Fri, 22 Feb 2019 10:25:12 +0100 Subject: [PATCH 5/6] tidy: Remove old dead export code --- misp_modules/modules/export_mod/pdfexport.py | 78 -------------------- 1 file changed, 78 deletions(-) diff --git a/misp_modules/modules/export_mod/pdfexport.py b/misp_modules/modules/export_mod/pdfexport.py index cb4e297..ef3d775 100755 --- a/misp_modules/modules/export_mod/pdfexport.py +++ b/misp_modules/modules/export_mod/pdfexport.py @@ -7,8 +7,6 @@ import shlex import subprocess import base64 -print("test PDF pdf export (reportlab generator import)") - from pymisp import MISPEvent from pymisp.tools import reportlab_generator @@ -46,62 +44,6 @@ class ReportGenerator(): self.misp_event = MISPEvent() self.misp_event.load(event) - ''' - def attributes(self): - if not self.misp_event.attributes: - return '' - list_attributes = [] - for attribute in self.misp_event.attributes: - if attribute.type in types_to_attach: - list_attributes.append("* {}".format(attribute.value)) - for obj in self.misp_event.Object: - if obj.name in objects_to_attach: - for attribute in obj.Attribute: - if attribute.type in types_to_attach: - list_attributes.append("* {}".format(attribute.value)) - return attributes.format(list_attributes="\n".join(list_attributes)) - - def _get_tag_info(self, machinetag): - return self.taxonomies.revert_machinetag(machinetag) - - def report_headers(self): - content = {'org_name': 'name', - 'date': date.today().isoformat()} - self.report += headers.format(**content) - - def event_level_tags(self): - if not self.misp_event.Tag: - return '' - for tag in self.misp_event.Tag: - # Only look for TLP for now - if tag['name'].startswith('tlp'): - tax, predicate = self._get_tag_info(tag['name']) - return self.event_level_tags.format(value=predicate.predicate.upper(), expanded=predicate.expanded) - - def title(self): - internal_id = '' - summary = '' - # Get internal refs for report - if not hasattr(self.misp_event, 'Object'): - return '' - for obj in self.misp_event.Object: - if obj.name != 'report': - continue - for a in obj.Attribute: - if a.object_relation == 'case-number': - internal_id = a.value - if a.object_relation == 'summary': - summary = a.value - - return title.format(internal_id=internal_id, title=self.misp_event.info, - summary=summary) - - def asciidoc(self, lang='en'): - self.report += self.title() - self.report += self.event_level_tags() - self.report += self.attributes() - ''' - def handler(q=False): if q is False: return False @@ -113,21 +55,6 @@ def handler(q=False): for evt in request['data']: - ''' - print(" DATA ") - print(request['data']) - - reportlab_generator. - - report = ReportGenerator() - report.report_headers() - report.from_event(evt) - report.asciidoc() - - print(" REPORT : ") - print(report) - ''' - misp_event = MISPEvent() misp_event.load(evt) @@ -165,8 +92,3 @@ def introspection(): def version(): moduleinfo['config'] = moduleconfig return moduleinfo - -import pprint - -if __name__ == "__main__": - pprint.pprint("test") \ No newline at end of file From a3a871f2faa6b27c79e8c55bd0b128b9edbc7cf3 Mon Sep 17 00:00:00 2001 From: Falconieri Date: Mon, 25 Feb 2019 15:51:33 +0100 Subject: [PATCH 6/6] fix [exportpdf] update parameters for links generation --- misp_modules/modules/export_mod/pdfexport.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/misp_modules/modules/export_mod/pdfexport.py b/misp_modules/modules/export_mod/pdfexport.py index ef3d775..977ee87 100755 --- a/misp_modules/modules/export_mod/pdfexport.py +++ b/misp_modules/modules/export_mod/pdfexport.py @@ -18,7 +18,9 @@ moduleinfo = {'version': '2', 'module-type': ['export'], 'require_standard_format': True} -moduleconfig = [] +# config fields that your code expects from the site admin +moduleconfig = ["MISP_base_url_for_dynamic_link", "MISP_name_for_metadata"] + mispattributes = {} outputFileExtension = "pdf" @@ -53,12 +55,19 @@ def handler(q=False): if 'data' not in request: return False + config = {} + + # Construct config object for reportlab_generator + for config_item in moduleconfig : + if (request.get('config')) and (request['config'].get(config_item) is not None): + config[config_item] = request['config'].get(config_item) + for evt in request['data']: misp_event = MISPEvent() misp_event.load(evt) - pdf = reportlab_generator.get_base64_from_value(reportlab_generator.convert_event_in_pdf_buffer(misp_event)) + pdf = reportlab_generator.get_base64_from_value(reportlab_generator.convert_event_in_pdf_buffer(misp_event, config)) return {'response': [], 'data': str(pdf, 'utf-8')}