diff options
author | Aldo Cortesi <aldo@corte.si> | 2016-10-04 08:13:19 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-04 08:13:19 +1100 |
commit | b0add569b988e9f1e319b9577fbd8e076ac5bd23 (patch) | |
tree | 285120283d1e78f5d4477eaa9bb9fd630babbd05 | |
parent | 13fb384c1996e74fa836c5ef572e740f5717c54a (diff) | |
parent | 36c04f1631c79ca79712873e151c7f5267cafd46 (diff) | |
download | mitmproxy-b0add569b988e9f1e319b9577fbd8e076ac5bd23.tar.gz mitmproxy-b0add569b988e9f1e319b9577fbd8e076ac5bd23.tar.bz2 mitmproxy-b0add569b988e9f1e319b9577fbd8e076ac5bd23.zip |
Merge pull request #1587 from Kriechi/rename-filt
rename mitmproxy.filt -> mitmproxy.flowfilter
-rw-r--r-- | docs/features/filters.rst | 3 | ||||
-rw-r--r-- | examples/flowfilter.py (renamed from examples/filt.py) | 9 | ||||
-rw-r--r-- | mitmproxy/builtins/dumper.py | 8 | ||||
-rw-r--r-- | mitmproxy/builtins/filestreamer.py | 9 | ||||
-rw-r--r-- | mitmproxy/builtins/replace.py | 12 | ||||
-rw-r--r-- | mitmproxy/builtins/setheaders.py | 16 | ||||
-rw-r--r-- | mitmproxy/builtins/stickyauth.py | 7 | ||||
-rw-r--r-- | mitmproxy/builtins/stickycookie.py | 6 | ||||
-rw-r--r-- | mitmproxy/cmdline.py | 4 | ||||
-rw-r--r-- | mitmproxy/console/grideditor/editors.py | 8 | ||||
-rw-r--r-- | mitmproxy/console/help.py | 26 | ||||
-rw-r--r-- | mitmproxy/console/master.py | 13 | ||||
-rw-r--r-- | mitmproxy/flow/io.py | 11 | ||||
-rw-r--r-- | mitmproxy/flow/state.py | 28 | ||||
-rw-r--r-- | mitmproxy/flowfilter.py (renamed from mitmproxy/filt.py) | 42 | ||||
-rw-r--r-- | mitmproxy/models/flow.py | 20 | ||||
-rw-r--r-- | mitmproxy/web/app.py | 8 | ||||
-rw-r--r-- | test/mitmproxy/test_flow.py | 26 | ||||
-rw-r--r-- | test/mitmproxy/test_flowfilter.py (renamed from test/mitmproxy/test_filt.py) | 54 |
19 files changed, 144 insertions, 166 deletions
diff --git a/docs/features/filters.rst b/docs/features/filters.rst index 509b5d6b..e531f734 100644 --- a/docs/features/filters.rst +++ b/docs/features/filters.rst @@ -8,7 +8,7 @@ Filter expressions consist of the following operators: .. documentedlist:: :header: "Expression" "Description" - :listobject: mitmproxy.filt.help + :listobject: mitmproxy.flowfilter.help - Regexes are Python-style - Regexes can be specified as quoted strings @@ -36,4 +36,3 @@ Anything but requests with a text/html content type: .. code-block:: none !(~q & ~t "text/html") - diff --git a/examples/filt.py b/examples/flowfilter.py index 9ccf9fa1..80a153da 100644 --- a/examples/filt.py +++ b/examples/flowfilter.py @@ -1,15 +1,16 @@ # This scripts demonstrates how to use mitmproxy's filter pattern in scripts. -# Usage: mitmdump -s "filt.py FILTER" +# Usage: mitmdump -s "flowfilter.py FILTER" + import sys -from mitmproxy import filt +from mitmproxy import flowfilter class Filter: def __init__(self, spec): - self.filter = filt.parse(spec) + self.filter = flowfilter.parse(spec) def response(self, flow): - if flow.match(self.filter): + if flowfilter.match(flow, self.filter): print("Flow matches filter:") print(flow) diff --git a/mitmproxy/builtins/dumper.py b/mitmproxy/builtins/dumper.py index 60d00518..109059b8 100644 --- a/mitmproxy/builtins/dumper.py +++ b/mitmproxy/builtins/dumper.py @@ -9,7 +9,7 @@ import typing # noqa from mitmproxy import contentviews from mitmproxy import ctx from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter from netlib import human from netlib import strutils @@ -22,14 +22,14 @@ def indent(n, text): class Dumper(object): def __init__(self): - self.filter = None # type: filt.TFilter + self.filter = None # type: flowfilter.TFilter self.flow_detail = None # type: int self.outfp = None # type: typing.io.TextIO self.showhost = None # type: bool def configure(self, options, updated): if options.filtstr: - self.filter = filt.parse(options.filtstr) + self.filter = flowfilter.parse(options.filtstr) if not self.filter: raise exceptions.OptionsError( "Invalid filter expression: %s" % options.filtstr @@ -220,7 +220,7 @@ class Dumper(object): return False if not self.filter: return True - elif f.match(self.filter): + elif flowfilter.match(self.filter, f): return True return False diff --git a/mitmproxy/builtins/filestreamer.py b/mitmproxy/builtins/filestreamer.py index ffa565ac..55427753 100644 --- a/mitmproxy/builtins/filestreamer.py +++ b/mitmproxy/builtins/filestreamer.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, print_function, division import os.path from mitmproxy import exceptions +from mitmproxy import flowfilter from mitmproxy.flow import io @@ -25,17 +26,17 @@ class FileStreamer: self.done() if options.outfile: - filt = None + flt = None if options.get("filtstr"): - filt = filt.parse(options.filtstr) - if not filt: + flt = flowfilter.parse(options.filtstr) + if not flt: raise exceptions.OptionsError( "Invalid filter specification: %s" % options.filtstr ) path, mode = options.outfile if mode not in ("wb", "ab"): raise exceptions.OptionsError("Invalid mode.") - err = self.start_stream_to_path(path, mode, filt) + err = self.start_stream_to_path(path, mode, flt) if err: raise exceptions.OptionsError(err) diff --git a/mitmproxy/builtins/replace.py b/mitmproxy/builtins/replace.py index df3cab04..b675b779 100644 --- a/mitmproxy/builtins/replace.py +++ b/mitmproxy/builtins/replace.py @@ -1,7 +1,7 @@ import re from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter class Replace: @@ -18,8 +18,8 @@ class Replace: """ lst = [] for fpatt, rex, s in options.replacements: - cpatt = filt.parse(fpatt) - if not cpatt: + flt = flowfilter.parse(fpatt) + if not flt: raise exceptions.OptionsError( "Invalid filter pattern: %s" % fpatt ) @@ -29,12 +29,12 @@ class Replace: raise exceptions.OptionsError( "Invalid regular expression: %s - %s" % (rex, str(e)) ) - lst.append((rex, s, cpatt)) + lst.append((rex, s, flt)) self.lst = lst def execute(self, f): - for rex, s, cpatt in self.lst: - if cpatt(f): + for rex, s, flt in self.lst: + if flt(f): if f.response: f.response.replace(rex, s, flags=re.DOTALL) else: diff --git a/mitmproxy/builtins/setheaders.py b/mitmproxy/builtins/setheaders.py index 4cb9905e..5695e1e8 100644 --- a/mitmproxy/builtins/setheaders.py +++ b/mitmproxy/builtins/setheaders.py @@ -1,5 +1,5 @@ from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter class SetHeaders: @@ -15,19 +15,19 @@ class SetHeaders: value: Header value string """ for fpatt, header, value in options.setheaders: - cpatt = filt.parse(fpatt) - if not cpatt: + flt = flowfilter.parse(fpatt) + if not flt: raise exceptions.OptionsError( "Invalid setheader filter pattern %s" % fpatt ) - self.lst.append((fpatt, header, value, cpatt)) + self.lst.append((fpatt, header, value, flt)) def run(self, f, hdrs): - for _, header, value, cpatt in self.lst: - if cpatt(f): + for _, header, value, flt in self.lst: + if flt(f): hdrs.pop(header, None) - for _, header, value, cpatt in self.lst: - if cpatt(f): + for _, header, value, flt in self.lst: + if flt(f): hdrs.add(header, value) def request(self, flow): diff --git a/mitmproxy/builtins/stickyauth.py b/mitmproxy/builtins/stickyauth.py index 98fb65ed..18b43967 100644 --- a/mitmproxy/builtins/stickyauth.py +++ b/mitmproxy/builtins/stickyauth.py @@ -1,18 +1,17 @@ from __future__ import absolute_import, print_function, division -from mitmproxy import filt from mitmproxy import exceptions +from mitmproxy import flowfilter class StickyAuth: def __init__(self): - # Compiled filter self.flt = None self.hosts = {} def configure(self, options, updated): if options.stickyauth: - flt = filt.parse(options.stickyauth) + flt = flowfilter.parse(options.stickyauth) if not flt: raise exceptions.OptionsError( "stickyauth: invalid filter expression: %s" % options.stickyauth @@ -23,6 +22,6 @@ class StickyAuth: host = flow.request.host if "authorization" in flow.request.headers: self.hosts[host] = flow.request.headers["authorization"] - elif flow.match(self.flt): + elif flowfilter.match(self.flt, flow): if host in self.hosts: flow.request.headers["authorization"] = self.hosts[host] diff --git a/mitmproxy/builtins/stickycookie.py b/mitmproxy/builtins/stickycookie.py index 88333d5c..027e624f 100644 --- a/mitmproxy/builtins/stickycookie.py +++ b/mitmproxy/builtins/stickycookie.py @@ -3,7 +3,7 @@ from six.moves import http_cookiejar from netlib.http import cookies from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter def ckey(attrs, f): @@ -34,7 +34,7 @@ class StickyCookie: def configure(self, options, updated): if options.stickycookie: - flt = filt.parse(options.stickycookie) + flt = flowfilter.parse(options.stickycookie) if not flt: raise exceptions.OptionsError( "stickycookie: invalid filter expression: %s" % options.stickycookie @@ -64,7 +64,7 @@ class StickyCookie: def request(self, flow): if self.flt: l = [] - if flow.match(self.flt): + if flowfilter.match(self.flt, flow): for domain, port, path in self.jar.keys(): match = [ domain_match(flow.request.host, domain), diff --git a/mitmproxy/cmdline.py b/mitmproxy/cmdline.py index ff431909..e97be5d4 100644 --- a/mitmproxy/cmdline.py +++ b/mitmproxy/cmdline.py @@ -4,7 +4,7 @@ import configargparse import os import re from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy import options from mitmproxy import platform from netlib import human @@ -32,7 +32,7 @@ def _parse_hook(s): if not a: raise ParseException("Empty clause: %s" % str(patt)) - if not filt.parse(patt): + if not flowfilter.parse(patt): raise ParseException("Malformed filter pattern: %s" % patt) return patt, a, b diff --git a/mitmproxy/console/grideditor/editors.py b/mitmproxy/console/grideditor/editors.py index a17fd766..0c9a2a02 100644 --- a/mitmproxy/console/grideditor/editors.py +++ b/mitmproxy/console/grideditor/editors.py @@ -1,9 +1,9 @@ from __future__ import absolute_import, print_function, division import re import urwid -from mitmproxy import filt -from mitmproxy.builtins import script from mitmproxy import exceptions +from mitmproxy import flowfilter +from mitmproxy.builtins import script from mitmproxy.console import common from mitmproxy.console.grideditor import base from mitmproxy.console.grideditor import col_bytes @@ -81,7 +81,7 @@ class ReplaceEditor(base.GridEditor): def is_error(self, col, val): if col == 0: - if not filt.parse(val): + if not flowfilter.parse(val): return "Invalid filter specification." elif col == 1: try: @@ -101,7 +101,7 @@ class SetHeadersEditor(base.GridEditor): def is_error(self, col, val): if col == 0: - if not filt.parse(val): + if not flowfilter.parse(val): return "Invalid filter specification" return False diff --git a/mitmproxy/console/help.py b/mitmproxy/console/help.py index e3e2f54c..7393d7c4 100644 --- a/mitmproxy/console/help.py +++ b/mitmproxy/console/help.py @@ -4,7 +4,7 @@ import platform import urwid -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy.console import common from mitmproxy.console import signals @@ -60,29 +60,7 @@ class HelpView(urwid.ListBox): ) text.append(urwid.Text([("head", "\n\nFilter expressions:\n")])) - f = [] - for i in filt.filt_unary: - f.append( - ("~%s" % i.code, i.help) - ) - for i in filt.filt_rex: - f.append( - ("~%s regex" % i.code, i.help) - ) - for i in filt.filt_int: - f.append( - ("~%s int" % i.code, i.help) - ) - f.sort() - f.extend( - [ - ("!", "unary not"), - ("&", "and"), - ("|", "or"), - ("(...)", "grouping"), - ] - ) - text.extend(common.format_keyvals(f, key="key", val="text", indent=4)) + text.extend(common.format_keyvals(flowfilter.help, key="key", val="text", indent=4)) text.append( urwid.Text( diff --git a/mitmproxy/console/master.py b/mitmproxy/console/master.py index 6652bf0c..25776512 100644 --- a/mitmproxy/console/master.py +++ b/mitmproxy/console/master.py @@ -22,6 +22,7 @@ from mitmproxy import contentviews from mitmproxy import controller from mitmproxy import exceptions from mitmproxy import flow +from mitmproxy import flowfilter from mitmproxy import utils import mitmproxy.options from mitmproxy.console import flowlist @@ -34,7 +35,7 @@ from mitmproxy.console import palettes from mitmproxy.console import signals from mitmproxy.console import statusbar from mitmproxy.console import window -from mitmproxy.filt import FMarked +from mitmproxy.flowfilter import FMarked from netlib import tcp, strutils EVENTLOG_SIZE = 500 @@ -125,7 +126,7 @@ class ConsoleState(flow.State): self.set_focus(self.focus) return ret - def get_nearest_matching_flow(self, flow, filt): + def get_nearest_matching_flow(self, flow, flt): fidx = self.view.index(flow) dist = 1 @@ -134,9 +135,9 @@ class ConsoleState(flow.State): fprev, _ = self.get_from_pos(fidx - dist) fnext, _ = self.get_from_pos(fidx + dist) - if fprev and fprev.match(filt): + if fprev and flowfilter.match(flt, fprev): return fprev - elif fnext and fnext.match(filt): + elif fnext and flowfilter.match(flt, fnext): return fnext dist += 1 @@ -669,14 +670,14 @@ class ConsoleMaster(flow.FlowMaster): def process_flow(self, f): should_intercept = any( [ - self.state.intercept and f.match(self.state.intercept) and not f.request.is_replay, + self.state.intercept and flowfilter.match(self.state.intercept, f) and not f.request.is_replay, f.intercepted, ] ) if should_intercept: f.intercept(self) signals.flowlist_change.send(self) - signals.flow_change.send(self, flow = f) + signals.flow_change.send(self, flow=f) def clear_events(self): self.logbuffer[:] = [] diff --git a/mitmproxy/flow/io.py b/mitmproxy/flow/io.py index 276d7a5b..07d4357c 100644 --- a/mitmproxy/flow/io.py +++ b/mitmproxy/flow/io.py @@ -3,6 +3,7 @@ from __future__ import absolute_import, print_function, division import os from mitmproxy import exceptions +from mitmproxy import flowfilter from mitmproxy import models from mitmproxy.contrib import tnetstring from mitmproxy.flow import io_compat @@ -55,14 +56,14 @@ class FlowReader: class FilteredFlowWriter: - def __init__(self, fo, filt): + def __init__(self, fo, flt): self.fo = fo - self.filt = filt + self.flt = flt - def add(self, f): - if self.filt and not f.match(self.filt): + def add(self, flow): + if self.flt and not flowfilter.match(self.flt, flow): return - d = f.get_state() + d = flow.get_state() tnetstring.dump(d, self.fo) diff --git a/mitmproxy/flow/state.py b/mitmproxy/flow/state.py index 8576fadc..759e53e4 100644 --- a/mitmproxy/flow/state.py +++ b/mitmproxy/flow/state.py @@ -5,7 +5,7 @@ from abc import abstractmethod, ABCMeta import six from typing import List # noqa -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy import models # noqa @@ -53,11 +53,11 @@ def _pos(*args): class FlowView(FlowList): - def __init__(self, store, filt=None): + def __init__(self, store, flt=None): super(FlowView, self).__init__() - if not filt: - filt = _pos - self._build(store, filt) + if not flt: + flt = _pos + self._build(store, flt) self.store = store self.store.views.append(self) @@ -65,9 +65,9 @@ class FlowView(FlowList): def _close(self): self.store.views.remove(self) - def _build(self, flows, filt=None): - if filt: - self.filt = filt + def _build(self, flows, flt=None): + if flt: + self.filt = flt self._list = list(filter(self.filt, flows)) def _add(self, f): @@ -229,21 +229,21 @@ class State(object): if txt == self.filter_txt: return if txt: - f = filt.parse(txt) - if not f: + flt = flowfilter.parse(txt) + if not flt: return "Invalid filter expression." self.view._close() - self.view = FlowView(self.flows, f) + self.view = FlowView(self.flows, flt) else: self.view._close() self.view = FlowView(self.flows, None) def set_intercept(self, txt): if txt: - f = filt.parse(txt) - if not f: + flt = flowfilter.parse(txt) + if not flt: return "Invalid filter expression." - self.intercept = f + self.intercept = flt else: self.intercept = None diff --git a/mitmproxy/filt.py b/mitmproxy/flowfilter.py index eb3e392b..27a3212c 100644 --- a/mitmproxy/filt.py +++ b/mitmproxy/flowfilter.py @@ -36,6 +36,7 @@ from __future__ import absolute_import, print_function, division import re import sys import functools +import six from mitmproxy.models.http import HTTPFlow from mitmproxy.models.tcp import TCPFlow @@ -408,7 +409,7 @@ class FNot(_Token): return not self.itm(f) -filt_unary = [ +filter_unary = [ FAsset, FErr, FHTTP, @@ -417,7 +418,7 @@ filt_unary = [ FResp, FTCP, ] -filt_rex = [ +filter_rex = [ FBod, FBodRequest, FBodResponse, @@ -433,7 +434,7 @@ filt_rex = [ FSrc, FUrl, ] -filt_int = [ +filter_int = [ FCode ] @@ -442,7 +443,7 @@ def _make(): # Order is important - multi-char expressions need to come before narrow # ones. parts = [] - for klass in filt_unary: + for klass in filter_unary: f = pp.Literal("~%s" % klass.code) + pp.WordEnd() f.setParseAction(klass.make) parts.append(f) @@ -451,12 +452,12 @@ def _make(): rex = pp.Word(simplerex) |\ pp.QuotedString("\"", escChar='\\') |\ pp.QuotedString("'", escChar='\\') - for klass in filt_rex: + for klass in filter_rex: f = pp.Literal("~%s" % klass.code) + pp.WordEnd() + rex.copy() f.setParseAction(klass.make) parts.append(f) - for klass in filt_int: + for klass in filter_int: f = pp.Literal("~%s" % klass.code) + pp.WordEnd() + pp.Word(pp.nums) f.setParseAction(klass.make) parts.append(f) @@ -492,25 +493,42 @@ TFilter = Callable[[Flow], bool] def parse(s): # type: (str) -> TFilter try: - filt = bnf.parseString(s, parseAll=True)[0] - filt.pattern = s - return filt + flt = bnf.parseString(s, parseAll=True)[0] + flt.pattern = s + return flt except pp.ParseException: return None except ValueError: return None +def match(flt, flow): + """ + Matches a flow against a compiled filter expression. + Returns True if matched, False if not. + + If flt is a string, it will be compiled as a filter expression. + If the expression is invalid, ValueError is raised. + """ + if isinstance(flt, six.string_types): + flt = parse(flt) + if not flt: + raise ValueError("Invalid filter expression.") + if flt: + return flt(flow) + return True + + help = [] -for i in filt_unary: +for i in filter_unary: help.append( ("~%s" % i.code, i.help) ) -for i in filt_rex: +for i in filter_rex: help.append( ("~%s regex" % i.code, i.help) ) -for i in filt_int: +for i in filter_int: help.append( ("~%s int" % i.code, i.help) ) diff --git a/mitmproxy/models/flow.py b/mitmproxy/models/flow.py index fc673274..118aa3d1 100644 --- a/mitmproxy/models/flow.py +++ b/mitmproxy/models/flow.py @@ -8,8 +8,6 @@ from mitmproxy import stateobject from mitmproxy.models.connections import ClientConnection from mitmproxy.models.connections import ServerConnection -import six - from netlib import version from typing import Optional # noqa @@ -188,21 +186,3 @@ class Flow(stateobject.StateObject): self.reply.ack() self.reply.commit() master.handle_accept_intercept(self) - - def match(self, f): - """ - Match this flow against a compiled filter expression. Returns True - if matched, False if not. - - If f is a string, it will be compiled as a filter expression. If - the expression is invalid, ValueError is raised. - """ - if isinstance(f, six.string_types): - from .. import filt - - f = filt.parse(f) - if not f: - raise ValueError("Invalid filter expression.") - if f: - return f(self) - return True diff --git a/mitmproxy/web/app.py b/mitmproxy/web/app.py index 5498c2d9..34969870 100644 --- a/mitmproxy/web/app.py +++ b/mitmproxy/web/app.py @@ -14,7 +14,7 @@ import tornado.web from io import BytesIO from mitmproxy.flow import FlowWriter, FlowReader -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy import models from mitmproxy import contentviews from netlib import version @@ -151,11 +151,11 @@ class IndexHandler(RequestHandler): self.render("index.html") -class FiltHelp(RequestHandler): +class FilterHelp(RequestHandler): def get(self): self.write(dict( - commands=filt.help + commands=flowfilter.help )) @@ -434,7 +434,7 @@ class Application(tornado.web.Application): self.master = master handlers = [ (r"/", IndexHandler), - (r"/filter-help", FiltHelp), + (r"/filter-help", FilterHelp), (r"/updates", ClientConnection), (r"/events", Events), (r"/flows", Flows), diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py index 0fe45afb..cc9d2691 100644 --- a/test/mitmproxy/test_flow.py +++ b/test/mitmproxy/test_flow.py @@ -3,7 +3,7 @@ import io import netlib.utils from netlib.http import Headers -from mitmproxy import filt, flow, options +from mitmproxy import flowfilter, flow, options from mitmproxy.contrib import tnetstring from mitmproxy.exceptions import FlowReadException, Kill from mitmproxy.models import Error @@ -68,14 +68,14 @@ class TestHTTPFlow(object): def test_match(self): f = tutils.tflow(resp=True) - assert not f.match("~b test") - assert f.match(None) - assert not f.match("~b test") + assert not flowfilter.match("~b test", f) + assert flowfilter.match(None, f) + assert not flowfilter.match("~b test", f) f = tutils.tflow(err=True) - assert f.match("~e") + assert flowfilter.match("~e", f) - tutils.raises(ValueError, f.match, "~") + tutils.raises(ValueError, flowfilter.match, "~", f) def test_backup(self): f = tutils.tflow() @@ -195,14 +195,14 @@ class TestTCPFlow: def test_match(self): f = tutils.ttcpflow() - assert not f.match("~b nonexistent") - assert f.match(None) - assert not f.match("~b nonexistent") + assert not flowfilter.match("~b nonexistent", f) + assert flowfilter.match(None, f) + assert not flowfilter.match("~b nonexistent", f) f = tutils.ttcpflow(err=True) - assert f.match("~e") + assert flowfilter.match("~e", f) - tutils.raises(ValueError, f.match, "~") + tutils.raises(ValueError, flowfilter.match, "~", f) class TestState: @@ -400,8 +400,8 @@ class TestSerialize: def test_filter(self): sio = io.BytesIO() - fl = filt.parse("~c 200") - w = flow.FilteredFlowWriter(sio, fl) + flt = flowfilter.parse("~c 200") + w = flow.FilteredFlowWriter(sio, flt) f = tutils.tflow(resp=True) f.response.status_code = 200 diff --git a/test/mitmproxy/test_filt.py b/test/mitmproxy/test_flowfilter.py index 69f042bb..e8d19ffa 100644 --- a/test/mitmproxy/test_filt.py +++ b/test/mitmproxy/test_flowfilter.py @@ -1,7 +1,7 @@ from six.moves import cStringIO as StringIO from mock import patch -from mitmproxy import filt +from mitmproxy import flowfilter from . import tutils @@ -14,64 +14,64 @@ class TestParsing: assert c.getvalue() def test_parse_err(self): - assert filt.parse("~h [") is None + assert flowfilter.parse("~h [") is None def test_simple(self): - assert not filt.parse("~b") - assert filt.parse("~q") - assert filt.parse("~c 10") - assert filt.parse("~m foobar") - assert filt.parse("~u foobar") - assert filt.parse("~q ~c 10") - p = filt.parse("~q ~c 10") + assert not flowfilter.parse("~b") + assert flowfilter.parse("~q") + assert flowfilter.parse("~c 10") + assert flowfilter.parse("~m foobar") + assert flowfilter.parse("~u foobar") + assert flowfilter.parse("~q ~c 10") + p = flowfilter.parse("~q ~c 10") self._dump(p) assert len(p.lst) == 2 def test_naked_url(self): - a = filt.parse("foobar ~h rex") + a = flowfilter.parse("foobar ~h rex") assert a.lst[0].expr == "foobar" assert a.lst[1].expr == "rex" self._dump(a) def test_quoting(self): - a = filt.parse("~u 'foo ~u bar' ~u voing") + a = flowfilter.parse("~u 'foo ~u bar' ~u voing") assert a.lst[0].expr == "foo ~u bar" assert a.lst[1].expr == "voing" self._dump(a) - a = filt.parse("~u foobar") + a = flowfilter.parse("~u foobar") assert a.expr == "foobar" - a = filt.parse(r"~u 'foobar\"\''") + a = flowfilter.parse(r"~u 'foobar\"\''") assert a.expr == "foobar\"'" - a = filt.parse(r'~u "foo \'bar"') + a = flowfilter.parse(r'~u "foo \'bar"') assert a.expr == "foo 'bar" def test_nesting(self): - a = filt.parse("(~u foobar & ~h voing)") + a = flowfilter.parse("(~u foobar & ~h voing)") assert a.lst[0].expr == "foobar" self._dump(a) def test_not(self): - a = filt.parse("!~h test") + a = flowfilter.parse("!~h test") assert a.itm.expr == "test" - a = filt.parse("!(~u test & ~h bar)") + a = flowfilter.parse("!(~u test & ~h bar)") assert a.itm.lst[0].expr == "test" self._dump(a) def test_binaryops(self): - a = filt.parse("~u foobar | ~h voing") - isinstance(a, filt.FOr) + a = flowfilter.parse("~u foobar | ~h voing") + isinstance(a, flowfilter.FOr) self._dump(a) - a = filt.parse("~u foobar & ~h voing") - isinstance(a, filt.FAnd) + a = flowfilter.parse("~u foobar & ~h voing") + isinstance(a, flowfilter.FAnd) self._dump(a) def test_wideops(self): - a = filt.parse("~hq 'header: qvalue'") - assert isinstance(a, filt.FHeadRequest) + a = flowfilter.parse("~hq 'header: qvalue'") + assert isinstance(a, flowfilter.FHeadRequest) self._dump(a) @@ -87,7 +87,7 @@ class TestMatchingHTTPFlow: return tutils.tflow(err=True) def q(self, q, o): - return filt.parse(q)(o) + return flowfilter.parse(q)(o) def test_http(self): s = self.req() @@ -263,7 +263,7 @@ class TestMatchingTCPFlow: return tutils.ttcpflow(err=True) def q(self, q, o): - return filt.parse(q)(o) + return flowfilter.parse(q)(o) def test_tcp(self): f = self.flow() @@ -387,7 +387,7 @@ class TestMatchingDummyFlow: return tutils.tdummyflow(err=True) def q(self, q, o): - return filt.parse(q)(o) + return flowfilter.parse(q)(o) def test_filters(self): e = self.err() @@ -439,4 +439,4 @@ def test_pyparsing_bug(extract_tb): """https://github.com/mitmproxy/mitmproxy/issues/1087""" # The text is a string with leading and trailing whitespace stripped; if the source is not available it is None. extract_tb.return_value = [("", 1, "test", None)] - assert filt.parse("test") + assert flowfilter.parse("test") |