add at least one test
This commit is contained in:
@@ -435,17 +435,6 @@ class Swift3Middleware(object):
|
|||||||
return BucketController, d
|
return BucketController, d
|
||||||
return ServiceController, d
|
return ServiceController, d
|
||||||
|
|
||||||
def get_account_info(self, env, req):
|
|
||||||
try:
|
|
||||||
account, user, _junk = \
|
|
||||||
req.headers['Authorization'].split(' ')[-1].split(':')
|
|
||||||
except Exception:
|
|
||||||
return None, None
|
|
||||||
|
|
||||||
h = canonical_string(req)
|
|
||||||
token = base64.urlsafe_b64encode(h)
|
|
||||||
return '%s:%s' % (account, user), token
|
|
||||||
|
|
||||||
def __call__(self, env, start_response):
|
def __call__(self, env, start_response):
|
||||||
req = Request(env)
|
req = Request(env)
|
||||||
|
|
||||||
@@ -459,17 +448,22 @@ class Swift3Middleware(object):
|
|||||||
|
|
||||||
if not 'Authorization' in req.headers:
|
if not 'Authorization' in req.headers:
|
||||||
return self.app(env, start_response)
|
return self.app(env, start_response)
|
||||||
|
|
||||||
|
try:
|
||||||
|
account, signature = \
|
||||||
|
req.headers['Authorization'].split(' ')[-1].rsplit(':', 1)
|
||||||
|
except Exception:
|
||||||
|
return get_err_response('InvalidArgument')(env, start_response)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
controller, path_parts = self.get_controller(req.path)
|
controller, path_parts = self.get_controller(req.path)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return get_err_response('InvalidURI')(env, start_response)
|
return get_err_response('InvalidURI')(env, start_response)
|
||||||
|
|
||||||
account_name, token = self.get_account_info(env, req)
|
token = base64.urlsafe_b64encode(canonical_string(req))
|
||||||
if not account_name:
|
|
||||||
return get_err_response('InvalidArgument')(env, start_response)
|
controller = controller(env, self.app, account, token, **path_parts)
|
||||||
|
|
||||||
controller = controller(env, self.app, account_name, token,
|
|
||||||
**path_parts)
|
|
||||||
if hasattr(controller, req.method):
|
if hasattr(controller, req.method):
|
||||||
res = getattr(controller, req.method)(env, start_response)
|
res = getattr(controller, req.method)(env, start_response)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -594,5 +594,25 @@ class TestSwift3(unittest.TestCase):
|
|||||||
self.assertEquals(swift3.canonical_string(req2),
|
self.assertEquals(swift3.canonical_string(req2),
|
||||||
swift3.canonical_string(req3))
|
swift3.canonical_string(req3))
|
||||||
|
|
||||||
|
def test_signed_urls(self):
|
||||||
|
class FakeApp(object):
|
||||||
|
def __call__(self, env, start_response):
|
||||||
|
self.req = Request(env)
|
||||||
|
start_response('200 OK')
|
||||||
|
start_response([])
|
||||||
|
app = FakeApp()
|
||||||
|
local_app = swift3.filter_factory({})(app)
|
||||||
|
req = Request.blank('/bucket/object?Signature=X&Expires=Y&'
|
||||||
|
'AWSAccessKeyId=Z', environ={'REQUEST_METHOD': 'PUT'},
|
||||||
|
headers={'Authorization': 'AWS test:tester:hmac',
|
||||||
|
'Content-MD5': 'ffoHqOWd280dyE1MT4KuoQ=='})
|
||||||
|
req.date = datetime.now()
|
||||||
|
print req.GET
|
||||||
|
req.content_type = 'text/plain'
|
||||||
|
resp = local_app(req.environ, lambda *args: None)
|
||||||
|
print ''.join(resp)
|
||||||
|
self.assertEquals(app.req.headers['Authorization'], 'AWS Z:X')
|
||||||
|
self.assertEquals(app.req.headers['Date'], 'Y')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user