You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
import ssl
|
|
import sys
|
|
import typing
|
|
|
|
# Hold on to the original class so we can create it consistently
|
|
# even if we inject our own SSLContext into the ssl module.
|
|
_original_SSLContext = ssl.SSLContext
|
|
_original_super_SSLContext = super(_original_SSLContext, _original_SSLContext)
|
|
|
|
# CPython is known to be good, but non-CPython implementations
|
|
# may implement SSLContext differently so to be safe we don't
|
|
# subclass the SSLContext.
|
|
|
|
# This is returned by truststore.SSLContext.__class__()
|
|
_truststore_SSLContext_dunder_class: typing.Optional[type]
|
|
|
|
# This value is the superclass of truststore.SSLContext.
|
|
_truststore_SSLContext_super_class: type
|
|
|
|
if sys.implementation.name == "cpython":
|
|
_truststore_SSLContext_super_class = _original_SSLContext
|
|
_truststore_SSLContext_dunder_class = None
|
|
else:
|
|
_truststore_SSLContext_super_class = object
|
|
_truststore_SSLContext_dunder_class = _original_SSLContext
|
|
|
|
|
|
def _set_ssl_context_verify_mode(
|
|
ssl_context: ssl.SSLContext, verify_mode: ssl.VerifyMode
|
|
) -> None:
|
|
_original_super_SSLContext.verify_mode.__set__(ssl_context, verify_mode) # type: ignore[attr-defined]
|