1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-08 16:53:23 +00:00

Filter Sensitive Data From Requests

Add the ability to filter out sensitive data, using one of three
methods: from headers, from a query string, and by using a custom
callback to modify the request.

Closes #67
This commit is contained in:
Kevin McCarthy
2014-04-22 21:35:16 -10:00
parent f317800cb7
commit e6fdc735e4
6 changed files with 234 additions and 16 deletions

40
vcr/filters.py Normal file
View File

@@ -0,0 +1,40 @@
from six.moves.urllib.parse import urlparse, parse_qsl, urlunparse, urlencode
import copy
def _remove_headers(request, headers_to_remove):
out = []
for k, v in request.headers:
if k.lower() not in [h.lower() for h in headers_to_remove]:
out.append((k, v))
request.headers = frozenset(out)
return request
def _remove_query_parameters(request, query_parameters_to_remove):
if not hasattr(request, 'path' or not query_parameters_to_remote):
return request
url = urlparse(request.url)
q = parse_qsl(url.query)
q = [(k, v) for k, v in q if k not in query_parameters_to_remove]
if q:
request.path = url.path + '?' + urlencode(q)
else:
request.path = url.path
return request
def filter_request(
request,
filter_headers,
filter_query_parameters,
before_record
):
request = copy.copy(request) # don't mutate request object
if hasattr(request, 'headers') and filter_headers:
request = _remove_headers(request, filter_headers)
if filter_query_parameters:
request = _remove_query_parameters(request, filter_query_parameters)
if before_record:
request = before_record(request)
return request