make handle_request return callable
This simplifies code a bit. Change-Id: I553174661f3a70e3d89fb2336832b25111052a0b
This commit is contained in:
parent
bb16da6aa2
commit
a4a6d397dc
@ -383,7 +383,7 @@ class ServiceController(WSGIContext):
|
|||||||
env['HTTP_X_AUTH_TOKEN'] = token
|
env['HTTP_X_AUTH_TOKEN'] = token
|
||||||
env['PATH_INFO'] = '/v1/%s' % account_name
|
env['PATH_INFO'] = '/v1/%s' % account_name
|
||||||
|
|
||||||
def GET(self, env, start_response):
|
def GET(self, env):
|
||||||
"""
|
"""
|
||||||
Handle GET Service request
|
Handle GET Service request
|
||||||
"""
|
"""
|
||||||
@ -425,7 +425,7 @@ class BucketController(WSGIContext):
|
|||||||
env['HTTP_X_AUTH_TOKEN'] = token
|
env['HTTP_X_AUTH_TOKEN'] = token
|
||||||
env['PATH_INFO'] = '/v1/%s/%s' % (account_name, container_name)
|
env['PATH_INFO'] = '/v1/%s/%s' % (account_name, container_name)
|
||||||
|
|
||||||
def HEAD(self, env, start_response):
|
def HEAD(self, env):
|
||||||
"""
|
"""
|
||||||
Handle HEAD Bucket (Get Metadata) request
|
Handle HEAD Bucket (Get Metadata) request
|
||||||
"""
|
"""
|
||||||
@ -445,7 +445,7 @@ class BucketController(WSGIContext):
|
|||||||
|
|
||||||
return Response(status=status, headers=headers, app_iter=body_iter)
|
return Response(status=status, headers=headers, app_iter=body_iter)
|
||||||
|
|
||||||
def GET(self, env, start_response):
|
def GET(self, env):
|
||||||
"""
|
"""
|
||||||
Handle GET Bucket (List Objects) request
|
Handle GET Bucket (List Objects) request
|
||||||
"""
|
"""
|
||||||
@ -546,7 +546,7 @@ class BucketController(WSGIContext):
|
|||||||
for i in objects[:max_keys] if 'subdir' in i])))
|
for i in objects[:max_keys] if 'subdir' in i])))
|
||||||
return Response(body=body, content_type='application/xml')
|
return Response(body=body, content_type='application/xml')
|
||||||
|
|
||||||
def PUT(self, env, start_response):
|
def PUT(self, env):
|
||||||
"""
|
"""
|
||||||
Handle PUT Bucket request
|
Handle PUT Bucket request
|
||||||
"""
|
"""
|
||||||
@ -607,7 +607,7 @@ class BucketController(WSGIContext):
|
|||||||
resp.status = HTTP_OK
|
resp.status = HTTP_OK
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
def DELETE(self, env, start_response):
|
def DELETE(self, env):
|
||||||
"""
|
"""
|
||||||
Handle DELETE Bucket request
|
Handle DELETE Bucket request
|
||||||
"""
|
"""
|
||||||
@ -682,7 +682,7 @@ class BucketController(WSGIContext):
|
|||||||
body += '</DeleteResult>\r\n'
|
body += '</DeleteResult>\r\n'
|
||||||
return Response(status=HTTP_OK, body=body)
|
return Response(status=HTTP_OK, body=body)
|
||||||
|
|
||||||
def POST(self, env, start_response):
|
def POST(self, env):
|
||||||
"""
|
"""
|
||||||
Handle POST Bucket (Delete/Upload Multiple Objects) request
|
Handle POST Bucket (Delete/Upload Multiple Objects) request
|
||||||
"""
|
"""
|
||||||
@ -718,7 +718,7 @@ class ObjectController(WSGIContext):
|
|||||||
env['PATH_INFO'] = '/v1/%s/%s/%s' % (account_name, container_name,
|
env['PATH_INFO'] = '/v1/%s/%s/%s' % (account_name, container_name,
|
||||||
object_name)
|
object_name)
|
||||||
|
|
||||||
def GETorHEAD(self, env, start_response):
|
def GETorHEAD(self, env):
|
||||||
if 'QUERY_STRING' in env:
|
if 'QUERY_STRING' in env:
|
||||||
args = dict(urlparse.parse_qsl(env['QUERY_STRING'], 1))
|
args = dict(urlparse.parse_qsl(env['QUERY_STRING'], 1))
|
||||||
else:
|
else:
|
||||||
@ -764,19 +764,19 @@ class ObjectController(WSGIContext):
|
|||||||
else:
|
else:
|
||||||
return get_err_response('InvalidURI')
|
return get_err_response('InvalidURI')
|
||||||
|
|
||||||
def HEAD(self, env, start_response):
|
def HEAD(self, env):
|
||||||
"""
|
"""
|
||||||
Handle HEAD Object request
|
Handle HEAD Object request
|
||||||
"""
|
"""
|
||||||
return self.GETorHEAD(env, start_response)
|
return self.GETorHEAD(env)
|
||||||
|
|
||||||
def GET(self, env, start_response):
|
def GET(self, env):
|
||||||
"""
|
"""
|
||||||
Handle GET Object request
|
Handle GET Object request
|
||||||
"""
|
"""
|
||||||
return self.GETorHEAD(env, start_response)
|
return self.GETorHEAD(env)
|
||||||
|
|
||||||
def PUT(self, env, start_response):
|
def PUT(self, env):
|
||||||
"""
|
"""
|
||||||
Handle PUT Object and PUT Object (Copy) request
|
Handle PUT Object and PUT Object (Copy) request
|
||||||
"""
|
"""
|
||||||
@ -819,10 +819,10 @@ class ObjectController(WSGIContext):
|
|||||||
|
|
||||||
return Response(status=200, etag=self._response_header_value('etag'))
|
return Response(status=200, etag=self._response_header_value('etag'))
|
||||||
|
|
||||||
def POST(self, env, start_response):
|
def POST(self, env):
|
||||||
return get_err_response('AccessDenied')
|
return get_err_response('AccessDenied')
|
||||||
|
|
||||||
def DELETE(self, env, start_response):
|
def DELETE(self, env):
|
||||||
"""
|
"""
|
||||||
Handle DELETE Object request
|
Handle DELETE Object request
|
||||||
"""
|
"""
|
||||||
@ -875,12 +875,13 @@ class Swift3Middleware(object):
|
|||||||
|
|
||||||
def __call__(self, env, start_response):
|
def __call__(self, env, start_response):
|
||||||
try:
|
try:
|
||||||
return self.handle_request(env, start_response)
|
resp = self.handle_request(env)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.logger.exception(e)
|
self.logger.exception(e)
|
||||||
return get_err_response('ServiceUnavailable')(env, start_response)
|
resp = get_err_response('ServiceUnavailable')
|
||||||
|
return resp(env, start_response)
|
||||||
|
|
||||||
def handle_request(self, env, start_response):
|
def handle_request(self, env):
|
||||||
req = Request(env)
|
req = Request(env)
|
||||||
self.logger.debug('Calling Swift3 Middleware')
|
self.logger.debug('Calling Swift3 Middleware')
|
||||||
self.logger.debug(req.__dict__)
|
self.logger.debug(req.__dict__)
|
||||||
@ -891,28 +892,28 @@ class Swift3Middleware(object):
|
|||||||
req.headers['Authorization'] = \
|
req.headers['Authorization'] = \
|
||||||
'AWS %(AWSAccessKeyId)s:%(Signature)s' % req.params
|
'AWS %(AWSAccessKeyId)s:%(Signature)s' % req.params
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return get_err_response('InvalidArgument')(env, start_response)
|
return get_err_response('InvalidArgument')
|
||||||
|
|
||||||
if 'Authorization' not in req.headers:
|
if 'Authorization' not in req.headers:
|
||||||
return self.app(env, start_response)
|
return self.app
|
||||||
|
|
||||||
try:
|
try:
|
||||||
keyword, info = req.headers['Authorization'].split(' ')
|
keyword, info = req.headers['Authorization'].split(' ')
|
||||||
except Exception:
|
except Exception:
|
||||||
return get_err_response('AccessDenied')(env, start_response)
|
return get_err_response('AccessDenied')
|
||||||
|
|
||||||
if keyword != 'AWS':
|
if keyword != 'AWS':
|
||||||
return get_err_response('AccessDenied')(env, start_response)
|
return get_err_response('AccessDenied')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
account, signature = info.rsplit(':', 1)
|
account, signature = info.rsplit(':', 1)
|
||||||
except Exception:
|
except Exception:
|
||||||
return get_err_response('InvalidArgument')(env, start_response)
|
return get_err_response('InvalidArgument')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
controller, path_parts = self.get_controller(env, req.path)
|
controller, path_parts = self.get_controller(env, req.path)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return get_err_response('InvalidURI')(env, start_response)
|
return get_err_response('InvalidURI')
|
||||||
|
|
||||||
if 'Date' in req.headers:
|
if 'Date' in req.headers:
|
||||||
date = email.utils.parsedate(req.headers['Date'])
|
date = email.utils.parsedate(req.headers['Date'])
|
||||||
@ -923,7 +924,7 @@ class Swift3Middleware(object):
|
|||||||
|
|
||||||
date = datetime.datetime.utcnow().timetuple()
|
date = datetime.datetime.utcnow().timetuple()
|
||||||
elif date is None:
|
elif date is None:
|
||||||
return get_err_response('AccessDenied')(env, start_response)
|
return get_err_response('AccessDenied')
|
||||||
|
|
||||||
epoch = datetime.datetime(1970, 1, 1, 0, 0, 0, 0)
|
epoch = datetime.datetime(1970, 1, 1, 0, 0, 0, 0)
|
||||||
delta = datetime.timedelta(seconds=60 * 5)
|
delta = datetime.timedelta(seconds=60 * 5)
|
||||||
@ -931,19 +932,17 @@ class Swift3Middleware(object):
|
|||||||
d1 = datetime.datetime(*date[0:6])
|
d1 = datetime.datetime(*date[0:6])
|
||||||
now = datetime.datetime.utcnow()
|
now = datetime.datetime.utcnow()
|
||||||
if d1 < epoch:
|
if d1 < epoch:
|
||||||
return get_err_response('AccessDenied')(env, start_response)
|
return get_err_response('AccessDenied')
|
||||||
|
|
||||||
# If the standard date is too far ahead or behind, it is an error
|
# If the standard date is too far ahead or behind, it is an error
|
||||||
if abs(d1 - now) > delta:
|
if abs(d1 - now) > delta:
|
||||||
return get_err_response('RequestTimeTooSkewed')(env,
|
return get_err_response('RequestTimeTooSkewed')
|
||||||
start_response)
|
|
||||||
|
|
||||||
# If there was an expiration date in the parameters, check it also
|
# If there was an expiration date in the parameters, check it also
|
||||||
if expdate:
|
if expdate:
|
||||||
ex = datetime.datetime(*expdate[0:6])
|
ex = datetime.datetime(*expdate[0:6])
|
||||||
if (now > ex and (now - ex) > delta):
|
if (now > ex and (now - ex) > delta):
|
||||||
return get_err_response('RequestTimeTooSkewed')(
|
return get_err_response('RequestTimeTooSkewed')
|
||||||
env, start_response)
|
|
||||||
|
|
||||||
token = base64.urlsafe_b64encode(canonical_string(req))
|
token = base64.urlsafe_b64encode(canonical_string(req))
|
||||||
|
|
||||||
@ -951,11 +950,11 @@ class Swift3Middleware(object):
|
|||||||
**path_parts)
|
**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)
|
||||||
else:
|
else:
|
||||||
return get_err_response('MethodNotAllowed')(env, start_response)
|
return get_err_response('MethodNotAllowed')
|
||||||
|
|
||||||
return res(env, start_response)
|
return res
|
||||||
|
|
||||||
|
|
||||||
def filter_factory(global_conf, **local_conf):
|
def filter_factory(global_conf, **local_conf):
|
||||||
|
Loading…
Reference in New Issue
Block a user