Files
volatility3/volatility/framework/plugins/__init__.py
T
Mike Auty 29d41470a4 Mass reformat of typing imports
Relented on the strict import of direct objects/classes for the typing
module only.  Typing module components can be directly imported because
it makes the code really painful to read and write otherwise.

This is still in-line with the python style guide adopted from Google at
http://google.github.io/styleguide/pyguide.html section 2.2.
2018-12-16 13:04:22 +00:00

52 lines
2.3 KiB
Python

"""All core generic plugins
These modules should only be imported from volatility.plugins NOT volatility.framework.plugins
"""
import logging
from typing import List, Type
from volatility.framework import interfaces, automagic, exceptions, constants, validity
vollog = logging.getLogger(__name__)
def run_plugin(context: interfaces.context.ContextInterface,
automagics: List[interfaces.automagic.AutomagicInterface],
plugin: Type[interfaces.plugins.PluginInterface],
base_config_path: str,
progress_callback: validity.ProgressCallback,
file_consumer: interfaces.plugins.FileConsumerInterface) -> interfaces.plugins.PluginInterface:
"""Constructs a plugin object based on the parameters
Clever magic figures out how to fulfill each requirement that might not be fulfilled
Args:
context: The volatility context to operate on
automagics: A list of automagic modules to run to augment the context
plugin: The plugin to run
plugin_config_path: The path within the context's config containing the plugin's configuration
write_config: Whether to record the configuration options after processing the automagic but before running
quiet: Whether or not to output progress information
Returns:
The constructed plugin object
"""
errors = automagic.run(automagics, context, plugin, base_config_path, progress_callback = progress_callback)
# Plugins always get their configuration stored under their plugin name
plugin_config_path = interfaces.configuration.path_join(base_config_path, plugin.__name__)
# Check all the requirements and/or go back to the automagic step
unsatisfied = plugin.unsatisfied(context, plugin_config_path)
if unsatisfied:
for error in errors:
error_string = [x for x in error.format_exception_only()][-1]
vollog.warning("Automagic exception occured: {}".format(error_string[:-1]))
vollog.log(constants.LOGLEVEL_V, "".join(error.format(chain = True)))
raise exceptions.UnsatisfiedException(unsatisfied)
constructed = plugin(context, plugin_config_path, progress_callback = progress_callback)
if file_consumer:
constructed.set_file_consumer(file_consumer)
return constructed