mirror of https://github.com/jumpserver/jumpserver
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
# coding: utf-8
|
|
#
|
|
|
|
import warnings
|
|
import contextlib
|
|
import requests
|
|
|
|
from django.conf import settings
|
|
from urllib3.exceptions import InsecureRequestWarning
|
|
|
|
from .utils import get_logger
|
|
|
|
__all__ = ['ssl_verification']
|
|
|
|
old_merge_environment_settings = requests.Session.merge_environment_settings
|
|
|
|
|
|
logger = get_logger(__file__)
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def no_ssl_verification():
|
|
"""
|
|
https://stackoverflow.com/questions/15445981/
|
|
how-do-i-disable-the-security-certificate-check-in-python-requests
|
|
"""
|
|
opened_adapters = set()
|
|
|
|
def merge_environment_settings(self, url, proxies, stream, verify, cert):
|
|
# Verification happens only once per connection so we need to close
|
|
# all the opened adapters once we're done. Otherwise, the effects of
|
|
# verify=False persist beyond the end of this context manager.
|
|
opened_adapters.add(self.get_adapter(url))
|
|
_settings = old_merge_environment_settings(
|
|
self, url, proxies, stream, verify, cert
|
|
)
|
|
_settings['verify'] = False
|
|
return _settings
|
|
|
|
requests.Session.merge_environment_settings = merge_environment_settings
|
|
try:
|
|
with warnings.catch_warnings():
|
|
warnings.simplefilter('ignore', InsecureRequestWarning)
|
|
yield
|
|
finally:
|
|
requests.Session.merge_environment_settings = old_merge_environment_settings
|
|
for adapter in opened_adapters:
|
|
try:
|
|
adapter.close()
|
|
except:
|
|
pass
|
|
|
|
|
|
def ssl_verification(func):
|
|
def wrapper(*args, **kwargs):
|
|
if not settings.AUTH_OPENID_IGNORE_SSL_VERIFICATION:
|
|
return func(*args, **kwargs)
|
|
with no_ssl_verification():
|
|
return func(*args, **kwargs)
|
|
return wrapper
|