aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/install.rst88
-rw-r--r--mitmproxy/__init__.py3
-rw-r--r--mitmproxy/addons/view.py6
-rw-r--r--mitmproxy/tools/console/flowlist.py6
-rw-r--r--mitmproxy/tools/console/flowview.py21
-rw-r--r--setup.py21
6 files changed, 74 insertions, 71 deletions
diff --git a/docs/install.rst b/docs/install.rst
index 5c823ef4..1fe09aca 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -9,25 +9,19 @@ Installation On Ubuntu
----------------------
Ubuntu comes with Python but we need to install pip, python-dev and several libraries.
-This was tested on a fully patched installation of Ubuntu 14.04.
+This was tested on a fully patched installation of Ubuntu 16.04.
.. code:: bash
- sudo apt-get install python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev zlib1g-dev g++
- sudo pip install mitmproxy # or pip install --user mitmproxy
+ sudo apt-get install python3-pip python3-dev libffi-dev libssl-dev libtiff5-dev libjpeg8-dev zlib1g-dev libwebp-dev
+ sudo pip3 install mitmproxy # or pip install --user mitmproxy
-Once installation is complete you can run :ref:`mitmproxy` or :ref:`mitmdump` from a terminal.
-
-On **Ubuntu 12.04** (and other systems with an outdated version of pip),
-you may need to update pip using ``pip install -U pip`` before installing mitmproxy.
+On older Ubuntu versions, e.g., **12.04** and **14.04**, you may need to install a newer version of Python.
+mitmproxy requires Python 3.5 or higher. Please take a look at pyenv_.
+Make sure to have an up-to-date version of pip by running ``pip3 install -U pip``.
-Installation From Source (Ubuntu)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Once installation is complete you can run :ref:`mitmproxy` or :ref:`mitmdump` from a terminal.
-If you would like to install mitmproxy directly from the master branch on GitHub or would like to
-get set up to contribute to the project, install the dependencies as you would for a regular
-mitmproxy installation (see :ref:`install-ubuntu`).
-Then see the Hacking_ section of the README on GitHub.
.. _install-fedora:
@@ -35,16 +29,19 @@ Installation On Fedora
----------------------
Fedora comes with Python but we need to install pip, python-dev and several libraries.
-This was tested on a fully patched installation of Fedora 23.
+This was tested on a fully patched installation of Fedora 24.
.. code:: bash
- sudo dnf install -y python-pip python-devel libffi-devel openssl-devel libxml2-devel libxslt-devel libpng-devel libjpeg-devel
- sudo pip install mitmproxy # or pip install --user mitmproxy
+ sudo dnf install make gcc redhat-rpm-config python3-pip python3-devel libffi-devel openssl-devel libtiff-devel libjpeg-devel zlib-devel libwebp-devel openjpeg2-devel
+ sudo pip3 install mitmproxy # or pip install --user mitmproxy
+
+Make sure to have an up-to-date version of pip by running ``pip3 install -U pip``.
Once installation is complete you can run :ref:`mitmproxy` or :ref:`mitmdump` from a terminal.
+
.. _install-arch:
Installation On Arch Linux
@@ -54,42 +51,26 @@ mitmproxy has been added into the [community] repository. Use pacman to install
>>> sudo pacman -S mitmproxy
+Once installation is complete you can run :ref:`mitmproxy` or :ref:`mitmdump` from a terminal.
-Installation On Mac OS X
-------------------------
+.. _install-macos:
-The easiest way to get up and running on OSX is to download the pre-built binary packages from
-`mitmproxy.org`_.
+Installation On macOS
+------------------------
-There are a few bits of customization you might want to do to make mitmproxy comfortable to use on
-OSX. The default color scheme is optimized for a dark background terminal, but you can select a
-palette for a light terminal background with the ``--palette`` option.
-You can use the OSX **open** program to create a simple and effective ``~/.mailcap`` file to view
-request and response bodies:
+You can use Homebrew to install everything:
+.. code:: bash
-.. code-block:: none
+ brew install mitmproxy
- application/*; /usr/bin/open -Wn %s
- audio/*; /usr/bin/open -Wn %s
- image/*; /usr/bin/open -Wn %s
- video/*; /usr/bin/open -Wn %s
+Or you can download the pre-built binary packages from `mitmproxy.org`_.
Once installation is complete you can run :ref:`mitmproxy` or :ref:`mitmdump` from a terminal.
-Installation From Source (Mac OS X)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-If you would like to install mitmproxy directly from the master branch on GitHub or would like to
-get set up to contribute to the project, there are a few OS X specific things to keep in mind.
-
-- Make sure that XCode is installed from the App Store, and that the command-line tools have been
- downloaded (XCode/Preferences/Downloads).
-- If you're running a Python interpreter installed with homebrew (or similar), you may have to
- install some dependencies by hand.
-
-Then see the Hacking_ section of the README on GitHub.
+.. _install-windows:
Installation On Windows
-----------------------
@@ -105,28 +86,39 @@ First, install the latest version of Python 3.5 from the `Python website`_.
If you already have an older version of Python 3.5 installed, make sure to install pip_
(pip is included in Python by default). If pip aborts with an error, make sure you are using the current version of pip.
->>> python -m pip install --upgrade pip
+.. code:: powershell
+
+ python -m pip install --upgrade pip
Next, add Python and the Python Scripts directory to your **PATH** variable.
You can do this easily by running the following in powershell:
->>> [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27;C:\Python27\Scripts", "User")
+.. code:: powershell
+
+ [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27;C:\Python27\Scripts", "User")
Now, you can install mitmproxy by running
->>> pip install mitmproxy
+.. code:: powershell
+
+ pip install mitmproxy
Once the installation is complete, you can run :ref:`mitmdump` from a command prompt.
-Installation From Source (Windows)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. _install-source:
+
+Installation From Source
+------------------------
If you would like to install mitmproxy directly from the master branch on GitHub or would like to
-get set up to contribute to the project, install Python as outlined above, then see the
-Hacking_ section of the README on GitHub.
+get set up to contribute to the project, install the dependencies as you would for a regular
+mitmproxy installation. Then see the Hacking_ section of the README on GitHub.
+You can check your system information by running: ``mitmproxy --sysinfo``
.. _Hacking: https://github.com/mitmproxy/mitmproxy/blob/master/README.rst#hacking
.. _mitmproxy.org: https://mitmproxy.org/
.. _`Python website`: https://www.python.org/downloads/windows/
.. _pip: https://pip.pypa.io/en/latest/installing.html
+.. _pyenv: https://github.com/yyuu/pyenv
diff --git a/mitmproxy/__init__.py b/mitmproxy/__init__.py
index e69de29b..9697de87 100644
--- a/mitmproxy/__init__.py
+++ b/mitmproxy/__init__.py
@@ -0,0 +1,3 @@
+# https://github.com/mitmproxy/mitmproxy/issues/1809
+# import script here so that pyinstaller registers it.
+from . import script # noqa
diff --git a/mitmproxy/addons/view.py b/mitmproxy/addons/view.py
index b8b6093f..dd5b745d 100644
--- a/mitmproxy/addons/view.py
+++ b/mitmproxy/addons/view.py
@@ -145,9 +145,9 @@ class View(collections.Sequence):
def inbounds(self, index: int) -> bool:
"""
- Is this index >= 0 and < len(self)
+ Is this 0 <= index < len(self)
"""
- return index >= 0 and index < len(self)
+ return 0 <= index < len(self)
def _rev(self, idx: int) -> int:
"""
@@ -359,7 +359,7 @@ class Focus:
return self.view.index(self.flow)
@index.setter
- def index(self, idx) -> typing.Optional[int]:
+ def index(self, idx):
if idx < 0 or idx > len(self.view) - 1:
raise ValueError("Index out of view bounds")
self.flow = self.view[idx]
diff --git a/mitmproxy/tools/console/flowlist.py b/mitmproxy/tools/console/flowlist.py
index d7c312e5..fee215c6 100644
--- a/mitmproxy/tools/console/flowlist.py
+++ b/mitmproxy/tools/console/flowlist.py
@@ -355,9 +355,11 @@ class FlowListBox(urwid.ListBox):
elif key == "e":
self.master.toggle_eventlog()
elif key == "g":
- self.master.view.focus.index = 0
+ if len(self.master.view):
+ self.master.view.focus.index = 0
elif key == "G":
- self.master.view.focus.index = len(self.master.view) - 1
+ if len(self.master.view):
+ self.master.view.focus.index = len(self.master.view) - 1
elif key == "f":
signals.status_prompt.send(
prompt = "Filter View",
diff --git a/mitmproxy/tools/console/flowview.py b/mitmproxy/tools/console/flowview.py
index ecb070d8..efeab647 100644
--- a/mitmproxy/tools/console/flowview.py
+++ b/mitmproxy/tools/console/flowview.py
@@ -1,23 +1,23 @@
import math
import os
import sys
+from functools import lru_cache
+from typing import Optional, Union # noqa
import urwid
-from mitmproxy import exceptions
-from typing import Optional, Union # noqa
from mitmproxy import contentviews
+from mitmproxy import exceptions
+from mitmproxy import export
from mitmproxy import http
+from mitmproxy.net.http import Headers
+from mitmproxy.net.http import status_codes
from mitmproxy.tools.console import common
from mitmproxy.tools.console import flowdetailview
from mitmproxy.tools.console import grideditor
from mitmproxy.tools.console import searchable
from mitmproxy.tools.console import signals
from mitmproxy.tools.console import tabs
-from mitmproxy import export
-from mitmproxy.net.http import Headers
-from mitmproxy.net.http import status_codes
-from functools import lru_cache
class SearchError(Exception):
@@ -483,9 +483,12 @@ class FlowView(tabs.Tabs):
return self._view_nextprev_flow(self.view.index(flow) - 1, flow)
def change_this_display_mode(self, t):
- name = contentviews.get_by_shortcut(t).name
- self.view.settings[self.flow][(self.tab_offset, "prettyview")] = name
- signals.flow_change.send(self, flow = self.flow)
+ view = contentviews.get_by_shortcut(t)
+ if view:
+ self.view.settings[self.flow][(self.tab_offset, "prettyview")] = view.name
+ else:
+ self.view.settings[self.flow][(self.tab_offset, "prettyview")] = None
+ signals.flow_change.send(self, flow=self.flow)
def keypress(self, size, key):
conn = None # type: Optional[Union[http.HTTPRequest, http.HTTPResponse]]
diff --git a/setup.py b/setup.py
index 476d5559..2c013f0c 100644
--- a/setup.py
+++ b/setup.py
@@ -1,8 +1,8 @@
-from setuptools import setup, find_packages
-from codecs import open
import os
+import runpy
+from codecs import open
-from mitmproxy import version
+from setuptools import setup, find_packages
# Based on https://github.com/pypa/sampleproject/blob/master/setup.py
# and https://python-packaging-user-guide.readthedocs.org/
@@ -12,9 +12,11 @@ here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.rst'), encoding='utf-8') as f:
long_description = f.read()
+VERSION = runpy.run_path(os.path.join(here, "mitmproxy", "version.py"))["VERSION"]
+
setup(
name="mitmproxy",
- version=version.VERSION,
+ version=VERSION,
description="An interactive, SSL-capable, man-in-the-middle HTTP proxy for penetration testers and software developers.",
long_description=long_description,
url="http://mitmproxy.org",
@@ -59,7 +61,7 @@ setup(
# It is not considered best practice to use install_requires to pin dependencies to specific versions.
install_requires=[
"blinker>=1.4, <1.5",
- "click>=6.2, <7.0",
+ "click>=6.2, <7",
"certifi>=2015.11.20.1", # no semver here - this should always be on the last release!
"construct>=2.8, <2.9",
"cryptography>=1.3, <1.7",
@@ -93,8 +95,8 @@ setup(
':sys_platform != "win32"': [
],
'dev': [
- "flake8>=2.6.2, <3.3",
- "mypy-lang>=0.4.5, <0.5",
+ "flake8>=3.2.1, <3.3",
+ "mypy-lang>=0.4.6, <0.5",
"rstcheck>=2.2, <3.0",
"tox>=2.3, <3",
"mock>=2.0, <2.1",
@@ -103,9 +105,10 @@ setup(
"pytest-timeout>=1.0.0, <2",
"pytest-xdist>=1.14, <2",
"pytest-faulthandler>=1.3.0, <2",
- "sphinx>=1.3.5, <1.5",
+ "sphinx>=1.3.5, <1.6",
"sphinx-autobuild>=0.5.2, <0.7",
"sphinxcontrib-documentedlist>=0.4.0, <0.5",
+ "docutils==0.12", # temporary pin, https://github.com/chintal/sphinxcontrib-documentedlist/pull/3
"sphinx_rtd_theme>=0.1.9, <0.2",
],
'contentviews': [
@@ -115,7 +118,7 @@ setup(
],
'examples': [
"beautifulsoup4>=4.4.1, <4.6",
- "pytz>=2015.07.0, <=2016.7",
+ "pytz>=2015.07.0, <=2016.10",
]
}
)