mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-27 14:57:41 +00:00
add a tls_prefix parameter to utils.request
This assumes that a backend only ever connects to a single domain, because we set the fingerprint on the whole session
This commit is contained in:
parent
d5e8be4979
commit
56d566e55a
1 changed files with 27 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ import os
|
||||||
import click
|
import click
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
from requests.packages.urllib3.poolmanager import PoolManager
|
||||||
|
|
||||||
from .. import exceptions, log
|
from .. import exceptions, log
|
||||||
from .compat import iteritems, urlparse
|
from .compat import iteritems, urlparse
|
||||||
|
|
@ -178,8 +179,23 @@ def _password_from_keyring(username, resource):
|
||||||
key = new_key
|
key = new_key
|
||||||
|
|
||||||
|
|
||||||
|
class _FingerprintAdapter(requests.adapters.HTTPAdapter):
|
||||||
|
def __init__(self, fingerprint=None, **kwargs):
|
||||||
|
self.fingerprint = str(fingerprint)
|
||||||
|
super(_FingerprintAdapter, self).__init__(**kwargs)
|
||||||
|
|
||||||
|
def send(self, *args, **kwargs):
|
||||||
|
return super(_FingerprintAdapter, self).send(*args, **kwargs)
|
||||||
|
|
||||||
|
def init_poolmanager(self, connections, maxsize, block=False):
|
||||||
|
self.poolmanager = PoolManager(num_pools=connections,
|
||||||
|
maxsize=maxsize,
|
||||||
|
block=block,
|
||||||
|
assert_fingerprint=self.fingerprint)
|
||||||
|
|
||||||
|
|
||||||
def request(method, url, data=None, headers=None, auth=None, verify=None,
|
def request(method, url, data=None, headers=None, auth=None, verify=None,
|
||||||
session=None, latin1_fallback=True):
|
session=None, latin1_fallback=True, tls_fingerprint=None):
|
||||||
'''
|
'''
|
||||||
Wrapper method for requests, to ease logging and mocking. Parameters should
|
Wrapper method for requests, to ease logging and mocking. Parameters should
|
||||||
be the same as for ``requests.request``, except:
|
be the same as for ``requests.request``, except:
|
||||||
|
|
@ -194,9 +210,16 @@ def request(method, url, data=None, headers=None, auth=None, verify=None,
|
||||||
'''
|
'''
|
||||||
|
|
||||||
if session is None:
|
if session is None:
|
||||||
func = requests.request
|
session = requests.Session()
|
||||||
else:
|
|
||||||
func = session.request
|
if tls_fingerprint is not None:
|
||||||
|
https_prefix = 'https://'
|
||||||
|
|
||||||
|
if not isinstance(session.adapters[https_prefix], _FingerprintAdapter):
|
||||||
|
fingerprint_adapter = _FingerprintAdapter(tls_fingerprint)
|
||||||
|
session.mount(https_prefix, fingerprint_adapter)
|
||||||
|
|
||||||
|
func = session.request
|
||||||
|
|
||||||
logger.debug(u'{} {}'.format(method, url))
|
logger.debug(u'{} {}'.format(method, url))
|
||||||
logger.debug(headers)
|
logger.debug(headers)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue