mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-05 10:45:51 +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 requests
|
||||
from requests.packages.urllib3.poolmanager import PoolManager
|
||||
|
||||
from .. import exceptions, log
|
||||
from .compat import iteritems, urlparse
|
||||
|
|
@ -178,8 +179,23 @@ def _password_from_keyring(username, resource):
|
|||
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,
|
||||
session=None, latin1_fallback=True):
|
||||
session=None, latin1_fallback=True, tls_fingerprint=None):
|
||||
'''
|
||||
Wrapper method for requests, to ease logging and mocking. Parameters should
|
||||
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:
|
||||
func = requests.request
|
||||
else:
|
||||
func = session.request
|
||||
session = requests.Session()
|
||||
|
||||
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(headers)
|
||||
|
|
|
|||
Loading…
Reference in a new issue