def __call__(self, env, start_response): try: req_class = get_request_class(env, self.conf.s3_acl) req = req_class(env, self.app, self.slo_enabled, self.conf.storage_domain, self.conf.location, self.conf.force_swift_request_proxy_log, self.conf.dns_compliant_bucket_names, self.conf.allow_multipart_uploads, self.conf.allow_no_owner) resp = self.handle_request(req) except NotS3Request: resp = self.app except InvalidSubresource as e: self.logger.debug(e.cause) except ErrorResponse as err_resp: if isinstance(err_resp, InternalError): self.logger.exception(err_resp) resp = err_resp except Exception as e: self.logger.exception(e) resp = InternalError(reason=e) if isinstance(resp, S3ResponseBase) and 'swift.trans_id' in env: resp.headers['x-amz-id-2'] = env['swift.trans_id'] resp.headers['x-amz-request-id'] = env['swift.trans_id'] return resp(env, start_response)
def __call__(self, env, start_response): try: # XXX(FVE): this should be done in an independant middleware if self.bucket_db: env['s3api.bucket_db'] = BucketDbWrapper(self.bucket_db) req_class = get_request_class(env, self.conf.s3_acl) req = req_class(env, self.app, self.slo_enabled, self.conf.storage_domain, self.conf.location, self.conf.force_swift_request_proxy_log, self.conf.dns_compliant_bucket_names, self.conf.allow_multipart_uploads, self.conf.allow_no_owner, self.conf.allow_anonymous_path_requests) resp = self.handle_request(req) except NotS3Request: resp = self.app except InvalidSubresource as e: self.logger.debug(e.cause) except ErrorResponse as err_resp: if isinstance(err_resp, InternalError): self.logger.exception(err_resp) resp = err_resp except Exception as e: self.logger.exception(e) resp = InternalError(reason=str(e)) if isinstance(resp, S3ResponseBase) and 'swift.trans_id' in env: resp.headers['x-amz-id-2'] = env['swift.trans_id'] resp.headers['x-amz-request-id'] = env['swift.trans_id'] if 's3api.backend_path' in env and 'swift.backend_path' not in env: env['swift.backend_path'] = env['s3api.backend_path'] return resp(env, start_response)
def __call__(self, env, start_response): origin = env.get('HTTP_ORIGIN') if self.conf.cors_preflight_allow_origin and \ self.is_s3_cors_preflight(env): # I guess it's likely going to be an S3 request? *shrug* if self.conf.cors_preflight_allow_origin != ['*'] and \ origin not in self.conf.cors_preflight_allow_origin: start_response('401 Unauthorized', [ ('Allow', 'GET, HEAD, PUT, POST, DELETE, OPTIONS'), ]) return [b''] headers = [ ('Allow', 'GET, HEAD, PUT, POST, DELETE, OPTIONS'), ('Access-Control-Allow-Origin', origin), ('Access-Control-Allow-Methods', 'GET, HEAD, PUT, POST, DELETE, OPTIONS'), ('Vary', 'Origin, Access-Control-Request-Headers'), ] acrh = set( list_from_csv( env.get('HTTP_ACCESS_CONTROL_REQUEST_HEADERS', '').lower())) if acrh: headers.append( ('Access-Control-Allow-Headers', ', '.join(acrh))) start_response('200 OK', headers) return [b''] try: req_class = get_request_class(env, self.conf.s3_acl) req = req_class(env, self.app, self.conf) resp = self.handle_request(req) except NotS3Request: resp = self.app except InvalidSubresource as e: self.logger.debug(e.cause) except ErrorResponse as err_resp: if isinstance(err_resp, InternalError): self.logger.exception(err_resp) resp = err_resp except Exception as e: self.logger.exception(e) resp = InternalError(reason=str(e)) if isinstance(resp, S3ResponseBase) and 'swift.trans_id' in env: resp.headers['x-amz-id-2'] = env['swift.trans_id'] resp.headers['x-amz-request-id'] = env['swift.trans_id'] if 's3api.backend_path' in env and 'swift.backend_path' not in env: env['swift.backend_path'] = env['s3api.backend_path'] return resp(env, start_response)
def __call__(self, env, start_response): try: req_class = get_request_class(env, self.conf.s3_acl) req = req_class(env, self.app, self.conf) resp = self.handle_request(req) except NotS3Request: resp = self.app except InvalidSubresource as e: self.logger.debug(e.cause) except ErrorResponse as err_resp: if isinstance(err_resp, InternalError): self.logger.exception(err_resp) resp = err_resp except Exception as e: self.logger.exception(e) resp = InternalError(reason=str(e)) if isinstance(resp, S3ResponseBase) and 'swift.trans_id' in env: resp.headers['x-amz-id-2'] = env['swift.trans_id'] resp.headers['x-amz-request-id'] = env['swift.trans_id'] if 's3api.backend_path' in env and 'swift.backend_path' not in env: env['swift.backend_path'] = env['s3api.backend_path'] return resp(env, start_response)