diff options
Diffstat (limited to 'tests/test_authentication.py')
| -rw-r--r-- | tests/test_authentication.py | 792 |
1 files changed, 544 insertions, 248 deletions
diff --git a/tests/test_authentication.py b/tests/test_authentication.py index 4fbc3fe2e..fc3e60587 100644 --- a/tests/test_authentication.py +++ b/tests/test_authentication.py @@ -1,14 +1,13 @@ import unittest import warnings from pyramid import testing -from pyramid.compat import ( - text_, - bytes_, - ) +from pyramid.compat import text_, bytes_ + class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): def setUp(self): from pyramid.interfaces import IDebugLogger + self.config = testing.setUp() self.config.registry.registerUtility(self, IDebugLogger) self.messages = [] @@ -21,9 +20,11 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): def _makeOne(self, userid=None, callback=None): from pyramid.authentication import CallbackAuthenticationPolicy + class MyAuthenticationPolicy(CallbackAuthenticationPolicy): def unauthenticated_userid(self, request): return userid + policy = MyAuthenticationPolicy() policy.debug = True policy.callback = callback @@ -38,7 +39,8 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): self.messages[0], 'tests.test_authentication.MyAuthenticationPolicy.' 'authenticated_userid: call to unauthenticated_userid returned ' - 'None; returning None') + 'None; returning None', + ) def test_authenticated_userid_no_callback(self): request = DummyRequest(registry=self.config.registry) @@ -47,14 +49,17 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): self.assertEqual(len(self.messages), 1) self.assertEqual( self.messages[0], - "tests.test_authentication.MyAuthenticationPolicy." + "tests.test_authentication.MyAuthenticationPolicy." "authenticated_userid: there was no groupfinder callback; " - "returning 'fred'") + "returning 'fred'", + ) def test_authenticated_userid_with_callback_fail(self): request = DummyRequest(registry=self.config.registry) + def callback(userid, request): return None + policy = self._makeOne(userid='fred', callback=callback) self.assertEqual(policy.authenticated_userid(request), None) self.assertEqual(len(self.messages), 1) @@ -62,12 +67,15 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): self.messages[0], 'tests.test_authentication.MyAuthenticationPolicy.' 'authenticated_userid: groupfinder callback returned None; ' - 'returning None') + 'returning None', + ) def test_authenticated_userid_with_callback_success(self): request = DummyRequest(registry=self.config.registry) + def callback(userid, request): return [] + policy = self._makeOne(userid='fred', callback=callback) self.assertEqual(policy.authenticated_userid(request), 'fred') self.assertEqual(len(self.messages), 1) @@ -75,7 +83,8 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): self.messages[0], "tests.test_authentication.MyAuthenticationPolicy." "authenticated_userid: groupfinder callback returned []; " - "returning 'fred'") + "returning 'fred'", + ) def test_authenticated_userid_fails_cleaning_as_Authenticated(self): request = DummyRequest(registry=self.config.registry) @@ -87,7 +96,8 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): "tests.test_authentication.MyAuthenticationPolicy." "authenticated_userid: use of userid 'system.Authenticated' is " "disallowed by any built-in Pyramid security policy, returning " - "None") + "None", + ) def test_authenticated_userid_fails_cleaning_as_Everyone(self): request = DummyRequest(registry=self.config.registry) @@ -99,107 +109,127 @@ class TestCallbackAuthenticationPolicyDebugging(unittest.TestCase): "tests.test_authentication.MyAuthenticationPolicy." "authenticated_userid: use of userid 'system.Everyone' is " "disallowed by any built-in Pyramid security policy, returning " - "None") + "None", + ) def test_effective_principals_no_unauthenticated_userid(self): request = DummyRequest(registry=self.config.registry) policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), - ['system.Everyone']) + self.assertEqual( + policy.effective_principals(request), ['system.Everyone'] + ) self.assertEqual(len(self.messages), 1) self.assertEqual( self.messages[0], "tests.test_authentication.MyAuthenticationPolicy." "effective_principals: unauthenticated_userid returned None; " - "returning ['system.Everyone']") + "returning ['system.Everyone']", + ) def test_effective_principals_no_callback(self): request = DummyRequest(registry=self.config.registry) policy = self._makeOne(userid='fred') self.assertEqual( policy.effective_principals(request), - ['system.Everyone', 'system.Authenticated', 'fred']) + ['system.Everyone', 'system.Authenticated', 'fred'], + ) self.assertEqual(len(self.messages), 2) self.assertEqual( self.messages[0], 'tests.test_authentication.MyAuthenticationPolicy.' 'effective_principals: groupfinder callback is None, so groups ' - 'is []') + 'is []', + ) self.assertEqual( self.messages[1], "tests.test_authentication.MyAuthenticationPolicy." "effective_principals: returning effective principals: " - "['system.Everyone', 'system.Authenticated', 'fred']") + "['system.Everyone', 'system.Authenticated', 'fred']", + ) def test_effective_principals_with_callback_fail(self): request = DummyRequest(registry=self.config.registry) + def callback(userid, request): return None + policy = self._makeOne(userid='fred', callback=callback) self.assertEqual( - policy.effective_principals(request), ['system.Everyone']) + policy.effective_principals(request), ['system.Everyone'] + ) self.assertEqual(len(self.messages), 2) self.assertEqual( self.messages[0], 'tests.test_authentication.MyAuthenticationPolicy.' 'effective_principals: groupfinder callback returned None as ' - 'groups') + 'groups', + ) self.assertEqual( self.messages[1], "tests.test_authentication.MyAuthenticationPolicy." "effective_principals: returning effective principals: " - "['system.Everyone']") + "['system.Everyone']", + ) def test_effective_principals_with_callback_success(self): request = DummyRequest(registry=self.config.registry) + def callback(userid, request): return [] + policy = self._makeOne(userid='fred', callback=callback) self.assertEqual( policy.effective_principals(request), - ['system.Everyone', 'system.Authenticated', 'fred']) + ['system.Everyone', 'system.Authenticated', 'fred'], + ) self.assertEqual(len(self.messages), 2) self.assertEqual( self.messages[0], 'tests.test_authentication.MyAuthenticationPolicy.' - 'effective_principals: groupfinder callback returned [] as groups') + 'effective_principals: groupfinder callback returned [] as groups', + ) self.assertEqual( self.messages[1], "tests.test_authentication.MyAuthenticationPolicy." "effective_principals: returning effective principals: " - "['system.Everyone', 'system.Authenticated', 'fred']") + "['system.Everyone', 'system.Authenticated', 'fred']", + ) def test_effective_principals_with_unclean_principal_Authenticated(self): request = DummyRequest(registry=self.config.registry) policy = self._makeOne(userid='system.Authenticated') self.assertEqual( - policy.effective_principals(request), - ['system.Everyone']) + policy.effective_principals(request), ['system.Everyone'] + ) self.assertEqual(len(self.messages), 1) self.assertEqual( self.messages[0], "tests.test_authentication.MyAuthenticationPolicy." "effective_principals: unauthenticated_userid returned disallowed " "'system.Authenticated'; returning ['system.Everyone'] as if it " - "was None") + "was None", + ) def test_effective_principals_with_unclean_principal_Everyone(self): request = DummyRequest(registry=self.config.registry) policy = self._makeOne(userid='system.Everyone') self.assertEqual( - policy.effective_principals(request), - ['system.Everyone']) + policy.effective_principals(request), ['system.Everyone'] + ) self.assertEqual(len(self.messages), 1) self.assertEqual( self.messages[0], "tests.test_authentication.MyAuthenticationPolicy." "effective_principals: unauthenticated_userid returned disallowed " "'system.Everyone'; returning ['system.Everyone'] as if it " - "was None") + "was None", + ) + class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def _getTargetClass(self): from pyramid.authentication import RepozeWho1AuthenticationPolicy + return RepozeWho1AuthenticationPolicy def _makeOne(self, identifier_name='auth_tkt', callback=None): @@ -208,11 +238,13 @@ class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def test_class_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyClass from pyramid.interfaces import IAuthenticationPolicy + verifyClass(IAuthenticationPolicy, self._getTargetClass()) def test_instance_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyObject from pyramid.interfaces import IAuthenticationPolicy + verifyObject(IAuthenticationPolicy, self._makeOne()) def test_unauthenticated_userid_returns_None(self): @@ -222,7 +254,8 @@ class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def test_unauthenticated_userid(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) + {'repoze.who.identity': {'repoze.who.userid': 'fred'}} + ) policy = self._makeOne() self.assertEqual(policy.unauthenticated_userid(request), 'fred') @@ -233,48 +266,61 @@ class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def test_authenticated_userid(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) + {'repoze.who.identity': {'repoze.who.userid': 'fred'}} + ) policy = self._makeOne() self.assertEqual(policy.authenticated_userid(request), 'fred') def test_authenticated_userid_repoze_who_userid_is_None(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':None}}) + {'repoze.who.identity': {'repoze.who.userid': None}} + ) policy = self._makeOne() self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid_with_callback_returns_None(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) + {'repoze.who.identity': {'repoze.who.userid': 'fred'}} + ) + def callback(identity, request): return None + policy = self._makeOne(callback=callback) self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid_with_callback_returns_something(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) + {'repoze.who.identity': {'repoze.who.userid': 'fred'}} + ) + def callback(identity, request): return ['agroup'] + policy = self._makeOne(callback=callback) self.assertEqual(policy.authenticated_userid(request), 'fred') def test_authenticated_userid_unclean_principal_Authenticated(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'system.Authenticated'}} - ) + { + 'repoze.who.identity': { + 'repoze.who.userid': 'system.Authenticated' + } + } + ) policy = self._makeOne() self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid_unclean_principal_Everyone(self): request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'system.Everyone'}} - ) + {'repoze.who.identity': {'repoze.who.userid': 'system.Everyone'}} + ) policy = self._makeOne() self.assertEqual(policy.authenticated_userid(request), None) def test_effective_principals_None(self): from pyramid.security import Everyone + request = DummyRequest({}) policy = self._makeOne() self.assertEqual(policy.effective_principals(request), [Everyone]) @@ -282,56 +328,86 @@ class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def test_effective_principals_userid_only(self): from pyramid.security import Everyone from pyramid.security import Authenticated + request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) + {'repoze.who.identity': {'repoze.who.userid': 'fred'}} + ) policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred']) + self.assertEqual( + policy.effective_principals(request), + [Everyone, Authenticated, 'fred'], + ) def test_effective_principals_userid_and_groups(self): from pyramid.security import Everyone from pyramid.security import Authenticated + request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred', - 'groups':['quux', 'biz']}}) + { + 'repoze.who.identity': { + 'repoze.who.userid': 'fred', + 'groups': ['quux', 'biz'], + } + } + ) + def callback(identity, request): return identity['groups'] + policy = self._makeOne(callback=callback) - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred', 'quux', 'biz']) + self.assertEqual( + policy.effective_principals(request), + [Everyone, Authenticated, 'fred', 'quux', 'biz'], + ) def test_effective_principals_userid_callback_returns_None(self): from pyramid.security import Everyone + request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred', - 'groups':['quux', 'biz']}}) + { + 'repoze.who.identity': { + 'repoze.who.userid': 'fred', + 'groups': ['quux', 'biz'], + } + } + ) + def callback(identity, request): return None + policy = self._makeOne(callback=callback) self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals_repoze_who_userid_is_None(self): from pyramid.security import Everyone + request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':None}} - ) + {'repoze.who.identity': {'repoze.who.userid': None}} + ) policy = self._makeOne() self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals_repoze_who_userid_is_unclean_Everyone(self): from pyramid.security import Everyone + request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'system.Everyone'}} - ) + {'repoze.who.identity': {'repoze.who.userid': 'system.Everyone'}} + ) policy = self._makeOne() self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals_repoze_who_userid_is_unclean_Authenticated( - self): + self + ): from pyramid.security import Everyone + request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'system.Authenticated'}} - ) + { + 'repoze.who.identity': { + 'repoze.who.userid': 'system.Authenticated' + } + } + ) policy = self._makeOne() self.assertEqual(policy.effective_principals(request), [Everyone]) @@ -343,20 +419,20 @@ class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def test_remember(self): authtkt = DummyWhoPlugin() - request = DummyRequest( - {'repoze.who.plugins':{'auth_tkt':authtkt}}) + request = DummyRequest({'repoze.who.plugins': {'auth_tkt': authtkt}}) policy = self._makeOne() result = policy.remember(request, 'fred') self.assertEqual(result[0], request.environ) - self.assertEqual(result[1], {'repoze.who.userid':'fred'}) + self.assertEqual(result[1], {'repoze.who.userid': 'fred'}) def test_remember_kwargs(self): authtkt = DummyWhoPlugin() - request = DummyRequest( - {'repoze.who.plugins':{'auth_tkt':authtkt}}) + request = DummyRequest({'repoze.who.plugins': {'auth_tkt': authtkt}}) policy = self._makeOne() result = policy.remember(request, 'fred', max_age=23) - self.assertEqual(result[1], {'repoze.who.userid':'fred', 'max_age': 23}) + self.assertEqual( + result[1], {'repoze.who.userid': 'fred', 'max_age': 23} + ) def test_forget_no_plugins(self): request = DummyRequest({}) @@ -367,17 +443,21 @@ class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): def test_forget(self): authtkt = DummyWhoPlugin() request = DummyRequest( - {'repoze.who.plugins':{'auth_tkt':authtkt}, - 'repoze.who.identity':{'repoze.who.userid':'fred'}, - }) + { + 'repoze.who.plugins': {'auth_tkt': authtkt}, + 'repoze.who.identity': {'repoze.who.userid': 'fred'}, + } + ) policy = self._makeOne() result = policy.forget(request) self.assertEqual(result[0], request.environ) self.assertEqual(result[1], request.environ['repoze.who.identity']) + class TestRemoteUserAuthenticationPolicy(unittest.TestCase): def _getTargetClass(self): from pyramid.authentication import RemoteUserAuthenticationPolicy + return RemoteUserAuthenticationPolicy def _makeOne(self, environ_key='REMOTE_USER', callback=None): @@ -386,11 +466,13 @@ class TestRemoteUserAuthenticationPolicy(unittest.TestCase): def test_class_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyClass from pyramid.interfaces import IAuthenticationPolicy + verifyClass(IAuthenticationPolicy, self._getTargetClass()) def test_instance_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyObject from pyramid.interfaces import IAuthenticationPolicy + verifyObject(IAuthenticationPolicy, self._makeOne()) def test_unauthenticated_userid_returns_None(self): @@ -399,7 +481,7 @@ class TestRemoteUserAuthenticationPolicy(unittest.TestCase): self.assertEqual(policy.unauthenticated_userid(request), None) def test_unauthenticated_userid(self): - request = DummyRequest({'REMOTE_USER':'fred'}) + request = DummyRequest({'REMOTE_USER': 'fred'}) policy = self._makeOne() self.assertEqual(policy.unauthenticated_userid(request), 'fred') @@ -409,12 +491,13 @@ class TestRemoteUserAuthenticationPolicy(unittest.TestCase): self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid(self): - request = DummyRequest({'REMOTE_USER':'fred'}) + request = DummyRequest({'REMOTE_USER': 'fred'}) policy = self._makeOne() self.assertEqual(policy.authenticated_userid(request), 'fred') def test_effective_principals_None(self): from pyramid.security import Everyone + request = DummyRequest({}) policy = self._makeOne() self.assertEqual(policy.effective_principals(request), [Everyone]) @@ -422,26 +505,31 @@ class TestRemoteUserAuthenticationPolicy(unittest.TestCase): def test_effective_principals(self): from pyramid.security import Everyone from pyramid.security import Authenticated - request = DummyRequest({'REMOTE_USER':'fred'}) + + request = DummyRequest({'REMOTE_USER': 'fred'}) policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred']) + self.assertEqual( + policy.effective_principals(request), + [Everyone, Authenticated, 'fred'], + ) def test_remember(self): - request = DummyRequest({'REMOTE_USER':'fred'}) + request = DummyRequest({'REMOTE_USER': 'fred'}) policy = self._makeOne() result = policy.remember(request, 'fred') self.assertEqual(result, []) def test_forget(self): - request = DummyRequest({'REMOTE_USER':'fred'}) + request = DummyRequest({'REMOTE_USER': 'fred'}) policy = self._makeOne() result = policy.forget(request) self.assertEqual(result, []) + class TestAuthTktAuthenticationPolicy(unittest.TestCase): def _getTargetClass(self): from pyramid.authentication import AuthTktAuthenticationPolicy + return AuthTktAuthenticationPolicy def _makeOne(self, callback, cookieidentity, **kw): @@ -460,10 +548,16 @@ class TestAuthTktAuthenticationPolicy(unittest.TestCase): def test_allargs(self): # pass all known args inst = self._getTargetClass()( - 'secret', callback=None, cookie_name=None, secure=False, - include_ip=False, timeout=None, reissue_time=None, - hashalg='sha512', samesite=None, - ) + 'secret', + callback=None, + cookie_name=None, + secure=False, + include_ip=False, + timeout=None, + reissue_time=None, + hashalg='sha512', + samesite=None, + ) self.assertEqual(inst.callback, None) def test_hashalg_override(self): @@ -477,8 +571,8 @@ class TestAuthTktAuthenticationPolicy(unittest.TestCase): self.assertEqual(policy.unauthenticated_userid(request), None) def test_unauthenticated_userid(self): - request = DummyRequest({'REMOTE_USER':'fred'}) - policy = self._makeOne(None, {'userid':'fred'}) + request = DummyRequest({'REMOTE_USER': 'fred'}) + policy = self._makeOne(None, {'userid': 'fred'}) self.assertEqual(policy.unauthenticated_userid(request), 'fred') def test_authenticated_userid_no_cookie_identity(self): @@ -488,41 +582,54 @@ class TestAuthTktAuthenticationPolicy(unittest.TestCase): def test_authenticated_userid_callback_returns_None(self): request = DummyRequest({}) + def callback(userid, request): return None - policy = self._makeOne(callback, {'userid':'fred'}) + + policy = self._makeOne(callback, {'userid': 'fred'}) self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid(self): request = DummyRequest({}) + def callback(userid, request): return True - policy = self._makeOne(callback, {'userid':'fred'}) + + policy = self._makeOne(callback, {'userid': 'fred'}) self.assertEqual(policy.authenticated_userid(request), 'fred') def test_effective_principals_no_cookie_identity(self): from pyramid.security import Everyone + request = DummyRequest({}) policy = self._makeOne(None, None) self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals_callback_returns_None(self): from pyramid.security import Everyone + request = DummyRequest({}) + def callback(userid, request): return None - policy = self._makeOne(callback, {'userid':'fred'}) + + policy = self._makeOne(callback, {'userid': 'fred'}) self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals(self): from pyramid.security import Everyone from pyramid.security import Authenticated + request = DummyRequest({}) + def callback(userid, request): return ['group.foo'] - policy = self._makeOne(callback, {'userid':'fred'}) - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred', 'group.foo']) + + policy = self._makeOne(callback, {'userid': 'fred'}) + self.assertEqual( + policy.effective_principals(request), + [Everyone, Authenticated, 'fred', 'group.foo'], + ) def test_remember(self): request = DummyRequest({}) @@ -534,7 +641,7 @@ class TestAuthTktAuthenticationPolicy(unittest.TestCase): request = DummyRequest({}) policy = self._makeOne(None, None) result = policy.remember(request, 'fred', a=1, b=2) - self.assertEqual(policy.cookie.kw, {'a':1, 'b':2}) + self.assertEqual(policy.cookie.kw, {'a': 1, 'b': 2}) self.assertEqual(result, []) def test_forget(self): @@ -546,16 +653,20 @@ class TestAuthTktAuthenticationPolicy(unittest.TestCase): def test_class_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyClass from pyramid.interfaces import IAuthenticationPolicy + verifyClass(IAuthenticationPolicy, self._getTargetClass()) def test_instance_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyObject from pyramid.interfaces import IAuthenticationPolicy + verifyObject(IAuthenticationPolicy, self._makeOne(None, None)) + class TestAuthTktCookieHelper(unittest.TestCase): def _getTargetClass(self): from pyramid.authentication import AuthTktCookieHelper + return AuthTktCookieHelper def _makeOne(self, *arg, **kw): @@ -570,7 +681,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): return helper def _makeRequest(self, cookie=None, ipv6=False): - environ = {'wsgi.version': (1,0)} + environ = {'wsgi.version': (1, 0)} if ipv6 is False: environ['REMOTE_ADDR'] = '1.1.1.1' @@ -588,7 +699,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): return D def _parseHeaders(self, headers): - return [ self._parseHeader(header) for header in headers ] + return [self._parseHeader(header) for header in headers] def _parseHeader(self, header): cookie = self._parseCookie(header[1]) @@ -596,18 +707,25 @@ class TestAuthTktCookieHelper(unittest.TestCase): def _parseCookie(self, cookie): from pyramid.compat import SimpleCookie + cookies = SimpleCookie() cookies.load(cookie) return cookies.get('auth_tkt') def test_init_cookie_str_reissue_invalid(self): - self.assertRaises(ValueError, self._makeOne, 'secret', reissue_time='invalid value') + self.assertRaises( + ValueError, self._makeOne, 'secret', reissue_time='invalid value' + ) def test_init_cookie_str_timeout_invalid(self): - self.assertRaises(ValueError, self._makeOne, 'secret', timeout='invalid value') + self.assertRaises( + ValueError, self._makeOne, 'secret', timeout='invalid value' + ) def test_init_cookie_str_max_age_invalid(self): - self.assertRaises(ValueError, self._makeOne, 'secret', max_age='invalid value') + self.assertRaises( + ValueError, self._makeOne, 'secret', max_age='invalid value' + ) def test_identify_nocookie(self): helper = self._makeOne('secret') @@ -635,8 +753,8 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(helper.auth_tkt.secret, 'secret') environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], '') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_good_cookie_include_ipv6(self): helper = self._makeOne('secret', include_ip=True) @@ -652,8 +770,8 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(helper.auth_tkt.secret, 'secret') environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], '') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_good_cookie_dont_include_ip(self): helper = self._makeOne('secret', include_ip=False) @@ -669,8 +787,8 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(helper.auth_tkt.secret, 'secret') environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], '') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_good_cookie_int_useridtype(self): helper = self._makeOne('secret', include_ip=False) @@ -685,8 +803,8 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result['timestamp'], 0) environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:int') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], 'userid_type:int') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_nonuseridtype_user_data(self): helper = self._makeOne('secret', include_ip=False) @@ -701,8 +819,8 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result['timestamp'], 0) environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'bogus:int') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], 'bogus:int') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_good_cookie_unknown_useridtype(self): helper = self._makeOne('secret', include_ip=False) @@ -717,11 +835,12 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result['timestamp'], 0) environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:unknown') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], 'userid_type:unknown') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_good_cookie_b64str_useridtype(self): from base64 import b64encode + helper = self._makeOne('secret', include_ip=False) helper.auth_tkt.userid = b64encode(b'encoded').strip() helper.auth_tkt.user_data = 'userid_type:b64str' @@ -734,11 +853,12 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result['timestamp'], 0) environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:b64str') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], 'userid_type:b64str') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_good_cookie_b64unicode_useridtype(self): from base64 import b64encode + helper = self._makeOne('secret', include_ip=False) helper.auth_tkt.userid = b64encode(b'\xc3\xa9ncoded').strip() helper.auth_tkt.user_data = 'userid_type:b64unicode' @@ -751,8 +871,8 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result['timestamp'], 0) environ = request.environ self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:b64unicode') - self.assertEqual(environ['AUTH_TYPE'],'cookie') + self.assertEqual(environ['REMOTE_USER_DATA'], 'userid_type:b64unicode') + self.assertEqual(environ['AUTH_TYPE'], 'cookie') def test_identify_bad_cookie(self): helper = self._makeOne('secret', include_ip=True) @@ -771,22 +891,24 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_timeout_aged(self): import time + helper = self._makeOne('secret', timeout=10) now = time.time() helper.auth_tkt.timestamp = now - 1 helper.now = now + 10 - helper.auth_tkt.tokens = (text_('a'), ) + helper.auth_tkt.tokens = (text_('a'),) request = self._makeRequest('bogus') result = helper.identify(request) self.assertFalse(result) def test_identify_cookie_reissue(self): import time + helper = self._makeOne('secret', timeout=10, reissue_time=0) now = time.time() helper.auth_tkt.timestamp = now helper.now = now + 1 - helper.auth_tkt.tokens = (text_('a'), ) + helper.auth_tkt.tokens = (text_('a'),) request = self._makeRequest('bogus') result = helper.identify(request) self.assertTrue(result) @@ -798,11 +920,12 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_str_reissue(self): import time + helper = self._makeOne('secret', timeout=10, reissue_time='0') now = time.time() helper.auth_tkt.timestamp = now helper.now = now + 1 - helper.auth_tkt.tokens = (text_('a'), ) + helper.auth_tkt.tokens = (text_('a'),) request = self._makeRequest('bogus') result = helper.identify(request) self.assertTrue(result) @@ -814,6 +937,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_reissue_already_reissued_this_request(self): import time + helper = self._makeOne('secret', timeout=10, reissue_time=0) now = time.time() helper.auth_tkt.timestamp = now @@ -826,6 +950,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_reissue_notyet(self): import time + helper = self._makeOne('secret', timeout=10, reissue_time=10) now = time.time() helper.auth_tkt.timestamp = now @@ -837,6 +962,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_reissue_revoked_by_forget(self): import time + helper = self._makeOne('secret', timeout=10, reissue_time=0) now = time.time() helper.auth_tkt.timestamp = now @@ -854,6 +980,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_reissue_revoked_by_remember(self): import time + helper = self._makeOne('secret', timeout=10, reissue_time=0) now = time.time() helper.auth_tkt.timestamp = now @@ -872,6 +999,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_identify_cookie_reissue_with_tokens_default(self): # see https://github.com/Pylons/pyramid/issues#issue/108 import time + helper = self._makeOne('secret', timeout=10, reissue_time=0) auth_tkt = DummyAuthTktModule(tokens=['']) helper.auth_tkt = auth_tkt @@ -902,13 +1030,15 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertTrue(result[0][1].startswith('auth_tkt=')) self.assertEqual(result[1][0], 'Set-Cookie') - self.assertTrue(result[1][1].endswith( - '; Domain=localhost; Path=/; SameSite=Lax')) + self.assertTrue( + result[1][1].endswith('; Domain=localhost; Path=/; SameSite=Lax') + ) self.assertTrue(result[1][1].startswith('auth_tkt=')) self.assertEqual(result[2][0], 'Set-Cookie') - self.assertTrue(result[2][1].endswith( - '; Domain=.localhost; Path=/; SameSite=Lax')) + self.assertTrue( + result[2][1].endswith('; Domain=.localhost; Path=/; SameSite=Lax') + ) self.assertTrue(result[2][1].startswith('auth_tkt=')) def test_remember_nondefault_samesite(self): @@ -922,13 +1052,19 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertTrue(result[0][1].startswith('auth_tkt=')) self.assertEqual(result[1][0], 'Set-Cookie') - self.assertTrue(result[1][1].endswith( - '; Domain=localhost; Path=/; SameSite=Strict')) + self.assertTrue( + result[1][1].endswith( + '; Domain=localhost; Path=/; SameSite=Strict' + ) + ) self.assertTrue(result[1][1].startswith('auth_tkt=')) self.assertEqual(result[2][0], 'Set-Cookie') - self.assertTrue(result[2][1].endswith( - '; Domain=.localhost; Path=/; SameSite=Strict')) + self.assertTrue( + result[2][1].endswith( + '; Domain=.localhost; Path=/; SameSite=Strict' + ) + ) self.assertTrue(result[2][1].startswith('auth_tkt=')) def test_remember_None_samesite(self): @@ -938,17 +1074,15 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(len(result), 3) self.assertEqual(result[0][0], 'Set-Cookie') - self.assertTrue(result[0][1].endswith('; Path=/')) # no samesite + self.assertTrue(result[0][1].endswith('; Path=/')) # no samesite self.assertTrue(result[0][1].startswith('auth_tkt=')) self.assertEqual(result[1][0], 'Set-Cookie') - self.assertTrue(result[1][1].endswith( - '; Domain=localhost; Path=/')) + self.assertTrue(result[1][1].endswith('; Domain=localhost; Path=/')) self.assertTrue(result[1][1].startswith('auth_tkt=')) self.assertEqual(result[2][0], 'Set-Cookie') - self.assertTrue(result[2][1].endswith( - '; Domain=.localhost; Path=/')) + self.assertTrue(result[2][1].endswith('; Domain=.localhost; Path=/')) self.assertTrue(result[2][1].startswith('auth_tkt=')) def test_remember_include_ip(self): @@ -962,35 +1096,45 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertTrue(result[0][1].startswith('auth_tkt=')) self.assertEqual(result[1][0], 'Set-Cookie') - self.assertTrue(result[1][1].endswith( - '; Domain=localhost; Path=/; SameSite=Lax')) + self.assertTrue( + result[1][1].endswith('; Domain=localhost; Path=/; SameSite=Lax') + ) self.assertTrue(result[1][1].startswith('auth_tkt=')) self.assertEqual(result[2][0], 'Set-Cookie') - self.assertTrue(result[2][1].endswith( - '; Domain=.localhost; Path=/; SameSite=Lax')) + self.assertTrue( + result[2][1].endswith('; Domain=.localhost; Path=/; SameSite=Lax') + ) self.assertTrue(result[2][1].startswith('auth_tkt=')) def test_remember_path(self): - helper = self._makeOne('secret', include_ip=True, - path="/cgi-bin/app.cgi/") + helper = self._makeOne( + 'secret', include_ip=True, path="/cgi-bin/app.cgi/" + ) request = self._makeRequest() result = helper.remember(request, 'other') self.assertEqual(len(result), 3) self.assertEqual(result[0][0], 'Set-Cookie') - self.assertTrue(result[0][1].endswith( - '; Path=/cgi-bin/app.cgi/; SameSite=Lax')) + self.assertTrue( + result[0][1].endswith('; Path=/cgi-bin/app.cgi/; SameSite=Lax') + ) self.assertTrue(result[0][1].startswith('auth_tkt=')) self.assertEqual(result[1][0], 'Set-Cookie') - self.assertTrue(result[1][1].endswith( - '; Domain=localhost; Path=/cgi-bin/app.cgi/; SameSite=Lax')) + self.assertTrue( + result[1][1].endswith( + '; Domain=localhost; Path=/cgi-bin/app.cgi/; SameSite=Lax' + ) + ) self.assertTrue(result[1][1].startswith('auth_tkt=')) self.assertEqual(result[2][0], 'Set-Cookie') - self.assertTrue(result[2][1].endswith( - '; Domain=.localhost; Path=/cgi-bin/app.cgi/; SameSite=Lax')) + self.assertTrue( + result[2][1].endswith( + '; Domain=.localhost; Path=/cgi-bin/app.cgi/; SameSite=Lax' + ) + ) self.assertTrue(result[2][1].startswith('auth_tkt=')) def test_remember_http_only(self): @@ -1040,8 +1184,9 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertTrue(result[0][1].startswith('auth_tkt=')) self.assertEqual(result[1][0], 'Set-Cookie') - self.assertTrue(result[1][1].endswith( - '; Domain=localhost; Path=/; SameSite=Lax')) + self.assertTrue( + result[1][1].endswith('; Domain=localhost; Path=/; SameSite=Lax') + ) self.assertTrue(result[1][1].startswith('auth_tkt=')) def test_remember_parent_domain(self): @@ -1052,8 +1197,11 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(len(result), 1) self.assertEqual(result[0][0], 'Set-Cookie') - self.assertTrue(result[0][1].endswith( - '; Domain=.example.com; Path=/; SameSite=Lax')) + self.assertTrue( + result[0][1].endswith( + '; Domain=.example.com; Path=/; SameSite=Lax' + ) + ) self.assertTrue(result[0][1].startswith('auth_tkt=')) def test_remember_parent_domain_supercedes_wild_domain(self): @@ -1062,8 +1210,11 @@ class TestAuthTktCookieHelper(unittest.TestCase): request.domain = 'www.example.com' result = helper.remember(request, 'other') self.assertEqual(len(result), 1) - self.assertTrue(result[0][1].endswith( - '; Domain=.example.com; Path=/; SameSite=Lax')) + self.assertTrue( + result[0][1].endswith( + '; Domain=.example.com; Path=/; SameSite=Lax' + ) + ) def test_remember_explicit_domain(self): helper = self._makeOne('secret', domain='pyramid.bazinga') @@ -1073,30 +1224,42 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(len(result), 1) self.assertEqual(result[0][0], 'Set-Cookie') - self.assertTrue(result[0][1].endswith( - '; Domain=pyramid.bazinga; Path=/; SameSite=Lax')) + self.assertTrue( + result[0][1].endswith( + '; Domain=pyramid.bazinga; Path=/; SameSite=Lax' + ) + ) self.assertTrue(result[0][1].startswith('auth_tkt=')) def test_remember_domain_supercedes_parent_and_wild_domain(self): - helper = self._makeOne('secret', domain='pyramid.bazinga', - parent_domain=True, wild_domain=True) + helper = self._makeOne( + 'secret', + domain='pyramid.bazinga', + parent_domain=True, + wild_domain=True, + ) request = self._makeRequest() request.domain = 'www.example.com' result = helper.remember(request, 'other') self.assertEqual(len(result), 1) - self.assertTrue(result[0][1].endswith( - '; Domain=pyramid.bazinga; Path=/; SameSite=Lax')) + self.assertTrue( + result[0][1].endswith( + '; Domain=pyramid.bazinga; Path=/; SameSite=Lax' + ) + ) def test_remember_binary_userid(self): import base64 + helper = self._makeOne('secret') request = self._makeRequest() result = helper.remember(request, b'userid') values = self._parseHeaders(result) self.assertEqual(len(result), 3) val = self._cookieValue(values[0]) - self.assertEqual(val['userid'], - text_(base64.b64encode(b'userid').strip())) + self.assertEqual( + val['userid'], text_(base64.b64encode(b'userid').strip()) + ) self.assertEqual(val['user_data'], 'userid_type:b64str') def test_remember_int_userid(self): @@ -1111,6 +1274,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_remember_long_userid(self): from pyramid.compat import long + helper = self._makeOne('secret') request = self._makeRequest() result = helper.remember(request, long(1)) @@ -1122,6 +1286,7 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_remember_unicode_userid(self): import base64 + helper = self._makeOne('secret') request = self._makeRequest() userid = text_(b'\xc2\xa9', 'utf-8') @@ -1129,8 +1294,9 @@ class TestAuthTktCookieHelper(unittest.TestCase): values = self._parseHeaders(result) self.assertEqual(len(result), 3) val = self._cookieValue(values[0]) - self.assertEqual(val['userid'], - text_(base64.b64encode(userid.encode('utf-8')))) + self.assertEqual( + val['userid'], text_(base64.b64encode(userid.encode('utf-8'))) + ) self.assertEqual(val['user_data'], 'userid_type:b64unicode') def test_remember_insane_userid(self): @@ -1169,7 +1335,13 @@ class TestAuthTktCookieHelper(unittest.TestCase): def test_remember_str_max_age_invalid(self): helper = self._makeOne('secret') request = self._makeRequest() - self.assertRaises(ValueError, helper.remember, request, 'userid', max_age='invalid value') + self.assertRaises( + ValueError, + helper.remember, + request, + 'userid', + max_age='invalid value', + ) def test_remember_tokens(self): helper = self._makeOne('secret') @@ -1194,18 +1366,24 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result[0][0], 'Set-Cookie') cookieval = result[0][1] - self.assertTrue('SameSite=Strict' in - [x.strip() for x in cookieval.split(';')], cookieval) + self.assertTrue( + 'SameSite=Strict' in [x.strip() for x in cookieval.split(';')], + cookieval, + ) self.assertEqual(result[1][0], 'Set-Cookie') cookieval = result[1][1] - self.assertTrue('SameSite=Strict' in - [x.strip() for x in cookieval.split(';')], cookieval) + self.assertTrue( + 'SameSite=Strict' in [x.strip() for x in cookieval.split(';')], + cookieval, + ) self.assertEqual(result[2][0], 'Set-Cookie') cookieval = result[2][1] - self.assertTrue('SameSite=Strict' in - [x.strip() for x in cookieval.split(';')], cookieval) + self.assertTrue( + 'SameSite=Strict' in [x.strip() for x in cookieval.split(';')], + cookieval, + ) def test_remember_samesite_default(self): helper = self._makeOne('secret') @@ -1215,18 +1393,24 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual(result[0][0], 'Set-Cookie') cookieval = result[0][1] - self.assertTrue('SameSite=Lax' in - [x.strip() for x in cookieval.split(';')], cookieval) + self.assertTrue( + 'SameSite=Lax' in [x.strip() for x in cookieval.split(';')], + cookieval, + ) self.assertEqual(result[1][0], 'Set-Cookie') cookieval = result[1][1] - self.assertTrue('SameSite=Lax' in - [x.strip() for x in cookieval.split(';')], cookieval) + self.assertTrue( + 'SameSite=Lax' in [x.strip() for x in cookieval.split(';')], + cookieval, + ) self.assertEqual(result[2][0], 'Set-Cookie') cookieval = result[2][1] - self.assertTrue('SameSite=Lax' in - [x.strip() for x in cookieval.split(';')], cookieval) + self.assertTrue( + 'SameSite=Lax' in [x.strip() for x in cookieval.split(';')], + cookieval, + ) def test_remember_unicode_but_ascii_token(self): helper = self._makeOne('secret') @@ -1240,16 +1424,19 @@ class TestAuthTktCookieHelper(unittest.TestCase): helper = self._makeOne('secret') request = self._makeRequest() la = text_(b'La Pe\xc3\xb1a', 'utf-8') - self.assertRaises(ValueError, helper.remember, request, 'other', - tokens=(la,)) + self.assertRaises( + ValueError, helper.remember, request, 'other', tokens=(la,) + ) def test_remember_invalid_token_format(self): helper = self._makeOne('secret') request = self._makeRequest() - self.assertRaises(ValueError, helper.remember, request, 'other', - tokens=('foo bar',)) - self.assertRaises(ValueError, helper.remember, request, 'other', - tokens=('1bar',)) + self.assertRaises( + ValueError, helper.remember, request, 'other', tokens=('foo bar',) + ) + self.assertRaises( + ValueError, helper.remember, request, 'other', tokens=('1bar',) + ) def test_forget(self): helper = self._makeOne('secret') @@ -1261,26 +1448,28 @@ class TestAuthTktCookieHelper(unittest.TestCase): self.assertEqual( value, 'auth_tkt=; Max-Age=0; Path=/; ' - 'expires=Wed, 31-Dec-97 23:59:59 GMT; SameSite=Lax' - ) + 'expires=Wed, 31-Dec-97 23:59:59 GMT; SameSite=Lax', + ) name, value = headers[1] self.assertEqual(name, 'Set-Cookie') self.assertEqual( value, 'auth_tkt=; Domain=localhost; Max-Age=0; Path=/; ' - 'expires=Wed, 31-Dec-97 23:59:59 GMT; SameSite=Lax' - ) + 'expires=Wed, 31-Dec-97 23:59:59 GMT; SameSite=Lax', + ) name, value = headers[2] self.assertEqual(name, 'Set-Cookie') self.assertEqual( value, 'auth_tkt=; Domain=.localhost; Max-Age=0; Path=/; ' - 'expires=Wed, 31-Dec-97 23:59:59 GMT; SameSite=Lax' - ) + 'expires=Wed, 31-Dec-97 23:59:59 GMT; SameSite=Lax', + ) + class TestAuthTicket(unittest.TestCase): def _makeOne(self, *arg, **kw): from pyramid.authentication import AuthTicket + return AuthTicket(*arg, **kw) def test_ctor_with_tokens(self): @@ -1297,37 +1486,53 @@ class TestAuthTicket(unittest.TestCase): self.assertEqual(result, '126fd6224912187ee9ffa80e0b81420c') def test_digest_sha512(self): - ticket = self._makeOne('secret', 'userid', '0.0.0.0', - time=10, hashalg='sha512') + ticket = self._makeOne( + 'secret', 'userid', '0.0.0.0', time=10, hashalg='sha512' + ) result = ticket.digest() - self.assertEqual(result, '74770b2e0d5b1a54c2a466ec567a40f7d7823576aa49'\ - '3c65fc3445e9b44097f4a80410319ef8cb256a2e60b9'\ - 'c2002e48a9e33a3e8ee4379352c04ef96d2cb278') + self.assertEqual( + result, + '74770b2e0d5b1a54c2a466ec567a40f7d7823576aa49' + '3c65fc3445e9b44097f4a80410319ef8cb256a2e60b9' + 'c2002e48a9e33a3e8ee4379352c04ef96d2cb278', + ) def test_cookie_value(self): - ticket = self._makeOne('secret', 'userid', '0.0.0.0', time=10, - tokens=('a', 'b')) + ticket = self._makeOne( + 'secret', 'userid', '0.0.0.0', time=10, tokens=('a', 'b') + ) result = ticket.cookie_value() - self.assertEqual(result, - '66f9cc3e423dc57c91df696cf3d1f0d80000000auserid!a,b!') + self.assertEqual( + result, '66f9cc3e423dc57c91df696cf3d1f0d80000000auserid!a,b!' + ) def test_ipv4(self): - ticket = self._makeOne('secret', 'userid', '198.51.100.1', - time=10, hashalg='sha256') + ticket = self._makeOne( + 'secret', 'userid', '198.51.100.1', time=10, hashalg='sha256' + ) result = ticket.cookie_value() - self.assertEqual(result, 'b3e7156db4f8abde4439c4a6499a0668f9e7ffd7fa27b'\ - '798400ecdade8d76c530000000auserid!') + self.assertEqual( + result, + 'b3e7156db4f8abde4439c4a6499a0668f9e7ffd7fa27b' + '798400ecdade8d76c530000000auserid!', + ) def test_ipv6(self): - ticket = self._makeOne('secret', 'userid', '2001:db8::1', - time=10, hashalg='sha256') + ticket = self._makeOne( + 'secret', 'userid', '2001:db8::1', time=10, hashalg='sha256' + ) result = ticket.cookie_value() - self.assertEqual(result, 'd025b601a0f12ca6d008aa35ff3a22b7d8f3d1c1456c8'\ - '5becf8760cd7a2fa4910000000auserid!') + self.assertEqual( + result, + 'd025b601a0f12ca6d008aa35ff3a22b7d8f3d1c1456c8' + '5becf8760cd7a2fa4910000000auserid!', + ) + class TestBadTicket(unittest.TestCase): def _makeOne(self, msg, expected=None): from pyramid.authentication import BadTicket + return BadTicket(msg, expected) def test_it(self): @@ -1335,14 +1540,19 @@ class TestBadTicket(unittest.TestCase): self.assertEqual(exc.expected, True) self.assertTrue(isinstance(exc, Exception)) + class Test_parse_ticket(unittest.TestCase): def _callFUT(self, secret, ticket, ip, hashalg='md5'): from pyramid.authentication import parse_ticket + return parse_ticket(secret, ticket, ip, hashalg) def _assertRaisesBadTicket(self, secret, ticket, ip, hashalg='md5'): from pyramid.authentication import BadTicket - self.assertRaises(BadTicket,self._callFUT, secret, ticket, ip, hashalg) + + self.assertRaises( + BadTicket, self._callFUT, secret, ticket, ip, hashalg + ) def test_bad_timestamp(self): ticket = 'x' * 64 @@ -1362,27 +1572,35 @@ class Test_parse_ticket(unittest.TestCase): self.assertEqual(result, (10, 'userid', ['a', 'b'], '')) def test_correct_with_user_data_sha512(self): - ticket = text_('7d947cdef99bad55f8e3382a8bd089bb9dd0547f7925b7d189adc1' - '160cab0ec0e6888faa41eba641a18522b26f19109f3ffafb769767' - 'ba8a26d02aaeae56599a0000000auserid!a,b!') + ticket = text_( + '7d947cdef99bad55f8e3382a8bd089bb9dd0547f7925b7d189adc1' + '160cab0ec0e6888faa41eba641a18522b26f19109f3ffafb769767' + 'ba8a26d02aaeae56599a0000000auserid!a,b!' + ) result = self._callFUT('secret', ticket, '0.0.0.0', 'sha512') self.assertEqual(result, (10, 'userid', ['a', 'b'], '')) def test_ipv4(self): - ticket = text_('b3e7156db4f8abde4439c4a6499a0668f9e7ffd7fa27b798400ecd' - 'ade8d76c530000000auserid!') + ticket = text_( + 'b3e7156db4f8abde4439c4a6499a0668f9e7ffd7fa27b798400ecd' + 'ade8d76c530000000auserid!' + ) result = self._callFUT('secret', ticket, '198.51.100.1', 'sha256') self.assertEqual(result, (10, 'userid', [''], '')) def test_ipv6(self): - ticket = text_('d025b601a0f12ca6d008aa35ff3a22b7d8f3d1c1456c85becf8760' - 'cd7a2fa4910000000auserid!') + ticket = text_( + 'd025b601a0f12ca6d008aa35ff3a22b7d8f3d1c1456c85becf8760' + 'cd7a2fa4910000000auserid!' + ) result = self._callFUT('secret', ticket, '2001:db8::1', 'sha256') self.assertEqual(result, (10, 'userid', [''], '')) + class TestSessionAuthenticationPolicy(unittest.TestCase): def _getTargetClass(self): from pyramid.authentication import SessionAuthenticationPolicy + return SessionAuthenticationPolicy def _makeOne(self, callback=None, prefix=''): @@ -1391,11 +1609,13 @@ class TestSessionAuthenticationPolicy(unittest.TestCase): def test_class_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyClass from pyramid.interfaces import IAuthenticationPolicy + verifyClass(IAuthenticationPolicy, self._getTargetClass()) def test_instance_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyObject from pyramid.interfaces import IAuthenticationPolicy + verifyObject(IAuthenticationPolicy, self._makeOne()) def test_unauthenticated_userid_returns_None(self): @@ -1404,7 +1624,7 @@ class TestSessionAuthenticationPolicy(unittest.TestCase): self.assertEqual(policy.unauthenticated_userid(request), None) def test_unauthenticated_userid(self): - request = DummyRequest(session={'userid':'fred'}) + request = DummyRequest(session={'userid': 'fred'}) policy = self._makeOne() self.assertEqual(policy.unauthenticated_userid(request), 'fred') @@ -1414,42 +1634,55 @@ class TestSessionAuthenticationPolicy(unittest.TestCase): self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid_callback_returns_None(self): - request = DummyRequest(session={'userid':'fred'}) + request = DummyRequest(session={'userid': 'fred'}) + def callback(userid, request): return None + policy = self._makeOne(callback) self.assertEqual(policy.authenticated_userid(request), None) def test_authenticated_userid(self): - request = DummyRequest(session={'userid':'fred'}) + request = DummyRequest(session={'userid': 'fred'}) + def callback(userid, request): return True + policy = self._makeOne(callback) self.assertEqual(policy.authenticated_userid(request), 'fred') def test_effective_principals_no_identity(self): from pyramid.security import Everyone + request = DummyRequest() policy = self._makeOne() self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals_callback_returns_None(self): from pyramid.security import Everyone - request = DummyRequest(session={'userid':'fred'}) + + request = DummyRequest(session={'userid': 'fred'}) + def callback(userid, request): return None + policy = self._makeOne(callback) self.assertEqual(policy.effective_principals(request), [Everyone]) def test_effective_principals(self): from pyramid.security import Everyone from pyramid.security import Authenticated - request = DummyRequest(session={'userid':'fred'}) + + request = DummyRequest(session={'userid': 'fred'}) + def callback(userid, request): return ['group.foo'] + policy = self._makeOne(callback) - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred', 'group.foo']) + self.assertEqual( + policy.effective_principals(request), + [Everyone, Authenticated, 'fred', 'group.foo'], + ) def test_remember(self): request = DummyRequest() @@ -1459,7 +1692,7 @@ class TestSessionAuthenticationPolicy(unittest.TestCase): self.assertEqual(result, []) def test_forget(self): - request = DummyRequest(session={'userid':'fred'}) + request = DummyRequest(session={'userid': 'fred'}) policy = self._makeOne() result = policy.forget(request) self.assertEqual(request.session.get('userid'), None) @@ -1472,9 +1705,11 @@ class TestSessionAuthenticationPolicy(unittest.TestCase): self.assertEqual(request.session.get('userid'), None) self.assertEqual(result, []) + class TestBasicAuthAuthenticationPolicy(unittest.TestCase): def _getTargetClass(self): from pyramid.authentication import BasicAuthAuthenticationPolicy as cls + return cls def _makeOne(self, check): @@ -1483,13 +1718,16 @@ class TestBasicAuthAuthenticationPolicy(unittest.TestCase): def test_class_implements_IAuthenticationPolicy(self): from zope.interface.verify import verifyClass from pyramid.interfaces import IAuthenticationPolicy + verifyClass(IAuthenticationPolicy, self._getTargetClass()) def test_unauthenticated_userid(self): import base64 + request = testing.DummyRequest() request.headers['Authorization'] = 'Basic %s' % base64.b64encode( - bytes_('chrisr:password')).decode('ascii') + bytes_('chrisr:password') + ).decode('ascii') policy = self._makeOne(None) self.assertEqual(policy.unauthenticated_userid(request), 'chrisr') @@ -1518,45 +1756,65 @@ class TestBasicAuthAuthenticationPolicy(unittest.TestCase): def test_authenticated_userid(self): import base64 + request = testing.DummyRequest() request.headers['Authorization'] = 'Basic %s' % base64.b64encode( - bytes_('chrisr:password')).decode('ascii') + bytes_('chrisr:password') + ).decode('ascii') + def check(username, password, request): return [] + policy = self._makeOne(check) self.assertEqual(policy.authenticated_userid(request), 'chrisr') def test_authenticated_userid_utf8(self): import base64 + request = testing.DummyRequest() - inputs = (b'm\xc3\xb6rk\xc3\xb6:' - b'm\xc3\xb6rk\xc3\xb6password').decode('utf-8') + inputs = ( + b'm\xc3\xb6rk\xc3\xb6:' b'm\xc3\xb6rk\xc3\xb6password' + ).decode('utf-8') request.headers['Authorization'] = 'Basic %s' % ( - base64.b64encode(inputs.encode('utf-8')).decode('latin-1')) + base64.b64encode(inputs.encode('utf-8')).decode('latin-1') + ) + def check(username, password, request): return [] + policy = self._makeOne(check) - self.assertEqual(policy.authenticated_userid(request), - b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8')) + self.assertEqual( + policy.authenticated_userid(request), + b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8'), + ) def test_authenticated_userid_latin1(self): import base64 + request = testing.DummyRequest() - inputs = (b'm\xc3\xb6rk\xc3\xb6:' - b'm\xc3\xb6rk\xc3\xb6password').decode('utf-8') + inputs = ( + b'm\xc3\xb6rk\xc3\xb6:' b'm\xc3\xb6rk\xc3\xb6password' + ).decode('utf-8') request.headers['Authorization'] = 'Basic %s' % ( - base64.b64encode(inputs.encode('latin-1')).decode('latin-1')) + base64.b64encode(inputs.encode('latin-1')).decode('latin-1') + ) + def check(username, password, request): return [] + policy = self._makeOne(check) - self.assertEqual(policy.authenticated_userid(request), - b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8')) + self.assertEqual( + policy.authenticated_userid(request), + b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8'), + ) def test_unauthenticated_userid_invalid_payload(self): import base64 + request = testing.DummyRequest() request.headers['Authorization'] = 'Basic %s' % base64.b64encode( - bytes_('chrisrpassword')).decode('ascii') + bytes_('chrisrpassword') + ).decode('ascii') policy = self._makeOne(None) self.assertEqual(policy.unauthenticated_userid(request), None) @@ -1566,13 +1824,16 @@ class TestBasicAuthAuthenticationPolicy(unittest.TestCase): def test_forget(self): policy = self._makeOne(None) - self.assertEqual(policy.forget(None), [ - ('WWW-Authenticate', 'Basic realm="SomeRealm"')]) + self.assertEqual( + policy.forget(None), + [('WWW-Authenticate', 'Basic realm="SomeRealm"')], + ) class TestExtractHTTPBasicCredentials(unittest.TestCase): def _get_func(self): from pyramid.authentication import extract_http_basic_credentials + return extract_http_basic_credentials def test_no_auth_header(self): @@ -1583,17 +1844,21 @@ class TestExtractHTTPBasicCredentials(unittest.TestCase): def test_invalid_payload(self): import base64 + request = testing.DummyRequest() request.headers['Authorization'] = 'Basic %s' % base64.b64encode( - bytes_('chrisrpassword')).decode('ascii') + bytes_('chrisrpassword') + ).decode('ascii') fn = self._get_func() self.assertIsNone(fn(request)) def test_not_a_basic_auth_scheme(self): import base64 + request = testing.DummyRequest() request.headers['Authorization'] = 'OtherScheme %s' % base64.b64encode( - bytes_('chrisr:password')).decode('ascii') + bytes_('chrisr:password') + ).decode('ascii') fn = self._get_func() self.assertIsNone(fn(request)) @@ -1605,44 +1870,60 @@ class TestExtractHTTPBasicCredentials(unittest.TestCase): def test_latin1_payload(self): import base64 + request = testing.DummyRequest() - inputs = (b'm\xc3\xb6rk\xc3\xb6:' - b'm\xc3\xb6rk\xc3\xb6password').decode('utf-8') + inputs = ( + b'm\xc3\xb6rk\xc3\xb6:' b'm\xc3\xb6rk\xc3\xb6password' + ).decode('utf-8') request.headers['Authorization'] = 'Basic %s' % ( - base64.b64encode(inputs.encode('latin-1')).decode('latin-1')) + base64.b64encode(inputs.encode('latin-1')).decode('latin-1') + ) fn = self._get_func() - self.assertEqual(fn(request), ( - b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8'), - b'm\xc3\xb6rk\xc3\xb6password'.decode('utf-8') - )) + self.assertEqual( + fn(request), + ( + b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8'), + b'm\xc3\xb6rk\xc3\xb6password'.decode('utf-8'), + ), + ) def test_utf8_payload(self): import base64 + request = testing.DummyRequest() - inputs = (b'm\xc3\xb6rk\xc3\xb6:' - b'm\xc3\xb6rk\xc3\xb6password').decode('utf-8') + inputs = ( + b'm\xc3\xb6rk\xc3\xb6:' b'm\xc3\xb6rk\xc3\xb6password' + ).decode('utf-8') request.headers['Authorization'] = 'Basic %s' % ( - base64.b64encode(inputs.encode('utf-8')).decode('latin-1')) + base64.b64encode(inputs.encode('utf-8')).decode('latin-1') + ) fn = self._get_func() - self.assertEqual(fn(request), ( - b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8'), - b'm\xc3\xb6rk\xc3\xb6password'.decode('utf-8') - )) + self.assertEqual( + fn(request), + ( + b'm\xc3\xb6rk\xc3\xb6'.decode('utf-8'), + b'm\xc3\xb6rk\xc3\xb6password'.decode('utf-8'), + ), + ) def test_namedtuple_return(self): import base64 + request = testing.DummyRequest() request.headers['Authorization'] = 'Basic %s' % base64.b64encode( - bytes_('chrisr:pass')).decode('ascii') + bytes_('chrisr:pass') + ).decode('ascii') fn = self._get_func() result = fn(request) self.assertEqual(result.username, 'chrisr') self.assertEqual(result.password, 'pass') - + + class DummyContext: pass + class DummyCookies(object): def __init__(self, cookie): self.cookie = cookie @@ -1650,8 +1931,10 @@ class DummyCookies(object): def get(self, name): return self.cookie + class DummyRequest: domain = 'localhost' + def __init__(self, environ=None, session=None, registry=None, cookie=None): self.environ = environ or {} self.session = session or {} @@ -1662,6 +1945,7 @@ class DummyRequest: def add_response_callback(self, callback): self.callbacks.append(callback) + class DummyWhoPlugin: def remember(self, environ, identity): return environ, identity @@ -1669,6 +1953,7 @@ class DummyWhoPlugin: def forget(self, environ, identity): return environ, identity + class DummyCookieHelper: def __init__(self, result): self.result = result @@ -1683,15 +1968,24 @@ class DummyCookieHelper: def forget(self, *arg): return [] + class DummyAuthTktModule(object): - def __init__(self, timestamp=0, userid='userid', tokens=(), user_data='', - parse_raise=False, hashalg="md5"): + def __init__( + self, + timestamp=0, + userid='userid', + tokens=(), + user_data='', + parse_raise=False, + hashalg="md5", + ): self.timestamp = timestamp self.userid = userid self.tokens = tokens self.user_data = user_data self.parse_raise = parse_raise self.hashalg = hashalg + def parse_ticket(secret, value, remote_addr, hashalg): self.secret = secret self.value = value @@ -1699,6 +1993,7 @@ class DummyAuthTktModule(object): if self.parse_raise: raise self.BadTicket() return self.timestamp, self.userid, self.tokens, self.user_data + self.parse_ticket = parse_ticket class AuthTicket(object): @@ -1710,10 +2005,10 @@ class DummyAuthTktModule(object): def cookie_value(self): result = { - 'secret':self.secret, - 'userid':self.userid, - 'remote_addr':self.remote_addr - } + 'secret': self.secret, + 'userid': self.userid, + 'remote_addr': self.remote_addr, + } result.update(self.kw) tokens = result.pop('tokens', None) if tokens is not None: @@ -1724,15 +2019,16 @@ class DummyAuthTktModule(object): for k, v in items: if isinstance(v, bytes): v = text_(v) - new_items.append((k,v)) - result = '/'.join(['%s=%s' % (k, v) for k,v in new_items ]) + new_items.append((k, v)) + result = '/'.join(['%s=%s' % (k, v) for k, v in new_items]) return result + self.AuthTicket = AuthTicket class BadTicket(Exception): pass + class DummyResponse: def __init__(self): self.headerlist = [] - |
