Added allow_overrides capability for tempurl/fo...
Added allow_overrides capability for tempurl/formpost type middleware. Fixes #26
This commit is contained in:
parent
dfaf1e2317
commit
09590624ea
@ -50,6 +50,11 @@ use = egg:swauth#swauth
|
|||||||
# auth_type = plaintext
|
# auth_type = plaintext
|
||||||
# Used if the auth_type is sha1 or another method that can make use of a salt.
|
# Used if the auth_type is sha1 or another method that can make use of a salt.
|
||||||
# auth_type_salt = swauthsalt
|
# auth_type_salt = swauthsalt
|
||||||
|
# This allows middleware higher in the WSGI pipeline to override auth
|
||||||
|
# processing, useful for middleware such as tempurl and formpost. If you know
|
||||||
|
# you're not going to use such middleware and you want a bit of extra security,
|
||||||
|
# you can set this to false.
|
||||||
|
# allow_overrides = true
|
||||||
# Highly recommended to change this. If you comment this out, the Swauth
|
# Highly recommended to change this. If you comment this out, the Swauth
|
||||||
# administration features will be disabled for this proxy.
|
# administration features will be disabled for this proxy.
|
||||||
super_admin_key = swauthkey
|
super_admin_key = swauthkey
|
||||||
|
@ -155,6 +155,8 @@ class Swauth(object):
|
|||||||
raise Exception('Invalid auth_type in config file: %s'
|
raise Exception('Invalid auth_type in config file: %s'
|
||||||
% self.auth_type)
|
% self.auth_type)
|
||||||
self.auth_encoder.salt = conf.get('auth_type_salt', 'swauthsalt')
|
self.auth_encoder.salt = conf.get('auth_type_salt', 'swauthsalt')
|
||||||
|
self.allow_overrides = \
|
||||||
|
conf.get('allow_overrides', 't').lower() in TRUE_VALUES
|
||||||
|
|
||||||
def __call__(self, env, start_response):
|
def __call__(self, env, start_response):
|
||||||
"""
|
"""
|
||||||
@ -176,6 +178,8 @@ class Swauth(object):
|
|||||||
will be routed through the internal auth request handler (self.handle).
|
will be routed through the internal auth request handler (self.handle).
|
||||||
This is to handle creating users, accounts, granting tokens, etc.
|
This is to handle creating users, accounts, granting tokens, etc.
|
||||||
"""
|
"""
|
||||||
|
if self.allow_overrides and env.get('swift.authorize_override', False):
|
||||||
|
return self.app(env, start_response)
|
||||||
if 'HTTP_X_CF_TRANS_ID' not in env:
|
if 'HTTP_X_CF_TRANS_ID' not in env:
|
||||||
env['HTTP_X_CF_TRANS_ID'] = 'tx' + str(uuid4())
|
env['HTTP_X_CF_TRANS_ID'] = 'tx' + str(uuid4())
|
||||||
if not self.swauth_remote:
|
if not self.swauth_remote:
|
||||||
|
@ -3462,6 +3462,37 @@ class TestAuth(unittest.TestCase):
|
|||||||
resp = req.get_response(self.test_auth)
|
resp = req.get_response(self.test_auth)
|
||||||
self.assertEquals(resp.status_int, 204)
|
self.assertEquals(resp.status_int, 204)
|
||||||
|
|
||||||
|
def _make_request(self, path, **kwargs):
|
||||||
|
req = Request.blank(path, **kwargs)
|
||||||
|
req.environ['swift.cache'] = FakeMemcache()
|
||||||
|
return req
|
||||||
|
|
||||||
|
def test_override_asked_for_but_not_allowed(self):
|
||||||
|
self.test_auth = \
|
||||||
|
auth.filter_factory({'allow_overrides': 'false'})(FakeApp())
|
||||||
|
req = self._make_request('/v1/AUTH_account',
|
||||||
|
environ={'swift.authorize_override': True})
|
||||||
|
resp = req.get_response(self.test_auth)
|
||||||
|
self.assertEquals(resp.status_int, 401)
|
||||||
|
self.assertEquals(resp.environ['swift.authorize'],
|
||||||
|
self.test_auth.authorize)
|
||||||
|
|
||||||
|
def test_override_asked_for_and_allowed(self):
|
||||||
|
self.test_auth = \
|
||||||
|
auth.filter_factory({'allow_overrides': 'true'})(FakeApp())
|
||||||
|
req = self._make_request('/v1/AUTH_account',
|
||||||
|
environ={'swift.authorize_override': True})
|
||||||
|
resp = req.get_response(self.test_auth)
|
||||||
|
self.assertEquals(resp.status_int, 404)
|
||||||
|
self.assertTrue('swift.authorize' not in resp.environ)
|
||||||
|
|
||||||
|
def test_override_default_allowed(self):
|
||||||
|
req = self._make_request('/v1/AUTH_account',
|
||||||
|
environ={'swift.authorize_override': True})
|
||||||
|
resp = req.get_response(self.test_auth)
|
||||||
|
self.assertEquals(resp.status_int, 404)
|
||||||
|
self.assertTrue('swift.authorize' not in resp.environ)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user