summaryrefslogtreecommitdiffstats
path: root/third_party/python/idna-ssl/idna_ssl.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/idna-ssl/idna_ssl.py')
-rw-r--r--third_party/python/idna-ssl/idna_ssl.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/third_party/python/idna-ssl/idna_ssl.py b/third_party/python/idna-ssl/idna_ssl.py
new file mode 100644
index 0000000000..59db9bd469
--- /dev/null
+++ b/third_party/python/idna-ssl/idna_ssl.py
@@ -0,0 +1,40 @@
+import ssl
+import sys
+
+import idna
+
+__version__ = '1.1.0'
+
+real_match_hostname = ssl.match_hostname
+
+PY_370 = sys.version_info >= (3, 7, 0)
+
+
+def patched_match_hostname(cert, hostname):
+ try:
+ hostname = idna.encode(hostname, uts46=True).decode('ascii')
+ except UnicodeError:
+ hostname = hostname.encode('idna').decode('ascii')
+
+ return real_match_hostname(cert, hostname)
+
+
+def patch_match_hostname():
+ if PY_370:
+ return
+
+ if hasattr(ssl.match_hostname, 'patched'):
+ return
+
+ ssl.match_hostname = patched_match_hostname
+ ssl.match_hostname.patched = True
+
+
+def reset_match_hostname():
+ if PY_370:
+ return
+
+ if not hasattr(ssl.match_hostname, 'patched'):
+ return
+
+ ssl.match_hostname = real_match_hostname