2017-10-26 22:54:20 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
import json
|
|
|
|
|
2019-02-22 10:14:22 +01:00
|
|
|
from pymisp import MISPEvent
|
|
|
|
from pymisp.tools import reportlab_generator
|
2017-10-26 22:54:20 +02:00
|
|
|
|
|
|
|
misperrors = {'error': 'Error'}
|
|
|
|
|
2019-02-21 15:42:18 +01:00
|
|
|
moduleinfo = {'version': '2',
|
|
|
|
'author': 'Vincent Falconieri (prev. Raphaël Vinot)',
|
2017-10-26 22:54:20 +02:00
|
|
|
'description': 'Simple export to PDF',
|
2018-02-21 17:14:26 +01:00
|
|
|
'module-type': ['export'],
|
|
|
|
'require_standard_format': True}
|
2017-10-26 22:54:20 +02:00
|
|
|
|
2019-02-25 15:51:33 +01:00
|
|
|
# config fields that your code expects from the site admin
|
2019-03-05 10:39:07 +01:00
|
|
|
moduleconfig = ["MISP_base_url_for_dynamic_link", "MISP_name_for_metadata", "Activate_textual_description", "Activate_galaxy_description", "Activate_related_events", "Activate_internationalization_fonts", "Custom_fonts_path"]
|
2017-10-26 22:54:20 +02:00
|
|
|
mispattributes = {}
|
2019-02-21 15:42:18 +01:00
|
|
|
|
2017-10-26 22:54:20 +02:00
|
|
|
outputFileExtension = "pdf"
|
|
|
|
responseType = "application/pdf"
|
|
|
|
|
|
|
|
types_to_attach = ['ip-dst', 'url', 'domain']
|
|
|
|
objects_to_attach = ['domain-ip']
|
|
|
|
|
|
|
|
|
|
|
|
class ReportGenerator():
|
|
|
|
def __init__(self):
|
|
|
|
self.report = ''
|
|
|
|
|
|
|
|
def from_remote(self, event_id):
|
|
|
|
from pymisp import PyMISP
|
|
|
|
from keys import misp_url, misp_key, misp_verifycert
|
|
|
|
misp = PyMISP(misp_url, misp_key, misp_verifycert)
|
|
|
|
result = misp.get(event_id)
|
|
|
|
self.misp_event = MISPEvent()
|
|
|
|
self.misp_event.load(result)
|
|
|
|
|
|
|
|
def from_event(self, event):
|
|
|
|
self.misp_event = MISPEvent()
|
|
|
|
self.misp_event.load(event)
|
|
|
|
|
2019-02-25 21:18:26 +01:00
|
|
|
|
2017-10-26 22:54:20 +02:00
|
|
|
def handler(q=False):
|
|
|
|
if q is False:
|
|
|
|
return False
|
|
|
|
|
|
|
|
request = json.loads(q)
|
|
|
|
|
|
|
|
if 'data' not in request:
|
|
|
|
return False
|
|
|
|
|
2019-02-25 15:51:33 +01:00
|
|
|
config = {}
|
|
|
|
|
|
|
|
# Construct config object for reportlab_generator
|
2019-02-25 21:18:26 +01:00
|
|
|
for config_item in moduleconfig:
|
2019-02-25 15:51:33 +01:00
|
|
|
if (request.get('config')) and (request['config'].get(config_item) is not None):
|
|
|
|
config[config_item] = request['config'].get(config_item)
|
|
|
|
|
2017-10-26 22:54:20 +02:00
|
|
|
for evt in request['data']:
|
2019-02-22 10:14:22 +01:00
|
|
|
misp_event = MISPEvent()
|
|
|
|
misp_event.load(evt)
|
|
|
|
|
2019-02-25 15:51:33 +01:00
|
|
|
pdf = reportlab_generator.get_base64_from_value(reportlab_generator.convert_event_in_pdf_buffer(misp_event, config))
|
2019-02-21 15:42:18 +01:00
|
|
|
|
2019-02-22 10:14:22 +01:00
|
|
|
return {'response': [], 'data': str(pdf, 'utf-8')}
|
2017-10-26 22:54:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
def introspection():
|
2019-02-04 11:05:51 +01:00
|
|
|
modulesetup = {}
|
|
|
|
try:
|
|
|
|
responseType
|
|
|
|
modulesetup['responseType'] = responseType
|
|
|
|
except NameError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
try:
|
|
|
|
userConfig
|
|
|
|
modulesetup['userConfig'] = userConfig
|
|
|
|
except NameError:
|
|
|
|
pass
|
|
|
|
try:
|
|
|
|
outputFileExtension
|
|
|
|
modulesetup['outputFileExtension'] = outputFileExtension
|
|
|
|
except NameError:
|
|
|
|
pass
|
|
|
|
try:
|
|
|
|
inputSource
|
|
|
|
modulesetup['inputSource'] = inputSource
|
|
|
|
except NameError:
|
|
|
|
pass
|
|
|
|
return modulesetup
|
2017-10-26 22:54:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
def version():
|
2019-02-04 11:05:51 +01:00
|
|
|
moduleinfo['config'] = moduleconfig
|
|
|
|
return moduleinfo
|