14
14
15
15
import decorator
16
16
import urllib3
17
+ from urllib3 .connection import match_hostname as urllib3_match_hostname
17
18
from urllib3 .util .ssl_ import ssl_wrap_socket as urllib3_ssl_wrap_socket
18
19
from urllib3 .util .ssl_ import wrap_socket as urllib3_wrap_socket
19
20
20
21
from .compat import basestring , byte_type , decode_from_bytes , encode_to_bytes , text_type
21
- from .utils import SSL_PROTOCOL , MocketSocketCore , hexdump , hexload , wrap_ssl_socket
22
+ from .utils import SSL_PROTOCOL , MocketSocketCore , hexdump , hexload
22
23
23
24
xxh32 = None
24
25
try :
49
50
true_inet_pton = socket .inet_pton
50
51
true_urllib3_wrap_socket = urllib3_wrap_socket
51
52
true_urllib3_ssl_wrap_socket = urllib3_ssl_wrap_socket
53
+ true_urllib3_match_hostname = urllib3_match_hostname
52
54
53
55
54
56
class SuperFakeSSLContext (object ):
55
- """ For Python 3.6 """
57
+ """For Python 3.6"""
56
58
57
59
class FakeSetter (int ):
58
60
def __set__ (self , * args ):
59
61
pass
60
62
61
63
options = FakeSetter ()
62
- verify_mode = FakeSetter (ssl .CERT_OPTIONAL )
64
+ verify_mode = FakeSetter (ssl .CERT_NONE )
63
65
64
66
65
67
class FakeSSLContext (SuperFakeSSLContext ):
66
68
sock = None
67
69
post_handshake_auth = None
70
+ _check_hostname = False
71
+
72
+ @property
73
+ def check_hostname (self ):
74
+ return self ._check_hostname
75
+
76
+ @check_hostname .setter
77
+ def check_hostname (self , * args ):
78
+ self ._check_hostname = False
68
79
69
80
def __init__ (self , sock = None , server_hostname = None , _context = None , * args , ** kwargs ):
70
81
if isinstance (sock , MocketSocket ):
@@ -141,16 +152,6 @@ def __init__(
141
152
self ._truesocket_recording_dir = None
142
153
self .kwargs = kwargs
143
154
144
- sock = kwargs .get ("sock" )
145
- if sock is not None :
146
- self .__dict__ = dict (sock .__dict__ )
147
-
148
- self .true_socket = wrap_ssl_socket (
149
- true_ssl_socket ,
150
- self .true_socket ,
151
- true_ssl_context (protocol = SSL_PROTOCOL ),
152
- )
153
-
154
155
def __unicode__ (self ): # pragma: no cover
155
156
return str (self )
156
157
@@ -323,16 +324,10 @@ def true_sendall(self, data, *args, **kwargs):
323
324
host = true_gethostbyname (host )
324
325
325
326
if isinstance (self .true_socket , true_socket ) and self ._secure_socket :
326
- try :
327
- self = MocketSocket (sock = self )
328
- except TypeError :
329
- ssl_context = self .kwargs .get ("ssl_context" )
330
- server_hostname = self .kwargs .get ("server_hostname" )
331
- self .true_socket = true_ssl_context .wrap_socket (
332
- self = ssl_context ,
333
- sock = self .true_socket ,
334
- server_hostname = server_hostname ,
335
- )
327
+ self .true_socket = true_urllib3_ssl_wrap_socket (
328
+ self .true_socket ,
329
+ ** self .kwargs ,
330
+ )
336
331
337
332
try :
338
333
self .true_socket .connect ((host , port ))
@@ -388,7 +383,7 @@ def close(self):
388
383
self ._fd = None
389
384
390
385
def __getattr__ (self , name ):
391
- """ Do nothing catchall function, for methods like close() and shutdown() """
386
+ """Do nothing catchall function, for methods like close() and shutdown()"""
392
387
393
388
def do_nothing (* args , ** kwargs ):
394
389
pass
@@ -479,6 +474,9 @@ def enable(namespace=None, truesocket_recording_dir=None):
479
474
urllib3 .connection .ssl_wrap_socket = urllib3 .connection .__dict__ [
480
475
"ssl_wrap_socket"
481
476
] = FakeSSLContext .wrap_socket
477
+ urllib3 .connection .match_hostname = urllib3 .connection .__dict__ [
478
+ "match_hostname"
479
+ ] = lambda cert , hostname : None
482
480
if pyopenssl_override : # pragma: no cover
483
481
# Take out the pyopenssl version - use the default implementation
484
482
extract_from_urllib3 ()
@@ -506,6 +504,9 @@ def disable():
506
504
urllib3 .connection .ssl_wrap_socket = urllib3 .connection .__dict__ [
507
505
"ssl_wrap_socket"
508
506
] = true_urllib3_ssl_wrap_socket
507
+ urllib3 .connection .match_hostname = urllib3 .connection .__dict__ [
508
+ "match_hostname"
509
+ ] = true_urllib3_match_hostname
509
510
Mocket .reset ()
510
511
if pyopenssl_override : # pragma: no cover
511
512
# Put the pyopenssl version back in place
@@ -521,7 +522,7 @@ def get_truesocket_recording_dir(cls):
521
522
522
523
@classmethod
523
524
def assert_fail_if_entries_not_served (cls ):
524
- """ Mocket checks that all entries have been served at least once. """
525
+ """Mocket checks that all entries have been served at least once."""
525
526
assert all (
526
527
entry ._served for entry in itertools .chain (* cls ._entries .values ())
527
528
), "Some Mocket entries have not been served"
0 commit comments