mirror of
https://github.com/pyro2927/SouthwestCheckin.git
synced 2025-12-06 01:13:19 +00:00
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
from vcr import VCR
|
|
import json
|
|
import os
|
|
|
|
# remove sensitive values from JSON response
|
|
bad_fields = [
|
|
'checkInSessionToken',
|
|
'first-name',
|
|
'firstName',
|
|
'last-name',
|
|
'lastName',
|
|
'name',
|
|
'passengerInfo',
|
|
'passengers',
|
|
'recordLocator'
|
|
]
|
|
|
|
|
|
def redact(obj):
|
|
if isinstance(obj, str):
|
|
return
|
|
for k, v in list(obj.items()):
|
|
if k in bad_fields:
|
|
obj[k] = '[REDACTED]'
|
|
elif isinstance(v, list) and not isinstance(v, str):
|
|
for o in v:
|
|
redact(o)
|
|
elif isinstance(v, dict):
|
|
redact(v)
|
|
|
|
|
|
def filter_payload(response):
|
|
s = response['body']['string']
|
|
if len(s) == 0:
|
|
return response
|
|
string_body = s.decode('utf8')
|
|
body = json.loads(string_body)
|
|
redact(body)
|
|
response['body']['string'] = json.dumps(body).encode()
|
|
return response
|
|
|
|
|
|
def custom_vcr():
|
|
dirname = os.path.dirname(__file__)
|
|
return VCR(
|
|
decode_compressed_response=True,
|
|
cassette_library_dir=os.path.join(dirname, 'fixtures/cassettes'),
|
|
path_transformer=VCR.ensure_suffix('.yml'),
|
|
filter_query_parameters=bad_fields,
|
|
before_record_response=filter_payload,
|
|
filter_post_data_parameters=bad_fields
|
|
)
|