mirror of https://github.com/MISP/misp-modules
Modules for expansion services, import and export in MISP
http://misp.github.io/misp-modules
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.6 KiB
98 lines
2.6 KiB
#!/usr/bin/env python3 |
|
# -*- coding: utf-8 -*- |
|
|
|
import json |
|
|
|
from pymisp import MISPEvent |
|
from pymisp.tools import reportlab_generator |
|
|
|
misperrors = {'error': 'Error'} |
|
|
|
moduleinfo = {'version': '2', |
|
'author': 'Vincent Falconieri (prev. Raphaël Vinot)', |
|
'description': 'Simple export to PDF', |
|
'module-type': ['export'], |
|
'require_standard_format': True} |
|
|
|
# config fields that your code expects from the site admin |
|
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"] |
|
mispattributes = {} |
|
|
|
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) |
|
|
|
|
|
def handler(q=False): |
|
if q is False: |
|
return False |
|
|
|
request = json.loads(q) |
|
|
|
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, config)) |
|
|
|
return {'response': [], 'data': str(pdf, 'utf-8')} |
|
|
|
|
|
def introspection(): |
|
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 |
|
|
|
|
|
def version(): |
|
moduleinfo['config'] = moduleconfig |
|
return moduleinfo
|
|
|