diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index e258bbea1..00418de7e 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -38,7 +38,7 @@ jobs: - uses: install-pinned/autoflake@19ecc14a8688d57cca9dc6cfd705f16f200ff097 - run: autoflake --in-place --remove-all-unused-imports --exclude contrib -r . - - uses: install-pinned/black@9101a4d68e870eaaaae21c412d1d879b93c9afcb + - uses: install-pinned/black@13c8a20eb904ba800c87f0b34ccfd932ac2ff81d - run: black --extend-exclude mitmproxy/contrib . - uses: mhils/add-pr-ref-in-changelog@main diff --git a/examples/contrib/domain_fronting.py b/examples/contrib/domain_fronting.py index 0a477d0b5..804ceadf3 100644 --- a/examples/contrib/domain_fronting.py +++ b/examples/contrib/domain_fronting.py @@ -60,7 +60,6 @@ class Mapping: class HttpsDomainFronting: - # configurations for regular ("foo.example.com") mappings: star_mappings: dict[str, Mapping] diff --git a/examples/contrib/har_dump.py b/examples/contrib/har_dump.py index bdd758ccb..47930dd32 100644 --- a/examples/contrib/har_dump.py +++ b/examples/contrib/har_dump.py @@ -56,7 +56,6 @@ def configure(updated): def flow_entry(flow: mitmproxy.http.HTTPFlow) -> dict: - # -1 indicates that these values do not apply to current request ssl_time = -1 connect_time = -1 diff --git a/examples/contrib/link_expander.py b/examples/contrib/link_expander.py index 7e7e6b5d8..e62aab5e9 100644 --- a/examples/contrib/link_expander.py +++ b/examples/contrib/link_expander.py @@ -7,7 +7,6 @@ from urllib.parse import urljoin def response(flow): - if ( "Content-Type" in flow.response.headers and flow.response.headers["Content-Type"].find("text/html") != -1 diff --git a/examples/contrib/test_xss_scanner.py b/examples/contrib/test_xss_scanner.py index 2f89bab48..8aeb52404 100644 --- a/examples/contrib/test_xss_scanner.py +++ b/examples/contrib/test_xss_scanner.py @@ -408,7 +408,6 @@ class TestXSSScanner: assert sqli_info is None def test_test_query_injection(self, get_request_vuln): - xss_info = xss.test_query_injection( "", "https://example.com/vuln.php?cmd=ls", {} )[0] diff --git a/examples/contrib/webscanner_helper/mapping.py b/examples/contrib/webscanner_helper/mapping.py index 52509730d..c8069c91f 100644 --- a/examples/contrib/webscanner_helper/mapping.py +++ b/examples/contrib/webscanner_helper/mapping.py @@ -141,7 +141,6 @@ class MappingAddon: def done(self) -> None: """Dumps all new content into the configuration file if self.persistent is set.""" if self.persistent: - # make sure that all items are strings and not soups. def value_dumper(value): store = {} diff --git a/examples/contrib/webscanner_helper/urldict.py b/examples/contrib/webscanner_helper/urldict.py index a5b02af21..a4ce1e0fa 100644 --- a/examples/contrib/webscanner_helper/urldict.py +++ b/examples/contrib/webscanner_helper/urldict.py @@ -50,7 +50,6 @@ class URLDict(MutableMapping): return self.store.__len__() def get_generator(self, flow: HTTPFlow) -> Generator[Any, None, None]: - for fltr, value in self.store.items(): if flowfilter.match(fltr, flow): yield value diff --git a/examples/contrib/webscanner_helper/watchdog.py b/examples/contrib/webscanner_helper/watchdog.py index 361f72a43..7f63ffec5 100644 --- a/examples/contrib/webscanner_helper/watchdog.py +++ b/examples/contrib/webscanner_helper/watchdog.py @@ -66,7 +66,6 @@ class WatchdogAddon: and flow.error is not None and not isinstance(flow.error, HttpSyntaxException) ): - self.last_trigger = time.time() logger.error(f"Watchdog triggered! Cause: {flow}") self.error_event.set() diff --git a/mitmproxy/addons/dumper.py b/mitmproxy/addons/dumper.py index 42ecd2600..897fc3a15 100644 --- a/mitmproxy/addons/dumper.py +++ b/mitmproxy/addons/dumper.py @@ -111,7 +111,7 @@ class Dumper: def _colorful(self, line): yield " " # we can already indent here - for (style, text) in line: + for style, text in line: yield self.style(text, **CONTENTVIEW_STYLES.get(style, {})) def _echo_message( diff --git a/mitmproxy/contentviews/__init__.py b/mitmproxy/contentviews/__init__.py index 2949c8fa3..688869b6c 100644 --- a/mitmproxy/contentviews/__init__.py +++ b/mitmproxy/contentviews/__init__.py @@ -89,7 +89,7 @@ def safe_to_print(lines, encoding="utf8"): """ for line in lines: clean_line = [] - for (style, text) in line: + for style, text in line: if isinstance(text, bytes): text = text.decode(encoding, "replace") text = strutils.escape_control_characters(text) diff --git a/mitmproxy/contentviews/base.py b/mitmproxy/contentviews/base.py index 9788eb688..7eca342a0 100644 --- a/mitmproxy/contentviews/base.py +++ b/mitmproxy/contentviews/base.py @@ -86,7 +86,6 @@ def format_pairs(items: Iterable[tuple[TTextType, TTextType]]) -> Iterator[TView for key, value in items: if isinstance(key, bytes): - key += b":" else: key += ":" diff --git a/mitmproxy/contentviews/grpc.py b/mitmproxy/contentviews/grpc.py index faa60079e..899d8a601 100644 --- a/mitmproxy/contentviews/grpc.py +++ b/mitmproxy/contentviews/grpc.py @@ -1113,7 +1113,6 @@ class ViewGrpcProtobuf(base.View): http_message: http.Message | None = None, **unknown_metadata, ) -> float: - if bool(data) and content_type in self.__content_types_grpc: return 1 if bool(data) and content_type in self.__content_types_pb: diff --git a/mitmproxy/io/tnetstring.py b/mitmproxy/io/tnetstring.py index b11580e9e..73b7aeb37 100644 --- a/mitmproxy/io/tnetstring.py +++ b/mitmproxy/io/tnetstring.py @@ -138,7 +138,7 @@ def _rdumpq(q: collections.deque, size: int, value: TSerializable) -> int: elif isinstance(value, dict): write(b"}") init_size = size = size + 1 - for (k, v) in value.items(): + for k, v in value.items(): size = _rdumpq(q, size, v) size = _rdumpq(q, size, k) span = str(size - init_size).encode() diff --git a/mitmproxy/net/http/cookies.py b/mitmproxy/net/http/cookies.py index 3e961ae83..be8c94f8e 100644 --- a/mitmproxy/net/http/cookies.py +++ b/mitmproxy/net/http/cookies.py @@ -274,7 +274,6 @@ def format_set_cookie_header(set_cookies: list[TSetCookie]) -> str: rv = [] for name, value, attrs in set_cookies: - pairs = [(name, value)] pairs.extend(attrs.fields if hasattr(attrs, "fields") else attrs) diff --git a/mitmproxy/net/http/http1/read.py b/mitmproxy/net/http/http1/read.py index 2986c489d..578fcd7d4 100644 --- a/mitmproxy/net/http/http1/read.py +++ b/mitmproxy/net/http/http1/read.py @@ -56,7 +56,7 @@ def validate_headers(headers: Headers) -> None: te_found = False cl_found = False - for (name, value) in headers.fields: + for name, value in headers.fields: if not _valid_header_name.match(name): raise ValueError( f"Received an invalid header name: {name!r}. Invalid header names may introduce " diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py index 5fa10a787..17cec4d98 100644 --- a/mitmproxy/optmanager.py +++ b/mitmproxy/optmanager.py @@ -161,7 +161,7 @@ class OptManager: def _notify_subscribers(self, updated) -> None: cleanup = False - for (ref, opts) in self._subscriptions: + for ref, opts in self._subscriptions: callback = ref() if callback is not None: if opts & updated: diff --git a/mitmproxy/platform/windows.py b/mitmproxy/platform/windows.py index 1e065544b..005bb148a 100644 --- a/mitmproxy/platform/windows.py +++ b/mitmproxy/platform/windows.py @@ -132,6 +132,7 @@ IN4_ADDR = ctypes.c_ubyte * 4 # IPv6 # + # https://msdn.microsoft.com/en-us/library/windows/desktop/aa366896(v=vs.85).aspx class MIB_TCP6ROW_OWNER_PID(ctypes.Structure): _fields_ = [ @@ -161,6 +162,7 @@ def MIB_TCP6TABLE_OWNER_PID(size): # IPv4 # + # https://msdn.microsoft.com/en-us/library/windows/desktop/aa366913(v=vs.85).aspx class MIB_TCPROW_OWNER_PID(ctypes.Structure): _fields_ = [ diff --git a/mitmproxy/proxy/layers/http/__init__.py b/mitmproxy/proxy/layers/http/__init__.py index 9d7cba4ce..56d718912 100644 --- a/mitmproxy/proxy/layers/http/__init__.py +++ b/mitmproxy/proxy/layers/http/__init__.py @@ -1028,7 +1028,6 @@ class HttpLayer(layer.Layer): stack = tunnel.LayerStack() if not can_use_context_connection: - context.server = Server( address=event.address, transport_protocol=event.transport_protocol ) diff --git a/mitmproxy/proxy/layers/http/_http2.py b/mitmproxy/proxy/layers/http/_http2.py index f8151bf98..df32853a0 100644 --- a/mitmproxy/proxy/layers/http/_http2.py +++ b/mitmproxy/proxy/layers/http/_http2.py @@ -610,7 +610,7 @@ def split_pseudo_headers( ) -> tuple[dict[bytes, bytes], http.Headers]: pseudo_headers: dict[bytes, bytes] = {} i = 0 - for (header, value) in h2_headers: + for header, value in h2_headers: if header.startswith(b":"): if header in pseudo_headers: raise ValueError(f"Duplicate HTTP/2 pseudo header: {header!r}") diff --git a/mitmproxy/proxy/layers/tcp.py b/mitmproxy/proxy/layers/tcp.py index 0272d4ed5..417009e41 100644 --- a/mitmproxy/proxy/layers/tcp.py +++ b/mitmproxy/proxy/layers/tcp.py @@ -93,7 +93,6 @@ class TCPLayer(layer.Layer): @expect(events.DataReceived, events.ConnectionClosed, TcpMessageInjected) def relay_messages(self, event: events.Event) -> layer.CommandGenerator[None]: - if isinstance(event, TcpMessageInjected): # we just spoof that we received data here and then process that regularly. event = events.DataReceived( diff --git a/mitmproxy/proxy/layers/udp.py b/mitmproxy/proxy/layers/udp.py index e80fc7b9d..ac6643b9a 100644 --- a/mitmproxy/proxy/layers/udp.py +++ b/mitmproxy/proxy/layers/udp.py @@ -92,7 +92,6 @@ class UDPLayer(layer.Layer): @expect(events.DataReceived, events.ConnectionClosed, UdpMessageInjected) def relay_messages(self, event: events.Event) -> layer.CommandGenerator[None]: - if isinstance(event, UdpMessageInjected): # we just spoof that we received data here and then process that regularly. event = events.DataReceived( diff --git a/mitmproxy/proxy/layers/websocket.py b/mitmproxy/proxy/layers/websocket.py index 24c291b76..85b63b4bd 100644 --- a/mitmproxy/proxy/layers/websocket.py +++ b/mitmproxy/proxy/layers/websocket.py @@ -97,7 +97,6 @@ class WebsocketLayer(layer.Layer): @expect(events.Start) def start(self, _) -> layer.CommandGenerator[None]: - client_extensions = [] server_extensions = [] diff --git a/mitmproxy/proxy/server.py b/mitmproxy/proxy/server.py index ac717dfae..69442b0bd 100644 --- a/mitmproxy/proxy/server.py +++ b/mitmproxy/proxy/server.py @@ -357,7 +357,6 @@ class ConnectionHandler(metaclass=abc.ABCMeta): try: layer_commands = self.layer.handle_event(event) for command in layer_commands: - if isinstance(command, commands.OpenConnection): assert command.connection not in self.transports handler = asyncio_utils.create_task( diff --git a/mitmproxy/tools/console/common.py b/mitmproxy/tools/console/common.py index 58f2be69a..9e2aaf2f8 100644 --- a/mitmproxy/tools/console/common.py +++ b/mitmproxy/tools/console/common.py @@ -550,7 +550,6 @@ def format_http_flow_table( response_style = "" if response_code: - status = str(response_code) status_style = response_style or HTTP_RESPONSE_CODE_STYLE.get( response_code // 100, "code_other" diff --git a/mitmproxy/tools/console/flowview.py b/mitmproxy/tools/console/flowview.py index 8aae522a8..f00d2fefe 100644 --- a/mitmproxy/tools/console/flowview.py +++ b/mitmproxy/tools/console/flowview.py @@ -329,7 +329,7 @@ class FlowDetails(tabs.Tabs): text_objects = [] for line in lines: txt = [] - for (style, text) in line: + for style, text in line: if total_chars + len(text) > max_chars: text = text[: max_chars - total_chars] txt.append((style, text)) diff --git a/mitmproxy/tools/console/grideditor/editors.py b/mitmproxy/tools/console/grideditor/editors.py index bfc9b3862..f1b80b817 100644 --- a/mitmproxy/tools/console/grideditor/editors.py +++ b/mitmproxy/tools/console/grideditor/editors.py @@ -54,7 +54,6 @@ class RequestMultipartEditor(base.FocusEditor): columns = [col_text.Column("Key"), col_text.Column("Value")] def get_data(self, flow): - return flow.request.multipart_form.items(multi=True) def set_data(self, vals, flow): @@ -66,7 +65,6 @@ class RequestUrlEncodedEditor(base.FocusEditor): columns = [col_text.Column("Key"), col_text.Column("Value")] def get_data(self, flow): - return flow.request.urlencoded_form.items(multi=True) def set_data(self, vals, flow): diff --git a/mitmproxy/tools/console/quickhelp.py b/mitmproxy/tools/console/quickhelp.py index a24f81004..562587ac8 100644 --- a/mitmproxy/tools/console/quickhelp.py +++ b/mitmproxy/tools/console/quickhelp.py @@ -169,7 +169,7 @@ def _make_row(label: str, items: HelpItems, keymap: Keymap) -> urwid.Columns: cols = [ (len(label), urwid.Text(label)), ] - for (short, long) in items.items(): + for short, long in items.items(): if isinstance(long, BasicKeyHelp): key_short = long.key else: diff --git a/mitmproxy/tools/web/app.py b/mitmproxy/tools/web/app.py index 153b1afe0..334661cc1 100644 --- a/mitmproxy/tools/web/app.py +++ b/mitmproxy/tools/web/app.py @@ -559,7 +559,7 @@ class FlowContentView(RequestHandler): class Commands(RequestHandler): def get(self) -> None: commands = {} - for (name, cmd) in self.master.commands.commands.items(): + for name, cmd in self.master.commands.commands.items(): commands[name] = { "help": cmd.help, "parameters": [ diff --git a/test/mitmproxy/addons/test_clientplayback.py b/test/mitmproxy/addons/test_clientplayback.py index 013d6f1b3..62e4e2e3b 100644 --- a/test/mitmproxy/addons/test_clientplayback.py +++ b/test/mitmproxy/addons/test_clientplayback.py @@ -50,7 +50,6 @@ async def test_playback(mode, concurrency): with taddons.context(cp, ps) as tctx: tctx.configure(cp, client_replay_concurrency=concurrency) async with tcp_server(handler) as addr: - cp.running() flow = tflow.tflow(live=False) flow.request.content = b"data" diff --git a/test/mitmproxy/net/http/test_cookies.py b/test/mitmproxy/net/http/test_cookies.py index 13b89d940..936a6f2c1 100644 --- a/test/mitmproxy/net/http/test_cookies.py +++ b/test/mitmproxy/net/http/test_cookies.py @@ -198,7 +198,6 @@ def test_parse_set_cookie_header(): def test_refresh_cookie(): - # Invalid expires format, sent to us by Reddit. c = "rfoo=bar; Domain=reddit.com; expires=Thu, 31 Dec 2133 23:59:59 GMT; Path=/" assert cookies.refresh_set_cookie_header(c, 60) diff --git a/test/mitmproxy/tools/console/test_quickhelp.py b/test/mitmproxy/tools/console/test_quickhelp.py index 722af3dab..e129850d5 100644 --- a/test/mitmproxy/tools/console/test_quickhelp.py +++ b/test/mitmproxy/tools/console/test_quickhelp.py @@ -44,7 +44,7 @@ tflow2.marked = "x" def test_quickhelp(widget, flow, keymap, is_root_widget): qh = quickhelp.make(widget, flow, is_root_widget) for row in [qh.top_items, qh.bottom_items]: - for (title, v) in row.items(): + for title, v in row.items(): if isinstance(v, quickhelp.BasicKeyHelp): key_short = v.key else: diff --git a/test/mitmproxy/tools/web/test_app.py b/test/mitmproxy/tools/web/test_app.py index d4b29906b..66816da6b 100644 --- a/test/mitmproxy/tools/web/test_app.py +++ b/test/mitmproxy/tools/web/test_app.py @@ -130,7 +130,6 @@ async def test_generate_options_js(): raise RuntimeError(t) with redirect_stdout(io.StringIO()) as s: - print("/** Auto-generated by test_app.py:test_generate_options_js */") print("export interface OptionsState {")