Esempio n. 1
0
 def test_not_ajax_request(self):
     req = RequestFactory().get('/', {'source': 'malibu'})
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 400)
     assert 'cache-control' not in resp
     data = json.loads(resp.content)
     self.assertEqual(data['error'], 'Resource only available via XHR')
Esempio n. 2
0
 def test_campaign_data_too_long(self):
     """If the code is too long then the utm_campaign value should be truncated"""
     params = {
         'utm_source': 'brandt',
         'utm_medium': 'aether',
         'utm_content': 'A144_A000_0000000',
         'utm_campaign': 'The%7cDude%7cabides%7cI%7cdont%7cknow%7cabout%7cyou%7c'
                         'but%7cI%7ctake%7ccomfort%7cin%7cthat' * 2,
     }
     final_params = {
         'source': 'brandt',
         'medium': 'aether',
         'campaign': 'The|Dude|abides|I|dont|know|about|you|but|I|take|comfort|in|'
                     'thatThe|Dude|abides|I|dont|know|about_',
         'content': 'A144_A000_0000000',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     code = querystringsafe_base64.decode(data['attribution_code'])
     assert len(code) <= 200
     attrs = parse_qs(code)
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '5f4f928ad022b15ce10d6dc962e21e12bbfba924d73a2605f3085760d3f93923')
Esempio n. 3
0
 def test_no_valid_param_names(self):
     req = self._get_request({'dude': 'abides'})
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 400)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     self.assertEqual(data['error'], 'no params')
Esempio n. 4
0
    def test_handles_referrer_utf8(self):
        """Should ignore non-ascii domain names.

        We were getting exceptions when the view was trying to base64 encode
        non-ascii domain names in the referrer. The whitelist for bouncer doesn't
        include any such domains anyway, so we should just ignore them.
        """
        params = {'referrer': 'http://youtubê.com/sorry/'}
        final_params = {
            'source': 'www.mozilla.org',
            'medium': '(none)',
            'campaign': '(not set)',
            'content': '(not set)',
        }
        req = self._get_request(params)
        resp = views.stub_attribution_code(req)
        self.assertEqual(resp.status_code, 200)
        assert resp['cache-control'] == 'max-age=300'
        data = json.loads(resp.content)
        # will it blend?
        attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
        # parse_qs returns a dict with lists for values
        attrs = {k: v[0] for k, v in attrs.items()}
        self.assertDictEqual(attrs, final_params)
        self.assertEqual(data['attribution_sig'],
                         '1cdbee664f4e9ea32f14510995b41729a80eddc94cf26dc3c74894c6264c723c')
Esempio n. 5
0
 def test_no_valid_param_data(self):
     params = {'utm_source': 'br@ndt', 'utm_medium': 'ae<t>her'}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 400)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     self.assertEqual(data['error'], 'no params')
Esempio n. 6
0
 def test_other_data_too_long_not_campaign(self):
     """If the code is too long but not utm_campaign return error"""
     params = {
         'utm_source': 'brandt',
         'utm_campaign': 'dude',
         'utm_content': 'A144_A000_0000000',
         'utm_medium': 'The%7cDude%7cabides%7cI%7cdont%7cknow%7cabout%7cyou%7c'
                       'but%7cI%7ctake%7ccomfort%7cin%7cthat' * 2,
     }
     final_params = {'error': 'Invalid code'}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 400)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     self.assertDictEqual(data, final_params)
Esempio n. 7
0
 def test_no_valid_param_names(self):
     final_params = {
         'source': 'www.mozilla.org',
         'medium': '(none)',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request({'dude': 'abides'})
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '1cdbee664f4e9ea32f14510995b41729a80eddc94cf26dc3c74894c6264c723c')
Esempio n. 8
0
 def test_no_valid_param_names(self):
     final_params = {
         'source': 'www.mozilla.org',
         'medium': '(none)',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request({'dude': 'abides'})
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '153c1e8b7d4a582fa245d57d9c28ca9d6bcb65957e41924f826f1e7a5a2f8de9')
Esempio n. 9
0
 def test_handles_referrer_no_source(self):
     params = {'referrer': 'https://example.com:5000/searchin', 'utm_medium': 'aether'}
     final_params = {
         'source': 'example.com:5000',
         'medium': 'referral',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '70e177b822f24fa9f8bc8e1caa382204632b3b2548db19bb32b97042c0ef0d47')
Esempio n. 10
0
 def test_some_valid_param_data(self):
     params = {'utm_source': 'brandt', 'utm_content': 'ae<t>her'}
     final_params = {
         'source': 'brandt',
         'medium': '(direct)',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '37946edae923b50f31f9dc10013dc0d23bed7dc6272611e12af46ff7a8d9d7dc')
Esempio n. 11
0
 def test_returns_valid_data(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     final_params = {
         'source': 'brandt',
         'medium': 'aether',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      'abcbb028f97d08b7f85d194e6d51b8a2d96823208fdd167ff5977786b562af66')
Esempio n. 12
0
 def test_returns_valid_data(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     final_params = {
         'source': 'brandt',
         'medium': 'aether',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=31536000'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(unquote_plus(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '59c7743ece9b60b4fd1e9816c85deb22b3550d86ef3b0cf1592e835f58ff2d96')
Esempio n. 13
0
 def test_handles_referrer_no_source(self):
     params = {'referrer': 'https://example.com:5000/searchin', 'utm_medium': 'aether'}
     final_params = {
         'source': 'example.com:5000',
         'medium': 'referral',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '6b3dbb178e9abc22db66530df426b17db8590e8251fc153ba443e81ca60e355e')
Esempio n. 14
0
 def test_returns_valid_data(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     final_params = {
         'source': 'brandt',
         'medium': 'aether',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      'ab55c9b24e230f08d3ad50bf9a3a836ef4405cfb6919cb1df8efe208be38e16d')
Esempio n. 15
0
 def test_handles_referrer(self):
     params = {'utm_source': 'brandt', 'referrer': 'https://duckduckgo.com/privacy'}
     final_params = {
         'source': 'brandt',
         'medium': '(direct)',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=31536000'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(unquote_plus(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      'f9335b128511aed0109ecf21bb364d7637feca0b1ffcebbf7490e4966f71eca0')
Esempio n. 16
0
 def test_some_valid_param_data(self):
     params = {'utm_source': 'brandt', 'utm_content': 'ae<t>her'}
     final_params = {
         'source': 'brandt',
         'medium': '(direct)',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      'bd6c54115eb1f331b64bec83225a667fa0e16090d7d6abb33dab6305cd858a9d')
Esempio n. 17
0
 def test_handles_referrer_no_source(self):
     params = {'referrer': 'https://example.com:5000/searchin', 'utm_medium': 'aether'}
     final_params = {
         'source': 'example.com:5000',
         'medium': 'referral',
         'campaign': '(not set)',
         'content': '(not set)',
         'timestamp': '12345',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=31536000'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(unquote_plus(data['attribution_code']))
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(data['attribution_sig'],
                      '18e26666e63a0742926cf9e9e62154085cc12c5058831b2d3196c298d87c7e52')
Esempio n. 18
0
 def test_no_valid_param_data(self):
     params = {'utm_source': 'br@ndt', 'utm_medium': 'ae<t>her'}
     final_params = {
         'source': 'www.mozilla.org',
         'medium': '(none)',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(
         querystringsafe_base64.decode(data['attribution_code'].encode()).decode()
     )
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(
         data['attribution_sig'],
         '1cdbee664f4e9ea32f14510995b41729a80eddc94cf26dc3c74894c6264c723c',
     )
Esempio n. 19
0
 def test_returns_valid_data(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     final_params = {
         'source': 'brandt',
         'medium': 'aether',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(
         querystringsafe_base64.decode(data['attribution_code'].encode()).decode()
     )
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(
         data['attribution_sig'],
         'abcbb028f97d08b7f85d194e6d51b8a2d96823208fdd167ff5977786b562af66',
     )
Esempio n. 20
0
 def test_some_valid_param_data(self):
     params = {'utm_source': 'brandt', 'utm_content': 'ae<t>her'}
     final_params = {
         'source': 'brandt',
         'medium': '(direct)',
         'campaign': '(not set)',
         'content': '(not set)',
     }
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 200)
     assert resp['cache-control'] == 'max-age=300'
     data = json.loads(resp.content)
     # will it blend?
     attrs = parse_qs(
         querystringsafe_base64.decode(data['attribution_code'].encode()).decode()
     )
     # parse_qs returns a dict with lists for values
     attrs = {k: v[0] for k, v in attrs.items()}
     self.assertDictEqual(attrs, final_params)
     self.assertEqual(
         data['attribution_sig'],
         '37946edae923b50f31f9dc10013dc0d23bed7dc6272611e12af46ff7a8d9d7dc',
     )
Esempio n. 21
0
 def test_no_hmac_key_set(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 403)
     assert resp['cache-control'] == 'max-age=300'
Esempio n. 22
0
 def test_rate_limit_disabled(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 429)
     assert resp['cache-control'] == 'max-age=300'
Esempio n. 23
0
 def test_no_hmac_key_set(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 403)
     assert resp['cache-control'] == 'max-age=300'
Esempio n. 24
0
 def test_rate_limit_disabled(self):
     params = {'utm_source': 'brandt', 'utm_medium': 'aether'}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 429)
     assert resp['cache-control'] == 'max-age=300'
Esempio n. 25
0
 def test_rate_limit_disabled(self):
     params = {"utm_source": "brandt", "utm_medium": "aether"}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 429)
     assert resp["cache-control"] == "max-age=300"
Esempio n. 26
0
 def test_no_hmac_key_set(self):
     params = {"utm_source": "brandt", "utm_medium": "aether"}
     req = self._get_request(params)
     resp = views.stub_attribution_code(req)
     self.assertEqual(resp.status_code, 403)
     assert resp["cache-control"] == "max-age=300"