Example #1
0
def sanitize_tokens(interaction, current_cassette):
    if interaction.data['response']['status']['code'] != 200:
        return

    try:
        response_body = interaction.data['response']['body']['string']
        json_body = json.loads(response_body)
    except KeyError:
        print("""Response does not contain a string body!
        Interaction:
        {}""".format(interaction.data))
        return

    try:
        access_token = json_body['access_token']
        current_cassette.placeholders.append(
            cassette.Placeholder(placeholder=placeholder_access_token,
                                 replace=access_token))
    except KeyError:
        pass

    try:
        refresh_token = json_body['refresh_token']

        current_cassette.placeholders.append(
            cassette.Placeholder(placeholder=placeholder_refresh_token,
                                 replace=refresh_token))

    except KeyError:
        pass
Example #2
0
def test_cassette_initialization():
    serializers.serializer_registry['test'] = Serializer()
    cassette.Cassette.default_cassette_options['placeholders'] = []

    with recorder.Betamax.configure() as config:
        config.define_cassette_placeholder('<TO-OVERRIDE>', 'default')
        config.define_cassette_placeholder('<KEEP-DEFAULT>', 'config')
        placeholders = [{
            'placeholder': '<TO-OVERRIDE>',
            'replace': 'override',
        }, {
            'placeholder': '<ONLY-OVERRIDE>',
            'replace': 'cassette',
        }]
        instance = cassette.Cassette('test_cassette',
                                     'test',
                                     placeholders=placeholders)

        expected = [
            cassette.Placeholder('<TO-OVERRIDE>', 'override'),
            cassette.Placeholder('<KEEP-DEFAULT>', 'config'),
            cassette.Placeholder('<ONLY-OVERRIDE>', 'cassette'),
        ]
        assert instance.placeholders == expected

    cassette.Cassette.default_cassette_options['placeholders'] = []
Example #3
0
def sanitize_token(interaction, current_cassette):
    headers = interaction.data['request']['headers']
    token = headers.get("Authorization")
    if token is None:
        return

    current_cassette.placeholders.append(
        cassette.Placeholder(placeholder=TOKEN_PLACEHOLDER, replace=token[0]))

    current_cassette.placeholders.append(
        cassette.Placeholder(placeholder=USER_PLACEHOLDER, replace=USER))
Example #4
0
def sanitizeToken(interaction: Dict, current_cassette: cassette) -> None:
    headers = interaction.data['request']['headers']
    token = headers.get('Authorization')[0]
    if token is None:
        return
    current_cassette.placeholders.append(
        cassette.Placeholder(placeholder='<AUTH_TOKEN>', replace=token))
Example #5
0
def betamax_sanitizer(interaction, current_cassette):
    """betamax data sanitizer for dynamic data"""
    headers = interaction.data['response']['headers']
    for h in headers.get('Set-Cookie', []):
        if 'BIGip' in h:
            current_cassette.placeholders.append(
                cassette.Placeholder(placeholder='<BIG-IP-COOKIE>', replace=h))
Example #6
0
def sanitize_token(interaction, current_cassette):
    req_headers = interaction.data["request"]["headers"]
    token = req_headers["Authorization"]

    current_cassette.placeholders.append(
        cassette.Placeholder(placeholder="<AUTH_TOKEN>", replace=token[0]))

    resp_body = interaction.data["response"]["body"]["string"]
    try:
        access_token = json.loads(resp_body)["access_token"]

        # Create different placeholders ACCESS_TOKEN_1, ACCESS_TOKEN_2, and so on,
        # so we can check when the storage service has sent different tokens.
        placeholder = "<ACCESS_TOKEN_%d>" % len(current_cassette.placeholders)

        current_cassette.placeholders.append(
            cassette.Placeholder(placeholder=placeholder,
                                 replace=access_token))
    except KeyError:
        pass
Example #7
0
 def _sanitize_token(interaction: Dict,
                     current_cassette: cassette) -> None:
     if interaction.data['response']['status']['code'] != 200:
         return
     headers = interaction.data['request']['headers']
     to_obscure = headers.get(target_field)[0]
     if to_obscure is None:
         return
     current_cassette.placeholders.append(
         cassette.Placeholder(placeholder='<OBSCURED>',
                              replace=to_obscure))
Example #8
0
 def app_installation_login(self):
     """Login as the specific installation of a GitHub App."""
     if (self.current_cassette.is_recording() and self.private_key_bytes
             and self.app_id and self.app_installation_id):
         self.gh.login_as_app_installation(
             self.private_key_bytes,
             app_id=self.app_id,
             installation_id=self.app_installation_id,
         )
         token = self.gh.session.auth.token
     else:
         token = "v1.{}".format("x" * 10)
         now = datetime.datetime.now(tz=dateutil.tz.UTC)
         expires_at_dt = now + datetime.timedelta(seconds=60 * 60)
         expires_at = expires_at_dt.isoformat()
         self.gh.session.app_installation_token_auth({
             "token":
             token,
             "expires_at":
             expires_at
         })
     self.current_cassette.placeholders.append(
         cassette.Placeholder("<INSTALLATION_TOKEN>", token))