From 736cbff1b6b16d4286a858bca6fa767c758a0542 Mon Sep 17 00:00:00 2001 From: Mike Auty Date: Sat, 9 Dec 2017 20:06:01 +0000 Subject: [PATCH] Start on the layers folder (with a few small fixes). --- volatility/framework/layers/__init__.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/volatility/framework/layers/__init__.py b/volatility/framework/layers/__init__.py index 84ec3fbde..9baebf90b 100644 --- a/volatility/framework/layers/__init__.py +++ b/volatility/framework/layers/__init__.py @@ -5,11 +5,14 @@ import hashlib import logging import lzma import os +import typing import urllib.parse import urllib.request import zipfile from urllib import request +from urllib3 import util + try: import magic @@ -23,24 +26,29 @@ except ImportError: pass from volatility import framework -from volatility.framework import constants +from volatility.framework import constants, validity from volatility.framework.interfaces.layers import IMPORTED_MAGIC from volatility.framework.layers import intel, lime, physical, segmented, vmware vollog = logging.getLogger(__name__) +# TODO: Type-annotating the ResourceAccessor.open method is difficult because HTTPResponse is not actually an IO[Any] type +# fix this + class ResourceAccessor(object): """Object for openning URLs as files (downloading locally first if necessary)""" - def __init__(self, progress_callback = None, context = None): + def __init__(self, + progress_callback: typing.Optional[validity.ProgressCallback] = None, + context: typing.Optional[util.SSLContext] = None) -> None: """Creates a resource accessor Note: context is an SSL context, not a volatility context """ self._progress_callback = progress_callback self._context = context - self._cached_files = [] + self._cached_files: typing.List[str] = [] self._handlers = list(framework.class_subclasses(request.BaseHandler)) vollog.log(constants.LOGLEVEL_VVV, "Available URL handlers: {}".format(", ".join([x.__name__ for x in self._handlers]))) @@ -154,3 +162,4 @@ class JarHandler(request.BaseHandler): zippath, filepath = zipsplit return zipfile.ZipFile(zippath).open(filepath) + return None