From be50f3f4810c70e0050a17cefee6a69bdc76e271 Mon Sep 17 00:00:00 2001 From: kira0204 Date: Tue, 6 Mar 2018 05:44:05 +0530 Subject: wrong additions test-for-2850 few fixes mock testing Typo error --- mitmproxy/command.py | 11 ++++++++--- test/mitmproxy/test_command.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/mitmproxy/command.py b/mitmproxy/command.py index 45141576..114e882d 100644 --- a/mitmproxy/command.py +++ b/mitmproxy/command.py @@ -1,5 +1,5 @@ """ - This module manges and invokes typed commands. + This module manages and invokes typed commands. """ import inspect import types @@ -131,8 +131,13 @@ class CommandManager(mitmproxy.types._CommandBase): for i in dir(addon): if not i.startswith("__"): o = getattr(addon, i) - if hasattr(o, "command_path"): - self.add(o.command_path, o) + try: + is_command = hasattr(o, "command_path") + except Exception: + pass # hasattr may raise if o implements __getattr__. + else: + if is_command: + self.add(o.command_path, o) def add(self, path: str, func: typing.Callable): self.commands[path] = Command(self, path, func) diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index e2b80753..ffbb20af 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -1,4 +1,5 @@ import typing +from unittest import mock from mitmproxy import command from mitmproxy import flow from mitmproxy import exceptions @@ -309,6 +310,19 @@ class TDec: pass +def test_collect_commands(): + """ + This tests for the error thrown by hasattr() + """ + with mock.patch("mitmproxy.command.hasattr") as mock_hasattr: + mock_hasattr.return_value = False + with taddons.context() as tctx: + mock_hasattr.side_effect = OSError + c = command.CommandManager(tctx.master) + a = TDec() + c.collect_commands(a) + + def test_decorator(): with taddons.context() as tctx: c = command.CommandManager(tctx.master) -- cgit v1.2.3 From 57197c3e6cad1c1ef16e3538c0032ce94e239553 Mon Sep 17 00:00:00 2001 From: kira0204 Date: Wed, 7 Mar 2018 06:34:16 +0530 Subject: using asserts --- test/mitmproxy/test_command.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index ffbb20af..6b8bc7b0 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -321,6 +321,9 @@ def test_collect_commands(): c = command.CommandManager(tctx.master) a = TDec() c.collect_commands(a) + assert not "cmd1" in c.commands + assert not "cmd2" in c.commands + assert not "empty" in c.commands def test_decorator(): -- cgit v1.2.3 From 167e01acdfac792412b48fd2b30e7bd85b028cda Mon Sep 17 00:00:00 2001 From: kira0204 Date: Wed, 7 Mar 2018 16:12:12 +0530 Subject: fixing lint --- test/mitmproxy/test_command.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index 6b8bc7b0..0c8d7208 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -321,9 +321,9 @@ def test_collect_commands(): c = command.CommandManager(tctx.master) a = TDec() c.collect_commands(a) - assert not "cmd1" in c.commands - assert not "cmd2" in c.commands - assert not "empty" in c.commands + assert "cmd1" not in c.commands + assert "cmd2" not in c.commands + assert "empty" not in c.commands def test_decorator(): -- cgit v1.2.3 From 5dcc3b4ff832f817fc621d9116f1b399eb2ff137 Mon Sep 17 00:00:00 2001 From: kira0204 Date: Mon, 12 Mar 2018 00:28:43 +0530 Subject: Testing using addon --- test/mitmproxy/test_command.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index 0c8d7208..32498578 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -1,5 +1,4 @@ import typing -from unittest import mock from mitmproxy import command from mitmproxy import flow from mitmproxy import exceptions @@ -310,20 +309,27 @@ class TDec: pass +class TAttr: + def __getattr__(self, item): + raise IOError + + +class TCmds(TAttr): + def __init__(self): + self.TAttr = TAttr() + + def test_collect_commands(): """ This tests for the error thrown by hasattr() """ - with mock.patch("mitmproxy.command.hasattr") as mock_hasattr: - mock_hasattr.return_value = False - with taddons.context() as tctx: - mock_hasattr.side_effect = OSError - c = command.CommandManager(tctx.master) - a = TDec() - c.collect_commands(a) - assert "cmd1" not in c.commands - assert "cmd2" not in c.commands - assert "empty" not in c.commands + with taddons.context() as tctx: + c = command.CommandManager(tctx.master) + a = TCmds() + c.collect_commands(a) + assert "cmd1" not in c.commands + assert "cmd2" not in c.commands + assert "empty" not in c.commands def test_decorator(): -- cgit v1.2.3 From 8aad2d63cfaf30204464fcfee4ecf6f159a8f731 Mon Sep 17 00:00:00 2001 From: kira0204 Date: Mon, 12 Mar 2018 09:13:29 +0530 Subject: adding command --- test/mitmproxy/test_command.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index 32498578..3d0a43f8 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -318,6 +318,10 @@ class TCmds(TAttr): def __init__(self): self.TAttr = TAttr() + @command.command("empty") + def empty(self) -> None: + pass + def test_collect_commands(): """ @@ -327,9 +331,7 @@ def test_collect_commands(): c = command.CommandManager(tctx.master) a = TCmds() c.collect_commands(a) - assert "cmd1" not in c.commands - assert "cmd2" not in c.commands - assert "empty" not in c.commands + assert "empty" in c.commands def test_decorator(): -- cgit v1.2.3 From 729910bcd238953cbab3465a23bc2a7293e52145 Mon Sep 17 00:00:00 2001 From: Fenil Gandhi Date: Thu, 15 Mar 2018 21:01:12 +0530 Subject: Removing the erroneously highlighted keybinding --- mitmproxy/tools/console/statusbar.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mitmproxy/tools/console/statusbar.py b/mitmproxy/tools/console/statusbar.py index d601968e..58a27677 100644 --- a/mitmproxy/tools/console/statusbar.py +++ b/mitmproxy/tools/console/statusbar.py @@ -228,10 +228,6 @@ class StatusBar(urwid.WidgetWrap): r.append("[") r.append(("heading_key", "u")) r.append(":%s]" % self.master.options.stickyauth) - if self.master.options.console_default_contentview != "auto": - r.append("[") - r.append(("heading_key", "M")) - r.append(":%s]" % self.master.options.console_default_contentview) if self.master.options.has_changed("view_order"): r.append("[") r.append(("heading_key", "o")) -- cgit v1.2.3 From d9dcf8365b38826166e3a87f2007e4e52f7618f1 Mon Sep 17 00:00:00 2001 From: Fenil Gandhi Date: Thu, 15 Mar 2018 22:54:00 +0530 Subject: Fixing the Fix for #2990 --- mitmproxy/tools/console/statusbar.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mitmproxy/tools/console/statusbar.py b/mitmproxy/tools/console/statusbar.py index 58a27677..34bba18d 100644 --- a/mitmproxy/tools/console/statusbar.py +++ b/mitmproxy/tools/console/statusbar.py @@ -228,6 +228,8 @@ class StatusBar(urwid.WidgetWrap): r.append("[") r.append(("heading_key", "u")) r.append(":%s]" % self.master.options.stickyauth) + if self.master.options.console_default_contentview != 'auto': + r.append("[contentview:%s]" % (self.master.options.console_default_contentview)) if self.master.options.has_changed("view_order"): r.append("[") r.append(("heading_key", "o")) -- cgit v1.2.3 From c5ad026cbe21e1dfe1d189dfd7f7f0751b7dbb75 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 17 Mar 2018 10:06:46 +1300 Subject: bench: Add some very simple manual benchmarking helpers This includes a profiler addon that we might consider for promotion to a builtin down the track. --- test/bench/.gitignore | 1 + test/bench/README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++ test/bench/backend | 3 +++ test/bench/profiler.py | 25 ++++++++++++++++++++ test/bench/simple.mitmproxy | 5 ++++ test/bench/simple.traffic | 3 +++ 6 files changed, 93 insertions(+) create mode 100644 test/bench/.gitignore create mode 100644 test/bench/README.md create mode 100755 test/bench/backend create mode 100644 test/bench/profiler.py create mode 100755 test/bench/simple.mitmproxy create mode 100755 test/bench/simple.traffic diff --git a/test/bench/.gitignore b/test/bench/.gitignore new file mode 100644 index 00000000..1a06816d --- /dev/null +++ b/test/bench/.gitignore @@ -0,0 +1 @@ +results diff --git a/test/bench/README.md b/test/bench/README.md new file mode 100644 index 00000000..05741c07 --- /dev/null +++ b/test/bench/README.md @@ -0,0 +1,56 @@ + +This directory contains a set of tools for benchmarking and profiling mitmproxy. +At the moment, this is simply to give developers a quick way to see the impact +of their work. Eventually, this might grow into a performance dashboard with +historical data, so we can track performance over time. + + +# Setup + +Install the following tools: + + go get -u github.com/rakyll/hey + go get github.com/cortesi/devd/cmd/devd + +You may also want to install snakeviz to make viewing profiles easier: + + pip install snakeviz + +In one window, run the devd server: + + ./backend + + +# Running tests + +Each run consists of two files - a mitproxy invocation, and a traffic generator. +Make sure the backend is started, then run the proxy: + + ./simple.mitmproxy + +Now run the traffic generator: + + ./simple.traffic + +After the run is done, quit the proxy with ctrl-c. + + +# Reading results + +Results are placed in the ./results directory. You should see two files - a +performance log from **hey**, and a profile. You can view the profile like so: + + snakeviz ./results/simple.prof + + + + + + + + + + + + + diff --git a/test/bench/backend b/test/bench/backend new file mode 100755 index 00000000..12a05d70 --- /dev/null +++ b/test/bench/backend @@ -0,0 +1,3 @@ +#!/bin/sh + +devd -p 10001 . \ No newline at end of file diff --git a/test/bench/profiler.py b/test/bench/profiler.py new file mode 100644 index 00000000..9072e17d --- /dev/null +++ b/test/bench/profiler.py @@ -0,0 +1,25 @@ +import cProfile +from mitmproxy import ctx + + +class Profile: + """ + A simple profiler addon. + """ + def __init__(self): + self.pr = cProfile.Profile() + + def load(self, loader): + loader.add_option( + "profile_path", + str, + "/tmp/profile", + "Destination for the run profile, saved at exit" + ) + self.pr.enable() + + def done(self): + self.pr.dump_stats(ctx.options.profile_path) + + +addons = [Profile()] \ No newline at end of file diff --git a/test/bench/simple.mitmproxy b/test/bench/simple.mitmproxy new file mode 100755 index 00000000..9de32981 --- /dev/null +++ b/test/bench/simple.mitmproxy @@ -0,0 +1,5 @@ +#!/bin/sh + +mkdir -p results +mitmdump -p 10002 --mode reverse:http://devd.io:10001 \ + -s ./profiler.py --set profile_path=./results/simple.prof diff --git a/test/bench/simple.traffic b/test/bench/simple.traffic new file mode 100755 index 00000000..08200e05 --- /dev/null +++ b/test/bench/simple.traffic @@ -0,0 +1,3 @@ +#!/bin/sh + +hey -disable-keepalive http://localhost:10002/profiler.py | tee ./results/simple.perf \ No newline at end of file -- cgit v1.2.3 From 28c7eb17c0c7a9beae4b81b1d7730dfbece8076e Mon Sep 17 00:00:00 2001 From: jplochocki Date: Sun, 18 Mar 2018 16:16:03 +0100 Subject: Update cut.py Line 132: cut.clip command always copy "utf-8" when single cut specified (ie :cut.clip @focus request.method gets "utf-8") --- mitmproxy/addons/cut.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitmproxy/addons/cut.py b/mitmproxy/addons/cut.py index f9874038..f7fbc0c8 100644 --- a/mitmproxy/addons/cut.py +++ b/mitmproxy/addons/cut.py @@ -129,7 +129,7 @@ class Cut: if isinstance(v, bytes): fp.write(strutils.always_str(v)) else: - fp.write("utf8") + fp.write(v) ctx.log.alert("Clipped single cut.") else: writer = csv.writer(fp) -- cgit v1.2.3 From ef1c1239dc5d7e5960018729b545088378526710 Mon Sep 17 00:00:00 2001 From: Fenil Gandhi Date: Mon, 19 Mar 2018 01:10:08 +0530 Subject: Remove Highlight from statusbar --- mitmproxy/tools/console/statusbar.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mitmproxy/tools/console/statusbar.py b/mitmproxy/tools/console/statusbar.py index 34bba18d..47c7c163 100644 --- a/mitmproxy/tools/console/statusbar.py +++ b/mitmproxy/tools/console/statusbar.py @@ -191,9 +191,7 @@ class StatusBar(urwid.WidgetWrap): r.append(("heading_key", "H")) r.append("eaders]") if len(self.master.options.replacements): - r.append("[") - r.append(("heading_key", "R")) - r.append("eplacing]") + r.append("[ %d replacements]" % (len(self.master.options.replacements))) if creplay.count(): r.append("[") r.append(("heading_key", "cplayback")) -- cgit v1.2.3 From a148b52548df8698e63ca22897d133c708613ee9 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 18 Mar 2018 21:02:53 +0100 Subject: minor improvements --- mitmproxy/tools/console/statusbar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitmproxy/tools/console/statusbar.py b/mitmproxy/tools/console/statusbar.py index 47c7c163..fa987e94 100644 --- a/mitmproxy/tools/console/statusbar.py +++ b/mitmproxy/tools/console/statusbar.py @@ -191,7 +191,7 @@ class StatusBar(urwid.WidgetWrap): r.append(("heading_key", "H")) r.append("eaders]") if len(self.master.options.replacements): - r.append("[ %d replacements]" % (len(self.master.options.replacements))) + r.append("[%d replacements]" % len(self.master.options.replacements)) if creplay.count(): r.append("[") r.append(("heading_key", "cplayback")) -- cgit v1.2.3 From dc3c400b6b89a13693ca4643217774aa04cb49d4 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 15:00:29 +0100 Subject: add README for docs install --- docs/README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..cc06f081 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,22 @@ +# Mitmproxy Documentation + +This directory houses the mitmproxy documentation available at . + +## Quick Start + + 1. Install [hugo](https://gohugo.io/). + 2. Windows users: Depending on your git settings, you may need to manually create a symlink from + /docs/src/examples to /examples. + + +Now you can run `hugo server -D` in ./src. + + +## Extended Install + +This is required to modify CSS files. + + 1. Install node, yarn, and [modd](https://github.com/cortesi/modd). + 2. Run `yarn` in this directory to get node-sass. + +You can now run `modd` in this directory instead of running hugo directly. -- cgit v1.2.3 From 7c66c4eb16d74aca179e022b9e3136eea2b5bd4a Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 15:04:31 +0100 Subject: abort doc scripts on error --- docs/build | 3 ++- docs/ci | 1 + docs/setup | 1 + docs/upload-archive | 1 + docs/upload-stable | 1 + 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/build b/docs/build index 1ca3fdb8..53721eb1 100755 --- a/docs/build +++ b/docs/build @@ -1,3 +1,4 @@ #!/bin/sh +set -e -cd src; hugo \ No newline at end of file +cd src; hugo diff --git a/docs/ci b/docs/ci index 1584c5e1..b2f2252f 100755 --- a/docs/ci +++ b/docs/ci @@ -1,4 +1,5 @@ #!/bin/bash +set -e # This script gets run from CI to render and upload docs diff --git a/docs/setup b/docs/setup index 8a9c31fd..cb63841a 100755 --- a/docs/setup +++ b/docs/setup @@ -1,4 +1,5 @@ #!/bin/sh +set -e aws configure set preview.cloudfront true aws --profile mitmproxy \ diff --git a/docs/upload-archive b/docs/upload-archive index 86dd248e..1641c50a 100755 --- a/docs/upload-archive +++ b/docs/upload-archive @@ -1,4 +1,5 @@ #!/bin/sh +set -e if [[ $# -eq 0 ]] ; then echo "Please supply a version, e.g. 'v3'" diff --git a/docs/upload-stable b/docs/upload-stable index c2c1267e..e7dbcad3 100755 --- a/docs/upload-stable +++ b/docs/upload-stable @@ -1,4 +1,5 @@ #!/bin/sh +set -e aws configure set preview.cloudfront true aws --profile mitmproxy \ -- cgit v1.2.3 From 885d3d5da4b7bd115bc06d9fc73a5199c0b827fc Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 15:58:48 +0100 Subject: add google analytics --- docs/src/config.toml | 1 + docs/src/themes/mitmproxydocs/layouts/partials/footer.html | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/src/config.toml b/docs/src/config.toml index c9cecd8b..ee2b9224 100644 --- a/docs/src/config.toml +++ b/docs/src/config.toml @@ -4,6 +4,7 @@ title = "mitmproxy.org docs" theme = "mitmproxydocs" publishDir = "../public" RelativeURLs = true +googleAnalytics = "UA-4150636" [indexes] tag = "tags" diff --git a/docs/src/themes/mitmproxydocs/layouts/partials/footer.html b/docs/src/themes/mitmproxydocs/layouts/partials/footer.html index 308b1d01..dc9ddc85 100644 --- a/docs/src/themes/mitmproxydocs/layouts/partials/footer.html +++ b/docs/src/themes/mitmproxydocs/layouts/partials/footer.html @@ -1,2 +1,3 @@ +{{ template "_internal/google_analytics_async.html" . }} -- cgit v1.2.3 From 252684e14e824fb1c45271158f78f599c66b6db0 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 16:00:02 +0100 Subject: minor docs fixes --- docs/src/content/concepts-certificates.md | 16 +++--- docs/src/themes/mitmproxydocs/static/css/style.css | 3 ++ docs/style/style.scss | 60 ++++++++++++---------- 3 files changed, 43 insertions(+), 36 deletions(-) diff --git a/docs/src/content/concepts-certificates.md b/docs/src/content/concepts-certificates.md index 6956ff3f..e6586576 100644 --- a/docs/src/content/concepts-certificates.md +++ b/docs/src/content/concepts-certificates.md @@ -19,7 +19,7 @@ configure your target device with the correct proxy settings. Now start a browser on the device, and visit the magic domain **mitm.it**. You should see something like this: -{{< figure src="/certinstall-webapp.png" >}} +{{< figure src="/certinstall-webapp.png" class="has-border" >}} Click on the relevant icon, follow the setup instructions for the platform you're on and you are good to go. @@ -32,8 +32,8 @@ reason. Below is a list of pointers to manual certificate installation documentation for some common platforms. The mitmproxy CA cert is located in `~/.mitmproxy` after it has been generated at the first start of mitmproxy. -- [IOS](http://jasdev.me/intercepting-ios-traffic) On - iOS 10.3 and onwards, you also need to enable full trust for the mitmproxy +- [IOS](http://jasdev.me/intercepting-ios-traffic) + On iOS 10.3 and onwards, you also need to enable full trust for the mitmproxy root certificate: 1. Go to Settings > General > About > Certificate Trust Settings. 2. Under "Enable full trust for root certificates", turn on trust for @@ -42,13 +42,13 @@ documentation for some common platforms. The mitmproxy CA cert is located in - [Java](https://docs.oracle.com/cd/E19906-01/820-4916/geygn/index.html) - [Android/Android Simulator](http://wiki.cacert.org/FAQ/ImportRootCert#Android_Phones_.26_Tablets) - [Windows](https://web.archive.org/web/20160612045445/http://windows.microsoft.com/en-ca/windows/import-export-certificates-private-keys#1TC=windows-7) -- [Windows (automated)](https://technet.microsoft.com/en-us/library/cc732443.aspx) +- [Windows (automated)](https://technet.microsoft.com/en-us/library/cc732443.aspx) {{< highlight bash >}} certutil.exe -importpfx Root mitmproxy-ca-cert.p12 {{< / highlight >}} - -- [Mac OS X](https://support.apple.com/kb/PH7297?locale=en_US) + +- [Mac OS X](https://support.apple.com/kb/PH20129) - [Ubuntu/Debian]( https://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate/94861#94861) - [Mozilla Firefox](https://wiki.mozilla.org/MozillaRootCertificate#Mozilla_Firefox) - [Chrome on Linux](https://stackoverflow.com/a/15076602/198996) @@ -90,7 +90,7 @@ The files created by mitmproxy in the .mitmproxy directory are as follows: | mitmproxy-ca-cert.p12 | The certificate in PKCS12 format. For use on Windows. | | mitmproxy-ca-cert.cer | Same file as .pem, but with an extension expected by some Android devices. | -## Using a custom certificate +## Using a custom server certificate You can use your own (leaf) certificate by passing the `--cert [domain=]path_to_certificate` option to mitmproxy. Mitmproxy then uses the @@ -156,7 +156,7 @@ hostname, while using a filename allows a single specific certificate to be used for all SSL connections. Certificate files must be in the PEM format and should contain both the unencrypted private key and the certificate. -### Multiple certs by Hostname +### Multiple client certificates You can specify a directory to `--client-certs`, in which case the matching certificate is looked up by filename. So, if you visit example.org, mitmproxy diff --git a/docs/src/themes/mitmproxydocs/static/css/style.css b/docs/src/themes/mitmproxydocs/static/css/style.css index 868c7d0a..ccd0e3ff 100644 --- a/docs/src/themes/mitmproxydocs/static/css/style.css +++ b/docs/src/themes/mitmproxydocs/static/css/style.css @@ -6753,3 +6753,6 @@ code { .content h2 { padding-top: 1em; border-top: 1px solid #c0c0c0; } + +figure.has-border img { + box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); } diff --git a/docs/style/style.scss b/docs/style/style.scss index bc146fd5..2db14100 100644 --- a/docs/style/style.scss +++ b/docs/style/style.scss @@ -11,36 +11,36 @@ $family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Ox @import "../node_modules/bulma/sass/layout/_all"; .sidebody { - overflow-x: hidden; - overflow-y: scroll; + overflow-x: hidden; + overflow-y: scroll; } .example { - .highlight { - margin: 0; - } - .path { - font-style: italic; - width: 100%; - text-align: right; - } - margin-bottom: 1em; + .highlight { + margin: 0; + } + .path { + font-style: italic; + width: 100%; + text-align: right; + } + margin-bottom: 1em; } .sidebar { - background-color: #F1F1F1; - .version { - padding: 1em; - } - .brand { - background-color: #303030; - color: #c0c0c0; - padding: 1em; - top: 0; - } - .menu { - padding: 1em; - } + background-color: #F1F1F1; + .version { + padding: 1em; + } + .brand { + background-color: #303030; + color: #c0c0c0; + padding: 1em; + top: 0; + } + .menu { + padding: 1em; + } } .mainbody { @@ -54,8 +54,12 @@ code { } .content { - h2 { - padding-top: 1em; - border-top: 1px solid #c0c0c0; - } + h2 { + padding-top: 1em; + border-top: 1px solid #c0c0c0; + } +} + +figure.has-border img { + box-shadow: 0 0 20px 0 rgba(0,0,0,0.25); } -- cgit v1.2.3 From 97484879390e283b186562d69236f975c2353b45 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 16:00:23 +0100 Subject: improve transparent mode docs --- docs/src/content/howto-transparent.md | 155 ++++++++++++++++------------------ 1 file changed, 75 insertions(+), 80 deletions(-) diff --git a/docs/src/content/howto-transparent.md b/docs/src/content/howto-transparent.md index 3d99e9dc..00db189e 100644 --- a/docs/src/content/howto-transparent.md +++ b/docs/src/content/howto-transparent.md @@ -27,87 +27,50 @@ At the moment, mitmproxy supports transparent proxying on OSX Lion and above, and all current flavors of Linux. -## Linux fully transparent mode - -By default mitmproxy will use its own local IP address for its server-side -connections. In case this isn't desired, the --spoof-source-address argument can -be used to use the client's IP address for server-side connections. The -following config is required for this mode to work: - -{{< highlight bash >}} -CLIENT_NET=192.168.1.0/24 -TABLE_ID=100 -MARK=1 - -echo "$TABLE_ID mitmproxy" >> /etc/iproute2/rt_tables -iptables -t mangle -A PREROUTING -d $CLIENT_NET -j MARK --set-mark $MARK -iptables -t nat \ - -A PREROUTING -p tcp -s $CLIENT_NET \ - --match multiport --dports 80,443 -j \ - REDIRECT --to-port 8080 - -ip rule add fwmark $MARK lookup $TABLE_ID -ip route add local $CLIENT_NET dev lo table $TABLE_ID -{{< / highlight >}} - -This mode does require root privileges though. There's a wrapper in the examples -directory called 'mitmproxy_shim.c', which will enable you to use this mode with -dropped privileges. It can be used as follows: - -{{< highlight bash >}} -gcc examples/complex/full_transparency_shim.c -o mitmproxy_shim -lcap -sudo chown root:root mitmproxy_shim -sudo chmod u+s mitmproxy_shim -./mitmproxy_shim $(which mitmproxy) --mode transparent --set spoof-source-address -{{< / highlight >}} - - - ## Linux On Linux, mitmproxy integrates with the iptables redirection mechanism to achieve transparent mode. -### 1. [Install the mitmproxy certificate on the test device]({{< relref "concepts-certificates" >}}) - -### 2. Enable IP forwarding: +### 1. Enable IP forwarding. {{< highlight bash >}} sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv6.conf.all.forwarding=1 {{< / highlight >}} -You may also want to consider enabling this permanently in `/etc/sysctl.conf` or -newly created `/etc/sysctl.d/mitmproxy.conf`, see -[here](https://superuser.com/a/625852). +This makes sure that your machine forwards packets instead of rejecting them. -### 3. If your target machine is on the same physical network and you configured it to use a custom gateway, disable ICMP redirects: +If you want to persist this across reboots, you need to adjust your `/etc/sysctl.conf` or +a newly created `/etc/sysctl.d/mitmproxy.conf` (see [here](https://superuser.com/a/625852)). + +### 2. Disable ICMP redirects. {{< highlight bash >}} sysctl -w net.ipv4.conf.all.send_redirects=0 {{< / highlight >}} -You may also want to consider enabling this permanently in `/etc/sysctl.conf` or -a newly created `/etc/sysctl.d/mitmproxy.conf`, see -[here](https://superuser.com/a/625852). +If your test device is on the same physical network, your machine shouldn't inform the device that +there's a shorter route available by skipping the proxy. + +If you want to persist this across reboots, see above. -### 4. Create an iptables ruleset that redirects the desired traffic to the mitmproxy port +### 3. Create an iptables ruleset that redirects the desired traffic to mitmproxy. Details will differ according to your setup, but the ruleset should look something like this: {{< highlight bash >}} - iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 - iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080 - ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 - ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080 +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 +iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080 +ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 +ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080 {{< / highlight >}} -   You may also want to consider enabling this permanently with the -`iptables-persistent` package, see -[here](http://www.microhowto.info/howto/make_the_configuration_of_iptables_persistent_on_debian.html). +If you want to persist this across reboots, you can use the `iptables-persistent` package (see +[here](http://www.microhowto.info/howto/make_the_configuration_of_iptables_persistent_on_debian.html)). -### 5. Fire up mitmproxy +### 4. Fire up mitmproxy. You probably want a command like this: @@ -118,24 +81,22 @@ mitmproxy --mode transparent --showhost The `--mode transparent` option turns on transparent mode, and the `--showhost` argument tells mitmproxy to use the value of the Host header for URL display. -### 6. Finally, configure your test device +### 5. Finally, configure your test device. -Set the test device up to use the host on which mitmproxy is running as the -default gateway. For a detailed walkthrough, have a look at the [tutorial for -transparently proxying VMs]({{< relref "howto-transparent-vms" >}}). +Set the test device up to use the host on which mitmproxy is running as the default gateway and +[install the mitmproxy certificate authority on the test device]({{< relref "concepts-certificates" >}}). -## OpenBSD -### 1 [Install the mitmproxy certificate on the test device]({{< relref "concepts-certificates" >}}) +## OpenBSD -### 2. Enable IP forwarding +### 1. Enable IP forwarding. {{< highlight bash >}} sudo sysctl -w net.inet.ip.forwarding=1 {{< / highlight >}} -### 3. Place the following two lines in **/etc/pf.conf** +### 2. Place the following two lines in **/etc/pf.conf**. {{< highlight none >}} mitm_if = "re2" @@ -146,19 +107,19 @@ These rules tell pf to divert all traffic from `$mitm_if` destined for port 80 or 443 to the local mitmproxy instance running on port 8080. You should replace `$mitm_if` value with the interface on which your test device will appear. -### 4. Enable the pf ruleset and enable it +### 3. Configure pf with the rules. {{< highlight bash >}} doas pfctl -f /etc/pf.conf {{< / highlight >}} -And now enable it: +### 4. And now enable it. {{< highlight bash >}} doas pfctl -e {{< / highlight >}} -### 5. Fire up mitmproxy +### 5. Fire up mitmproxy. You probably want a command like this: @@ -169,10 +130,11 @@ mitmproxy --mode transparent --showhost The `--mode transparent` option turns on transparent mode, and the `--showhost` argument tells mitmproxy to use the value of the Host header for URL display. -### 6. Finally, configure your test device +### 6. Finally, configure your test device. + +Set the test device up to use the host on which mitmproxy is running as the default gateway and +[install the mitmproxy certificate authority on the test device]({{< relref "concepts-certificates" >}}). -Set the test device up to use the host on which mitmproxy is running as the -default gateway. {{% note %}} @@ -195,15 +157,13 @@ packet filter from the OpenBSD project, which mitmproxy uses to implement transparent mode on OSX. Note that this means we don't support transparent mode for earlier versions of OSX. -### 1. [Install the mitmproxy certificate on the test device]({{< relref "concepts-certificates" >}}) - -### 2. Enable IP forwarding +### 1. Enable IP forwarding. {{< highlight bash >}} sudo sysctl -w net.inet.ip.forwarding=1 {{< / highlight >}} -### 3. Place the following two lines in a file called, say, **pf.conf** +### 2. Place the following two lines in a file called, say, **pf.conf**. {{< highlight none >}} @@ -214,19 +174,19 @@ These rules tell pf to redirect all traffic destined for port 80 or 443 to the local mitmproxy instance running on port 8080. You should replace `en2` with the interface on which your test device will appear. -### 4. Configure pf with the rules +### 3. Configure pf with the rules. {{< highlight bash >}} sudo pfctl -f pf.conf {{< / highlight >}} -### 5. And now enable it +### 4. And now enable it. {{< highlight bash >}} sudo pfctl -e {{< / highlight >}} -### 6. Configure sudoers to allow mitmproxy to access pfctl +### 5. Configure sudoers to allow mitmproxy to access pfctl. Edit the file **/etc/sudoers** on your system as root. Add the following line to the end of the file: @@ -240,7 +200,7 @@ state` as root without a password. This only allows inspection of the state table, so should not be an undue security risk. If you're special feel free to tighten the restriction up to the user running mitmproxy. -### 7. Fire up mitmproxy +### 6. Fire up mitmproxy. You probably want a command like this: @@ -251,10 +211,10 @@ mitmproxy --mode transparent --showhost The `--mode transparent` flag turns on transparent mode, and the `--showhost` argument tells mitmproxy to use the value of the Host header for URL display. -### 6. Finally, configure your test device +### 7. Finally, configure your test device. -Set the test device up to use the host on which mitmproxy is running as the -default gateway. +Set the test device up to use the host on which mitmproxy is running as the default gateway and +[install the mitmproxy certificate authority on the test device]({{< relref "concepts-certificates" >}}). {{% note %}} Note that the **rdr** rules in the pf.conf given above only apply to @@ -267,3 +227,38 @@ flexible to cater for a range of creative possibilities, like intercepting traffic emanating from VMs. See the **pf.conf** man page for more. {{% /note %}} + + +## "Full" transparent mode on Linux + +By default mitmproxy will use its own local IP address for its server-side +connections. In case this isn't desired, the --spoof-source-address argument can +be used to use the client's IP address for server-side connections. The +following config is required for this mode to work: + +{{< highlight bash >}} +CLIENT_NET=192.168.1.0/24 +TABLE_ID=100 +MARK=1 + +echo "$TABLE_ID mitmproxy" >> /etc/iproute2/rt_tables +iptables -t mangle -A PREROUTING -d $CLIENT_NET -j MARK --set-mark $MARK +iptables -t nat \ + -A PREROUTING -p tcp -s $CLIENT_NET \ + --match multiport --dports 80,443 -j \ + REDIRECT --to-port 8080 + +ip rule add fwmark $MARK lookup $TABLE_ID +ip route add local $CLIENT_NET dev lo table $TABLE_ID +{{< / highlight >}} + +This mode does require root privileges though. There's a wrapper in the examples +directory called 'mitmproxy_shim.c', which will enable you to use this mode with +dropped privileges. It can be used as follows: + +{{< highlight bash >}} +gcc examples/complex/full_transparency_shim.c -o mitmproxy_shim -lcap +sudo chown root:root mitmproxy_shim +sudo chmod u+s mitmproxy_shim +./mitmproxy_shim $(which mitmproxy) --mode transparent --set spoof-source-address +{{< / highlight >}} -- cgit v1.2.3 From c6932cbde51c17486e73d909d35b311a5f97c8f4 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 18:33:51 +0100 Subject: update mitmweb dev instructions --- web/README | 6 ------ web/README.md | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 web/README create mode 100644 web/README.md diff --git a/web/README b/web/README deleted file mode 100644 index c8e60379..00000000 --- a/web/README +++ /dev/null @@ -1,6 +0,0 @@ - -Starting up - -- npm install -- gulp -- run mitmweb and open http://localhost:8081/ diff --git a/web/README.md b/web/README.md new file mode 100644 index 00000000..c43d09f0 --- /dev/null +++ b/web/README.md @@ -0,0 +1,6 @@ +# Quick Start + + +- Run `yarn` to install dependencies +- Run `gulp` to start live-compilation. +- Run `mitmweb` and open http://localhost:8081/ -- cgit v1.2.3 From 4eb6954c7d7b5327c59dfbd86cebfc3ea10c1033 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 20 Mar 2018 23:41:24 +0100 Subject: various docs improvements - add clickable anchors for headers - add "outdated" warning for archived docs - add "edit on github" button - beautify template --- docs/build | 4 - docs/build-archive | 5 ++ docs/build-current | 5 ++ docs/ci | 2 +- docs/src/content/_index.md | 1 + docs/src/layouts/_default/single.html | 14 ++-- docs/src/layouts/index.html | 10 --- docs/src/layouts/partials/add-anchors.html | 1 + docs/src/layouts/partials/edit-on-github.html | 9 ++ docs/src/layouts/partials/outdated.html | 9 ++ docs/src/layouts/partials/sidebar.html | 38 ++++----- docs/src/static/logo-docs.png | Bin 9746 -> 9166 bytes docs/src/themes/mitmproxydocs/static/css/style.css | 49 +++++++---- docs/style/style.scss | 92 ++++++++++++--------- docs/upload-archive | 2 +- docs/upload-stable | 2 +- 16 files changed, 144 insertions(+), 99 deletions(-) delete mode 100755 docs/build create mode 100755 docs/build-archive create mode 100755 docs/build-current delete mode 100644 docs/src/layouts/index.html create mode 100644 docs/src/layouts/partials/add-anchors.html create mode 100644 docs/src/layouts/partials/edit-on-github.html create mode 100644 docs/src/layouts/partials/outdated.html diff --git a/docs/build b/docs/build deleted file mode 100755 index 53721eb1..00000000 --- a/docs/build +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -e - -cd src; hugo diff --git a/docs/build-archive b/docs/build-archive new file mode 100755 index 00000000..bd11d86e --- /dev/null +++ b/docs/build-archive @@ -0,0 +1,5 @@ +#!/bin/sh +set -e + +cd src +DOCS_ARCHIVE=true hugo diff --git a/docs/build-current b/docs/build-current new file mode 100755 index 00000000..a78acab4 --- /dev/null +++ b/docs/build-current @@ -0,0 +1,5 @@ +#!/bin/sh +set -e + +cd src +hugo diff --git a/docs/ci b/docs/ci index b2f2252f..107e8370 100755 --- a/docs/ci +++ b/docs/ci @@ -3,7 +3,7 @@ set -e # This script gets run from CI to render and upload docs -./build +./build-current # Only upload if we have defined credentials - we only have these defined for # trusted commits (i.e. not PRs). diff --git a/docs/src/content/_index.md b/docs/src/content/_index.md index a977e2db..44d41611 100644 --- a/docs/src/content/_index.md +++ b/docs/src/content/_index.md @@ -1,5 +1,6 @@ --- title: "Introduction" +layout: single menu: overview: weight: 1 diff --git a/docs/src/layouts/_default/single.html b/docs/src/layouts/_default/single.html index 4a8baf53..801b6341 100644 --- a/docs/src/layouts/_default/single.html +++ b/docs/src/layouts/_default/single.html @@ -1,10 +1,12 @@ -{{ partial "header.html" . }} -
-
- {{ partial "sidebar.html" . }} +{{ partial "header" . }} +
+ -
- {{.Content}} +
+ {{ partial "outdated" . }} + {{ partial "edit-on-github" . }} + {{ partial "add-anchors" .Content}}
{{ partial "footer.html" . }} diff --git a/docs/src/layouts/index.html b/docs/src/layouts/index.html deleted file mode 100644 index 4a8baf53..00000000 --- a/docs/src/layouts/index.html +++ /dev/null @@ -1,10 +0,0 @@ -{{ partial "header.html" . }} -
-
- {{ partial "sidebar.html" . }} -
-
- {{.Content}} -
-
-{{ partial "footer.html" . }} diff --git a/docs/src/layouts/partials/add-anchors.html b/docs/src/layouts/partials/add-anchors.html new file mode 100644 index 00000000..f7050f7f --- /dev/null +++ b/docs/src/layouts/partials/add-anchors.html @@ -0,0 +1 @@ +{{ . | replaceRE "()(.+?)" "${1}#  ${3}" | safeHTML }} diff --git a/docs/src/layouts/partials/edit-on-github.html b/docs/src/layouts/partials/edit-on-github.html new file mode 100644 index 00000000..d2c3098c --- /dev/null +++ b/docs/src/layouts/partials/edit-on-github.html @@ -0,0 +1,9 @@ +{{ if and .IsPage (not (getenv "DOCS_ARCHIVE")) }} + + Edit on GitHub + +{{ end }} + diff --git a/docs/src/layouts/partials/outdated.html b/docs/src/layouts/partials/outdated.html new file mode 100644 index 00000000..5b3dd6ed --- /dev/null +++ b/docs/src/layouts/partials/outdated.html @@ -0,0 +1,9 @@ +{{- if (getenv "DOCS_ARCHIVE") -}} +
+
+ You are not viewing the most up to date version of the documentation. + Click here + to view the latest version. +
+
+{{- end -}} diff --git a/docs/src/layouts/partials/sidebar.html b/docs/src/layouts/partials/sidebar.html index ef853fc6..5ea41c12 100644 --- a/docs/src/layouts/partials/sidebar.html +++ b/docs/src/layouts/partials/sidebar.html @@ -1,24 +1,22 @@ - \ No newline at end of file + + {{ partial "sidemenu" (dict "ctx" . "menuname" "howto") }} + + + {{ partial "sidemenu" (dict "ctx" . "menuname" "tutes") }} + diff --git a/docs/src/static/logo-docs.png b/docs/src/static/logo-docs.png index b37dbd85..a46016dd 100644 Binary files a/docs/src/static/logo-docs.png and b/docs/src/static/logo-docs.png differ diff --git a/docs/src/themes/mitmproxydocs/static/css/style.css b/docs/src/themes/mitmproxydocs/static/css/style.css index ccd0e3ff..db5a36cf 100644 --- a/docs/src/themes/mitmproxydocs/static/css/style.css +++ b/docs/src/themes/mitmproxydocs/static/css/style.css @@ -6717,9 +6717,17 @@ label.panel-block { background-color: whitesmoke; padding: 3rem 1.5rem 6rem; } -.sidebody { - overflow-x: hidden; - overflow-y: scroll; } +#sidebar { + background-color: #eee; + border-right: 1px solid #c1c1c1; + box-shadow: 0 0 20px rgba(50, 50, 50, 0.2) inset; + padding: 1.75rem; } + #sidebar .brand { + padding: 1rem 0; + text-align: center; } + +#main { + padding: 3rem; } .example { margin-bottom: 1em; } @@ -6730,21 +6738,6 @@ label.panel-block { width: 100%; text-align: right; } -.sidebar { - background-color: #F1F1F1; } - .sidebar .version { - padding: 1em; } - .sidebar .brand { - background-color: #303030; - color: #c0c0c0; - padding: 1em; - top: 0; } - .sidebar .menu { - padding: 1em; } - -.mainbody { - padding: 3em; } - code { color: #1a9f1a; font-size: 0.875em; @@ -6754,5 +6747,25 @@ code { padding-top: 1em; border-top: 1px solid #c0c0c0; } +h1 .anchor, h2 .anchor, h3 .anchor, h4 .anchor, h5 .anchor, h6 .anchor { + display: inline-block; + width: 0; + margin-left: -1.5rem; + margin-right: 1.5rem; + transition: all 100ms ease-in-out; + opacity: 0; } + +h1:hover .anchor, h2:hover .anchor, h3:hover .anchor, h4:hover .anchor, h5:hover .anchor, h6:hover .anchor { + opacity: 1; } + +h1:target, h2:target, h3:target, h4:target, h5:target, h6:target { + color: #C93312; } + h1:target .anchor, h2:target .anchor, h3:target .anchor, h4:target .anchor, h5:target .anchor, h6:target .anchor { + opacity: 1; + color: #C93312; } + +.footnotes p { + display: inline; } + figure.has-border img { box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); } diff --git a/docs/style/style.scss b/docs/style/style.scss index 2db14100..2b0d2993 100644 --- a/docs/style/style.scss +++ b/docs/style/style.scss @@ -10,56 +10,72 @@ $family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Ox @import "../node_modules/bulma/sass/components/_all"; @import "../node_modules/bulma/sass/layout/_all"; -.sidebody { - overflow-x: hidden; - overflow-y: scroll; -} +#sidebar { + background-color: #eee; + border-right: 1px solid #c1c1c1; + box-shadow: 0 0 20px rgba(50, 50, 50, .2) inset; + padding: $column-gap + 1rem; -.example { - .highlight { - margin: 0; - } - .path { - font-style: italic; - width: 100%; - text-align: right; - } - margin-bottom: 1em; + .brand { + padding: 1rem 0; + text-align: center; + } } -.sidebar { - background-color: #F1F1F1; - .version { - padding: 1em; - } - .brand { - background-color: #303030; - color: #c0c0c0; - padding: 1em; - top: 0; - } - .menu { - padding: 1em; - } +#main { + padding: 3rem; } -.mainbody { - padding: 3em; +.example { + .highlight { + margin: 0; + } + .path { + font-style: italic; + width: 100%; + text-align: right; + } + margin-bottom: 1em; } code { - color: #1a9f1a; - font-size: 0.875em; - font-weight: normal; + color: #1a9f1a; + font-size: 0.875em; + font-weight: normal; } .content { - h2 { - padding-top: 1em; - border-top: 1px solid #c0c0c0; - } + h2 { + padding-top: 1em; + border-top: 1px solid #c0c0c0; + } +} + +h1, h2, h3, h4, h5, h6 { + .anchor { + display: inline-block; + width: 0; + margin-left: -1.5rem; + margin-right: 1.5rem; + transition: all 100ms ease-in-out; + opacity: 0; + } + &:hover .anchor { + opacity: 1; + } + &:target { + color: $primary; + .anchor { + opacity: 1; + color: $primary + } + } +} + +.footnotes p { + display: inline; } figure.has-border img { - box-shadow: 0 0 20px 0 rgba(0,0,0,0.25); + box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); } diff --git a/docs/upload-archive b/docs/upload-archive index 1641c50a..7548dd5b 100755 --- a/docs/upload-archive +++ b/docs/upload-archive @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e if [[ $# -eq 0 ]] ; then diff --git a/docs/upload-stable b/docs/upload-stable index e7dbcad3..a0c4dfc8 100755 --- a/docs/upload-stable +++ b/docs/upload-stable @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -e aws configure set preview.cloudfront true -- cgit v1.2.3 From 623f9b694d9f9ddc9130d03b7ffb079c1c492dc6 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Wed, 21 Mar 2018 13:46:41 +0100 Subject: fix cloudfront invalidation paths --- docs/ci | 2 +- docs/upload-archive | 2 +- docs/upload-stable | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/ci b/docs/ci index 107e8370..ab442257 100755 --- a/docs/ci +++ b/docs/ci @@ -10,5 +10,5 @@ set -e if [[ ! -z "${AWS_ACCESS_KEY_ID}" && $TRAVIS_BRANCH == "master" ]]; then aws s3 sync --acl public-read ./public s3://docs.mitmproxy.org/master aws cloudfront create-invalidation --distribution-id E1TH3USJHFQZ5Q \ - --paths "/master" + --paths "/master/*" fi diff --git a/docs/upload-archive b/docs/upload-archive index 7548dd5b..3aaeb9be 100755 --- a/docs/upload-archive +++ b/docs/upload-archive @@ -15,4 +15,4 @@ aws --profile mitmproxy \ s3 sync --acl public-read ./public s3://docs.mitmproxy.org$SPATH aws --profile mitmproxy \ cloudfront create-invalidation --distribution-id E1TH3USJHFQZ5Q \ - --paths "$SPATH" + --paths "$SPATH/*" diff --git a/docs/upload-stable b/docs/upload-stable index a0c4dfc8..5aea7479 100755 --- a/docs/upload-stable +++ b/docs/upload-stable @@ -6,4 +6,4 @@ aws --profile mitmproxy \ s3 sync --acl public-read ./public s3://docs.mitmproxy.org/stable aws --profile mitmproxy \ cloudfront create-invalidation --distribution-id E1TH3USJHFQZ5Q \ - --paths "/stable" + --paths "/stable/*" -- cgit v1.2.3 From fed54fa3d09362965721f99d2a4e74f9ddff40e8 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Fri, 23 Mar 2018 04:26:36 +0100 Subject: don't crash if server address is unknown, fix #2969 --- mitmproxy/connections.py | 19 ++++++++----------- mitmproxy/utils/human.py | 4 +++- test/mitmproxy/test_connections.py | 6 ++++++ test/mitmproxy/utils/test_human.py | 1 + 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/mitmproxy/connections.py b/mitmproxy/connections.py index 29ab6ab5..9c26b44f 100644 --- a/mitmproxy/connections.py +++ b/mitmproxy/connections.py @@ -1,18 +1,18 @@ -import time - import os +import time import typing import uuid -from mitmproxy import stateobject, exceptions from mitmproxy import certs +from mitmproxy import exceptions +from mitmproxy import stateobject from mitmproxy.net import tcp from mitmproxy.net import tls +from mitmproxy.utils import human from mitmproxy.utils import strutils class ClientConnection(tcp.BaseHandler, stateobject.StateObject): - """ A client connection @@ -72,11 +72,10 @@ class ClientConnection(tcp.BaseHandler, stateobject.StateObject): else: alpn = "" - return "".format( + return "".format( tls=tls, alpn=alpn, - host=self.address[0], - port=self.address[1], + address=human.format_address(self.address), ) def __eq__(self, other): @@ -161,7 +160,6 @@ class ClientConnection(tcp.BaseHandler, stateobject.StateObject): class ServerConnection(tcp.TCPClient, stateobject.StateObject): - """ A server connection @@ -209,11 +207,10 @@ class ServerConnection(tcp.TCPClient, stateobject.StateObject): ) else: alpn = "" - return "".format( + return "".format( tls=tls, alpn=alpn, - host=self.address[0], - port=self.address[1], + address=human.format_address(self.address), ) def __eq__(self, other): diff --git a/mitmproxy/utils/human.py b/mitmproxy/utils/human.py index b21ac0b8..5c02b072 100644 --- a/mitmproxy/utils/human.py +++ b/mitmproxy/utils/human.py @@ -73,11 +73,13 @@ def format_timestamp_with_milli(s): return d.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3] -def format_address(address: tuple) -> str: +def format_address(address: typing.Optional[tuple]) -> str: """ This function accepts IPv4/IPv6 tuples and returns the formatted address string with port number """ + if address is None: + return "" try: host = ipaddress.ip_address(address[0]) if host.is_unspecified: diff --git a/test/mitmproxy/test_connections.py b/test/mitmproxy/test_connections.py index 00cdbc87..845a9043 100644 --- a/test/mitmproxy/test_connections.py +++ b/test/mitmproxy/test_connections.py @@ -38,6 +38,9 @@ class TestClientConnection: assert 'ALPN' not in repr(c) assert 'TLS' in repr(c) + c.address = None + assert repr(c) + def test_tls_established_property(self): c = tflow.tclient_conn() c.tls_established = True @@ -110,6 +113,9 @@ class TestServerConnection: c.tls_established = False assert 'TLS' not in repr(c) + c.address = None + assert repr(c) + def test_tls_established_property(self): c = tflow.tserver_conn() c.tls_established = True diff --git a/test/mitmproxy/utils/test_human.py b/test/mitmproxy/utils/test_human.py index 947cfa4a..faf35f72 100644 --- a/test/mitmproxy/utils/test_human.py +++ b/test/mitmproxy/utils/test_human.py @@ -56,3 +56,4 @@ def test_format_address(): assert human.format_address(("example.com", "54010")) == "example.com:54010" assert human.format_address(("::", "8080")) == "*:8080" assert human.format_address(("0.0.0.0", "8080")) == "*:8080" + assert human.format_address(None) == "" -- cgit v1.2.3 From f34932c1717eac9840811f617f6af097c556d2e2 Mon Sep 17 00:00:00 2001 From: Thomas Kriechbaumer Date: Sat, 24 Mar 2018 10:42:49 +0100 Subject: [requires.io] dependency update on master branch (#2992) --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 7d7b9f64..88d46ec5 100644 --- a/setup.py +++ b/setup.py @@ -65,7 +65,7 @@ setup( "brotlipy>=0.7.0,<0.8", "certifi>=2015.11.20.1", # no semver here - this should always be on the last release! "click>=6.2, <7", - "cryptography>=2.1.4,<2.2", + "cryptography>=2.1.4,<2.3", "h2>=3.0.1,<4", "hyperframe>=5.1.0,<6", "kaitaistruct>=0.7,<0.9", @@ -88,7 +88,7 @@ setup( 'dev': [ "flake8>=3.5, <3.6", "Flask>=0.10.1, <0.13", - "mypy>=0.570,<0.571", + "mypy>=0.580,<0.581", "pytest-cov>=2.5.1,<3", "pytest-faulthandler>=1.3.1,<2", "pytest-timeout>=1.2.1,<2", -- cgit v1.2.3 From eb297d82aafe3f3880e35676eba9361f4f459110 Mon Sep 17 00:00:00 2001 From: Thomas Kriechbaumer Date: Sat, 24 Mar 2018 11:19:03 +0100 Subject: fix Tornado 5.0 event loop https://github.com/tornadoweb/tornado/issues/2183#issuecomment-371001254 --- setup.py | 2 +- test/mitmproxy/addons/test_onboarding.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 88d46ec5..d973249f 100644 --- a/setup.py +++ b/setup.py @@ -77,7 +77,7 @@ setup( "pyperclip>=1.6.0, <1.7", "ruamel.yaml>=0.13.2, <0.16", "sortedcontainers>=1.5.4, <1.6", - "tornado>=4.3, <4.6", + "tornado>=4.3,<5.1", "urwid>=2.0.1,<2.1", "wsproto>=0.11.0,<0.12.0", ], diff --git a/test/mitmproxy/addons/test_onboarding.py b/test/mitmproxy/addons/test_onboarding.py index 810ddef1..0d99b1ff 100644 --- a/test/mitmproxy/addons/test_onboarding.py +++ b/test/mitmproxy/addons/test_onboarding.py @@ -4,6 +4,10 @@ from mitmproxy.addons import onboarding from mitmproxy.test import taddons from .. import tservers +import asyncio +import tornado.platform.asyncio +asyncio.set_event_loop_policy(tornado.platform.asyncio.AnyThreadEventLoopPolicy()) + class TestApp(tservers.HTTPProxyTest): def addons(self): -- cgit v1.2.3