diff options
-rw-r--r-- | docs/install.rst | 88 | ||||
-rw-r--r-- | mitmproxy/__init__.py | 3 | ||||
-rw-r--r-- | mitmproxy/addons/view.py | 6 | ||||
-rw-r--r-- | mitmproxy/tools/console/flowlist.py | 6 | ||||
-rw-r--r-- | mitmproxy/tools/console/flowview.py | 21 | ||||
-rw-r--r-- | setup.py | 21 |
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]] @@ -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", ] } ) |