aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/version_check.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-02-18 13:03:40 +0100
committerMaximilian Hils <git@maximilianhils.com>2016-02-18 13:03:40 +0100
commitd33d3663ecb166461d9cb5a78a29b44ee7a8fbb7 (patch)
treefe8856f65d1dafa946150c5acbaf6e942ba3c026 /netlib/version_check.py
parent294774d6f0dee95b02a93307ec493b111b7f171e (diff)
downloadmitmproxy-d33d3663ecb166461d9cb5a78a29b44ee7a8fbb7.tar.gz
mitmproxy-d33d3663ecb166461d9cb5a78a29b44ee7a8fbb7.tar.bz2
mitmproxy-d33d3663ecb166461d9cb5a78a29b44ee7a8fbb7.zip
combine projects
Diffstat (limited to 'netlib/version_check.py')
-rw-r--r--netlib/version_check.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/netlib/version_check.py b/netlib/version_check.py
new file mode 100644
index 00000000..9cf27eea
--- /dev/null
+++ b/netlib/version_check.py
@@ -0,0 +1,60 @@
+"""
+Having installed a wrong version of pyOpenSSL or netlib is unfortunately a
+very common source of error. Check before every start that both versions
+are somewhat okay.
+"""
+from __future__ import division, absolute_import, print_function
+import sys
+import inspect
+import os.path
+import six
+
+import OpenSSL
+from . import version
+
+PYOPENSSL_MIN_VERSION = (0, 15)
+
+
+def check_mitmproxy_version(mitmproxy_version, fp=sys.stderr):
+ # We don't introduce backward-incompatible changes in patch versions. Only
+ # consider major and minor version.
+ if version.IVERSION[:2] != mitmproxy_version[:2]:
+ print(
+ u"You are using mitmproxy %s with netlib %s. "
+ u"Most likely, that won't work - please upgrade!" % (
+ mitmproxy_version, version.VERSION
+ ),
+ file=fp
+ )
+ sys.exit(1)
+
+
+def check_pyopenssl_version(min_version=PYOPENSSL_MIN_VERSION, fp=sys.stderr):
+ min_version_str = u".".join(six.text_type(x) for x in min_version)
+ try:
+ v = tuple(int(x) for x in OpenSSL.__version__.split(".")[:2])
+ except ValueError:
+ print(
+ u"Cannot parse pyOpenSSL version: {}"
+ u"mitmproxy requires pyOpenSSL {} or greater.".format(
+ OpenSSL.__version__, min_version_str
+ ),
+ file=fp
+ )
+ return
+ if v < min_version:
+ print(
+ u"You are using an outdated version of pyOpenSSL: "
+ u"mitmproxy requires pyOpenSSL {} or greater.".format(min_version_str),
+ file=fp
+ )
+ # Some users apparently have multiple versions of pyOpenSSL installed.
+ # Report which one we got.
+ pyopenssl_path = os.path.dirname(inspect.getfile(OpenSSL))
+ print(
+ u"Your pyOpenSSL {} installation is located at {}".format(
+ OpenSSL.__version__, pyopenssl_path
+ ),
+ file=fp
+ )
+ sys.exit(1)