httpie-cli/httpie/ssl.py

50 lines
1.4 KiB
Python
Raw Normal View History

2020-05-23 13:26:06 +02:00
import ssl
from requests.adapters import HTTPAdapter
# noinspection PyPackageRequirements
2020-05-23 15:01:33 +02:00
from urllib3.util.ssl_ import (
DEFAULT_CIPHERS, create_urllib3_context,
resolve_ssl_version,
)
2020-05-23 13:26:06 +02:00
DEFAULT_SSL_CIPHERS = DEFAULT_CIPHERS
SSL_VERSION_ARG_MAPPING = {
'ssl2.3': 'PROTOCOL_SSLv23',
'ssl3': 'PROTOCOL_SSLv3',
'tls1': 'PROTOCOL_TLSv1',
'tls1.1': 'PROTOCOL_TLSv1_1',
'tls1.2': 'PROTOCOL_TLSv1_2',
'tls1.3': 'PROTOCOL_TLSv1_3',
}
AVAILABLE_SSL_VERSION_ARG_MAPPING = {
arg: getattr(ssl, constant_name)
for arg, constant_name in SSL_VERSION_ARG_MAPPING.items()
if hasattr(ssl, constant_name)
}
class HTTPieHTTPSAdapter(HTTPAdapter):
2020-05-23 20:19:16 +02:00
def __init__(
self,
verify: bool,
ssl_version: str = None,
ciphers: str = None,
**kwargs
):
2020-05-23 15:01:33 +02:00
self._ssl_context = create_urllib3_context(
2020-05-23 13:26:06 +02:00
ciphers=ciphers,
2020-05-23 15:01:33 +02:00
ssl_version=resolve_ssl_version(ssl_version),
2020-05-23 20:19:16 +02:00
cert_reqs=ssl.CERT_REQUIRED if verify else ssl.CERT_NONE
2020-05-23 13:26:06 +02:00
)
2020-05-23 20:19:16 +02:00
2020-05-23 13:26:06 +02:00
super().__init__(**kwargs)
def init_poolmanager(self, *args, **kwargs):
kwargs['ssl_context'] = self._ssl_context
return super().init_poolmanager(*args, **kwargs)
def proxy_manager_for(self, *args, **kwargs):
kwargs['ssl_context'] = self._ssl_context
return super().proxy_manager_for(*args, **kwargs)