def tick(self): if time.time() - self.last_load > self.ReloadInterval: try: mtime = os.stat(self.fullpath).st_mtime except FileNotFoundError: scripts = list(ctx.options.scripts) scripts.remove(self.path) ctx.options.update(scripts=scripts) return if mtime > self.last_mtime: ctx.log.info("Loading script: %s" % self.path) if self.ns: ctx.master.addons.remove(self.ns) self.ns = None with addonmanager.safecall(): ns = load_script(self.fullpath) ctx.master.addons.register(ns) self.ns = ns if self.ns: # We're already running, so we have to explicitly register and # configure the addon ctx.master.addons.invoke_addon(self.ns, "running") ctx.master.addons.invoke_addon( self.ns, "configure", ctx.options.keys() ) self.last_load = time.time() self.last_mtime = mtime
async def test_script_print_stdout(): with taddons.context() as tctx: with addonmanager.safecall(): ns = script.load_script( tutils.test_data.path("mitmproxy/data/addonscripts/print.py")) ns.load(addonmanager.Loader(tctx.master)) assert await tctx.master.await_log("stdoutprint")
async def test_script_print_stdout(tdata): with taddons.context() as tctx: with addonmanager.safecall(): ns = script.load_script( tdata.path("mitmproxy/data/addonscripts/print.py") ) ns.load(addonmanager.Loader(tctx.master)) assert await tctx.master.await_log("stdoutprint")
def test_script_print_stdout(): with taddons.context() as tctx: with mock.patch('mitmproxy.ctx.master.tell') as mock_warn: with addonmanager.safecall(): ns = script.load_script( tutils.test_data.path( "mitmproxy/data/addonscripts/print.py")) ns.load(addonmanager.Loader(tctx.master)) mock_warn.assert_called_once_with("log", log.LogEntry("stdoutprint", "warn"))
def test_script_print_stdout(): with taddons.context() as tctx: with mock.patch('mitmproxy.ctx.master.tell') as mock_warn: with addonmanager.safecall(): ns = script.load_script( tutils.test_data.path( "mitmproxy/data/addonscripts/print.py" ) ) ns.load(addonmanager.Loader(tctx.master)) mock_warn.assert_called_once_with("log", log.LogEntry("stdoutprint", "warn"))
def loadscript(self): ctx.log.info("Loading script %s" % self.path) if self.ns: ctx.master.addons.remove(self.ns) self.ns = None with addonmanager.safecall(): ns = load_script(self.fullpath) ctx.master.addons.register(ns) self.ns = ns if self.ns: ctx.master.addons.invoke_addon(self.ns, "configure", ctx.options.keys())
def load_script(actx, path): if not os.path.exists(path): ctx.log.info("No such file: %s" % path) return loader = importlib.machinery.SourceFileLoader(os.path.basename(path), path) try: oldpath = sys.path sys.path.insert(0, os.path.dirname(path)) with addonmanager.safecall(): m = loader.load_module() if not getattr(m, "name", None): m.name = path return m finally: sys.path[:] = oldpath
def loadscript(self): ctx.log.info("Loading script %s" % self.path) if self.ns: ctx.master.addons.remove(self.ns) self.ns = None with addonmanager.safecall(): ns = load_script(self.fullpath) ctx.master.addons.register(ns) self.ns = ns if self.ns: # We're already running, so we have to explicitly register and # configure the addon ctx.master.addons.invoke_addon(self.ns, "running") ctx.master.addons.invoke_addon(self.ns, "configure", ctx.options.keys())
def loadscript(self): ctx.log.info("Loading script %s" % self.path) if self.ns: ctx.master.addons.remove(self.ns) self.ns = None with addonmanager.safecall(): ns = load_script(self.fullpath) ctx.master.addons.register(ns) self.ns = ns if self.ns: # We're already running, so we have to explicitly register and # configure the addon ctx.master.addons.invoke_addon(self.ns, hooks.RunningHook()) try: ctx.master.addons.invoke_addon( self.ns, hooks.ConfigureHook(ctx.options.keys())) except exceptions.OptionsError as e: script_error_handler(self.fullpath, e, msg=str(e))
def loadscript(self): ctx.log.info("Loading script %s" % self.path) if self.ns: ctx.master.addons.remove(self.ns) self.ns = None with addonmanager.safecall(): ns = load_script(self.fullpath) ctx.master.addons.register(ns) self.ns = ns if self.ns: # We're already running, so we have to explicitly register and # configure the addon ctx.master.addons.invoke_addon(self.ns, "running") ctx.master.addons.invoke_addon( self.ns, "configure", ctx.options.keys() )
def script_run(self, flows: typing.Sequence[flow.Flow], path: mtypes.Path) -> None: """ Run a script on the specified flows. The script is configured with the current options and all lifecycle events for each flow are simulated. Note that the load event is not invoked. """ if not os.path.isfile(path): ctx.log.error('No such script: %s' % path) return mod = load_script(path) if mod: with addonmanager.safecall(): ctx.master.addons.invoke_addon(mod, "running") ctx.master.addons.invoke_addon(mod, "configure", ctx.options.keys()) for f in flows: for evt, arg in eventsequence.iterate(f): ctx.master.addons.invoke_addon(mod, evt, arg)
def script_run(self, flows: typing.Sequence[flow.Flow], path: mtypes.Path) -> None: """ Run a script on the specified flows. The script is configured with the current options and all lifecycle events for each flow are simulated. Note that the load event is not invoked. """ if not os.path.isfile(path): ctx.log.error('No such script: %s' % path) return mod = load_script(path) if mod: with addonmanager.safecall(): ctx.master.addons.invoke_addon(mod, "running") ctx.master.addons.invoke_addon( mod, "configure", ctx.options.keys() ) for f in flows: for evt, arg in eventsequence.iterate(f): ctx.master.addons.invoke_addon(mod, evt, arg)
def load_script(actx, path): if not os.path.exists(path): ctx.log.info("No such file: %s" % path) return fullname = "__mitmproxy_script__.{}".format( os.path.splitext(os.path.basename(path))[0]) # the fullname is not unique among scripts, so if there already is an existing script with said # fullname, remove it. sys.modules.pop(fullname, None) try: oldpath = sys.path sys.path.insert(0, os.path.dirname(path)) with addonmanager.safecall(): loader = importlib.machinery.SourceFileLoader(fullname, path) spec = importlib.util.spec_from_loader(fullname, loader=loader) m = importlib.util.module_from_spec(spec) loader.exec_module(m) if not getattr(m, "name", None): m.name = path return m finally: sys.path[:] = oldpath