From 4e25a6c12618b74d50b26a5e093cbfcf30a7f221 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Sun, 6 Nov 2022 17:21:50 +0100 Subject: [PATCH] new: [import] import_blueprint to facilitate an easy-to-use blueprint for data import --- .../modules/import_mod/import_blueprint.py | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100755 misp_modules/modules/import_mod/import_blueprint.py diff --git a/misp_modules/modules/import_mod/import_blueprint.py b/misp_modules/modules/import_mod/import_blueprint.py new file mode 100755 index 0000000..2758f83 --- /dev/null +++ b/misp_modules/modules/import_mod/import_blueprint.py @@ -0,0 +1,84 @@ +import json +import base64 +from pymisp import MISPEvent, MISPObject, MISPAttribute + +misperrors = {'error': 'Error'} +userConfig = { + 'number1': { + 'type': 'Integer', + 'regex': '/^[0-4]$/i', + 'errorMessage': 'Expected a number in range [0-4]', + 'message': 'Column number used for value' + }, + 'some_string': { + 'type': 'String', + 'message': 'A text field' + }, + 'boolean_field': { + 'type': 'Boolean', + 'message': 'Boolean field test' + }, + 'comment': { + 'type': 'Integer', + 'message': 'Column number used for comment' + } +} + +mispattributes = { + 'inputSource': ['file', 'paste'], + 'output': ['MISP Format'], + 'format': 'misp_standard' +} + + +moduleinfo = {'version': '0.1', 'author': 'Sami Mokaddem', + 'description': 'Generic blueprint to be copy-pasted to quickly boostrap creation of import module.', + 'module-type': ['import']} + +moduleconfig = [] + + + +def generateData(event, data, config): + # attr = MISPAttribute() + # attr.from_dict(**{ + # 'type': 'ip-src', + # 'value': '8.8.8.8', + # 'distribution': 2 + # }) + # event.add_attribute(attr) + pass + + +def handler(q=False): + if q is False: + return False + request = json.loads(q) + data = getUploadedData(request) + config = getPassedConfig(request) + event = MISPEvent() + generateData(event, data, config) + return {"results": json.loads(event.to_json())} + + +def getUploadedData(request): + return base64.b64decode(request['data']).decode('utf8') + + +def getPassedConfig(request): + return request['config'] + + +def introspection(): + modulesetup = mispattributes + try: + userConfig + modulesetup['userConfig'] = userConfig + except NameError: + pass + return modulesetup + + +def version(): + moduleinfo['config'] = moduleconfig + return moduleinfo