diff options
| author | Chris McDonough <chrism@plope.com> | 2011-04-11 04:46:58 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-04-11 04:46:58 -0400 |
| commit | 6a47a0df5f530af95da2508995eb9795a80dc591 (patch) | |
| tree | b1e456cb7fb13836370df7f0b9cff49e482af6a4 | |
| parent | 474df5c8b4d76bf4c1b355fcaab8590fc4f307fb (diff) | |
| download | pyramid-6a47a0df5f530af95da2508995eb9795a80dc591.tar.gz pyramid-6a47a0df5f530af95da2508995eb9795a80dc591.tar.bz2 pyramid-6a47a0df5f530af95da2508995eb9795a80dc591.zip | |
100% condition coverage of authentication module
| -rw-r--r-- | pyramid/authentication.py | 17 | ||||
| -rw-r--r-- | pyramid/tests/test_authentication.py | 33 |
2 files changed, 44 insertions, 6 deletions
diff --git a/pyramid/authentication.py b/pyramid/authentication.py index 3d3139b7c..f1123c442 100644 --- a/pyramid/authentication.py +++ b/pyramid/authentication.py @@ -435,9 +435,9 @@ class AuthTktCookieHelper(object): userid = decoder(userid) reissue = self.reissue_time is not None - - if not hasattr(request, '_authtkt_reissued'): - if reissue and ( (now - timestamp) > self.reissue_time): + + if reissue and not hasattr(request, '_authtkt_reissued'): + if ( (now - timestamp) > self.reissue_time ): # work around https://github.com/Pylons/pyramid/issues#issue/108 tokens = filter(None, tokens) headers = self.remember(request, userid, max_age=self.max_age, @@ -469,8 +469,10 @@ class AuthTktCookieHelper(object): ``max_age`` The max age of the auth_tkt cookie, in seconds. When this value is set, the cookie's ``Max-Age`` and ``Expires`` settings will be set, - allowing the auth_tkt cookie to last between browser sessions. - Default: ``None``. + allowing the auth_tkt cookie to last between browser sessions. If + this value is ``None``, the ``max_age`` value provided to the + helper itself will be used as the ``max_age`` value. Default: + ``None``. ``tokens`` A sequence of strings that will be placed into the auth_tkt tokens @@ -479,7 +481,9 @@ class AuthTktCookieHelper(object): Tokens are available in the returned identity when an auth_tkt is found in the request and unpacked. Default: ``()``. """ - max_age = max_age or self.max_age + if max_age is None: + max_age = self.max_age + environ = request.environ if self.include_ip: @@ -490,6 +494,7 @@ class AuthTktCookieHelper(object): user_data = '' encoding_data = self.userid_type_encoders.get(type(userid)) + if encoding_data: encoding, encoder = encoding_data userid = encoder(userid) diff --git a/pyramid/tests/test_authentication.py b/pyramid/tests/test_authentication.py index e16f53fdb..1d2b939b7 100644 --- a/pyramid/tests/test_authentication.py +++ b/pyramid/tests/test_authentication.py @@ -477,6 +477,29 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(len(response.headerlist), 3) self.assertEqual(response.headerlist[0][0], 'Set-Cookie') + def test_identify_cookie_reissue_already_reissued_this_request(self): + import time + plugin = self._makeOne('secret', timeout=10, reissue_time=0) + now = time.time() + plugin.auth_tkt.timestamp = now + plugin.now = now + 1 + request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=bogus'}) + request._authtkt_reissued = True + result = plugin.identify(request) + self.failUnless(result) + self.assertEqual(len(request.callbacks), 0) + + def test_identify_cookie_reissue_notyet(self): + import time + plugin = self._makeOne('secret', timeout=10, reissue_time=10) + now = time.time() + plugin.auth_tkt.timestamp = now + plugin.now = now + 1 + request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=bogus'}) + result = plugin.identify(request) + self.failUnless(result) + self.assertEqual(len(request.callbacks), 0) + def test_identify_cookie_reissue_with_tokens_default(self): # see https://github.com/Pylons/pyramid/issues#issue/108 import time @@ -659,6 +682,16 @@ class TestAuthTktCookieHelper(unittest.TestCase): userid.encode('utf-8').encode('base64').strip()) self.assertEqual(val['user_data'], 'userid_type:b64unicode') + def test_remember_insane_userid(self): + plugin = self._makeOne('secret') + request = self._makeRequest() + userid = object() + result = plugin.remember(request, userid) + values = self._parseHeaders(result) + self.assertEqual(len(result), 3) + value = values[0] + self.failUnless('userid' in value.value) + def test_remember_max_age(self): plugin = self._makeOne('secret') request = self._makeRequest() |
