From 19c3536afc5b2769a2b3f34cfd40e93e6295cf2d Mon Sep 17 00:00:00 2001 From: Mike Auty Date: Sun, 25 Mar 2018 18:15:22 +0100 Subject: [PATCH] Refactor the plugin listing code. --- volatility/cli/__init__.py | 11 ++++------- volatility/framework/__init__.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/volatility/cli/__init__.py b/volatility/cli/__init__.py index 9b1e895d2..5378de09f 100644 --- a/volatility/cli/__init__.py +++ b/volatility/cli/__init__.py @@ -13,10 +13,12 @@ import inspect import json import logging import sys +import typing import volatility.framework import volatility.framework.configuration.requirements import volatility.plugins +from volatility import framework from volatility.framework import automagic, constants, contexts, interfaces from volatility.framework.configuration import requirements from volatility.framework.renderers import text @@ -98,15 +100,10 @@ class CommandLine(object): # Do the initialization ctx = contexts.Context() # Construct a blank context - volatility.framework.import_files(volatility.plugins) # Will not log as console's default level is WARNING + framework.import_files(volatility.plugins) # Will not log as console's default level is WARNING automagics = automagic.available(ctx) - plugin_list = {} - for plugin in volatility.framework.class_subclasses(interfaces.plugins.PluginInterface): - plugin_name = plugin.__module__ + "." + plugin.__name__ - if plugin_name.startswith("volatility.plugins."): - plugin_name = plugin_name[len("volatility.plugins."):] - plugin_list[plugin_name] = plugin + plugin_list = framework.list_plugins() seen_automagics = set() configurables_list = {} diff --git a/volatility/framework/__init__.py b/volatility/framework/__init__.py index 1e3af8905..9a6477ea5 100644 --- a/volatility/framework/__init__.py +++ b/volatility/framework/__init__.py @@ -104,6 +104,16 @@ def import_files(base_module) -> None: return None +def list_plugins() -> typing.Dict[str, typing.Type[interfaces.plugins.PluginInterface]]: + plugin_list = {} + for plugin in class_subclasses(interfaces.plugins.PluginInterface): + plugin_name = plugin.__module__ + "." + plugin.__name__ + if plugin_name.startswith("volatility.plugins."): + plugin_name = plugin_name[len("volatility.plugins."):] + plugin_list[plugin_name] = plugin + return plugin_list + + # Check the python version to ensure it's suitable # We currently require 3.5.3 since 3.5.1 has no typing.Type and 3.5.2 is broken for ''/delayed encapsulated types required_python_version = (3, 5, 3)