438
435
return BucketController, d
439
436
return ServiceController, d
441
def get_account_info(self, env, req):
443
account, user, _junk = \
444
req.headers['Authorization'].split(' ')[-1].split(':')
448
h = canonical_string(req)
449
token = base64.urlsafe_b64encode(h)
450
return '%s:%s' % (account, user), token
452
438
def __call__(self, env, start_response):
453
439
req = Request(env)
454
if not'Authorization' in req.headers:
441
if 'AWSAccessKeyId' in req.GET:
443
req.headers['Date'] = req.GET['Expires']
444
req.headers['Authorization'] = \
445
'AWS %(AWSAccessKeyId)s:%(Signature)s' % req.GET
447
return get_err_response('InvalidArgument')(env, start_response)
449
if not 'Authorization' in req.headers:
455
450
return self.app(env, start_response)
453
account, signature = \
454
req.headers['Authorization'].split(' ')[-1].rsplit(':', 1)
456
return get_err_response('InvalidArgument')(env, start_response)
457
459
controller, path_parts = self.get_controller(req.path)
458
460
except ValueError:
459
461
return get_err_response('InvalidURI')(env, start_response)
461
account_name, token = self.get_account_info(env, req)
463
return get_err_response('InvalidArgument')(env, start_response)
465
controller = controller(env, self.app, account_name, token,
463
token = base64.urlsafe_b64encode(canonical_string(req))
465
controller = controller(env, self.app, account, token, **path_parts)
467
467
if hasattr(controller, req.method):
468
468
res = getattr(controller, req.method)(env, start_response)