From be1962195b10e16c618acda8c13a8295bcad1228 Mon Sep 17 00:00:00 2001 From: Alexandre Dulaunoy Date: Mon, 18 Apr 2016 08:34:07 +0200 Subject: [PATCH] Skeleton for misp-modules helpers added Helpers will support modules with basic functionalities like caching or alike. --- REQUIREMENTS | 1 + bin/misp-modules.py | 24 +++++++++++++++++++++++- helpers/cache.py | 13 +++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 helpers/cache.py diff --git a/REQUIREMENTS b/REQUIREMENTS index 65df17d..0ae676b 100644 --- a/REQUIREMENTS +++ b/REQUIREMENTS @@ -5,3 +5,4 @@ urlarchiver passivetotal PyPDNS pypssl +redis diff --git a/bin/misp-modules.py b/bin/misp-modules.py index 1e0f3e4..6cff996 100755 --- a/bin/misp-modules.py +++ b/bin/misp-modules.py @@ -27,7 +27,7 @@ import json import logging import fnmatch import argparse - +import re def init_logger(): log = logging.getLogger('misp-modules') @@ -41,6 +41,26 @@ def init_logger(): return log +def load_helpers(helpersdir='../helpers'): + sys.path.append(helpersdir) + hhandlers = {} + helpers = [] + for root, dirnames, filenames in os.walk(helpersdir): + if os.path.basename(root) == '__pycache__': + continue + if re.match(r'^\.', os.path.basename(root)): + continue + for filename in fnmatch.filter(filenames, '*.py'): + helpername = filename.split(".")[0] + hhandlers[helpername] = importlib.import_module(helpername) + selftest= hhandlers[helpername].selftest() + if selftest is None: + helpers.append(helpername) + log.info('Helpers loaded {} '.format(filename)) + else: + log.info('Helpers failed {} due to {}'.format(filename, selftest)) + + def load_modules(mod_dir): sys.path.append(mod_dir) mhandlers = {} @@ -90,7 +110,9 @@ if __name__ == '__main__': args = argParser.parse_args() port = args.p modulesdir = '../modules' + helpersdir = '../helpers' log = init_logger() + load_helpers(helpersdir=helpersdir) mhandlers, modules = load_modules(modulesdir) service = [(r'/modules', ListModules), (r'/query', QueryModule)] diff --git a/helpers/cache.py b/helpers/cache.py new file mode 100644 index 0000000..394b187 --- /dev/null +++ b/helpers/cache.py @@ -0,0 +1,13 @@ +import redis + +port = 6379 +hostname = '127.0.0.1' + +def selftest(enable=True): + if not enable: + return False + r = redis.StrictRedis(host='localhost', port=port) + try: + r.set('test','selftest') + except: + return 'Redis not running or not installed. Helper will be disabled.'