mirror of https://github.com/MISP/misp-modules
				
				
				
			
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
#!/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
 |