def response(self): log = logging.getLogger("outpost.files") settings = self.request.registry.settings url = self.request.url # run pre proxy request hooked filters # if the filter returns a response and not None. The response is returned # immediately try: file = filtermanager.runPreHook(filtermanager.EmptyFileResponse(), self.request, self.url) except filtermanager.ResponseFinished, e: return e.response
def response(self): request = self.request settings = request.registry.settings request.environ["proxy"] = self # Run pre proxy request hooked filters # If the filter raises `ResponseFinished` processing is stopped and the response returned. # If runPreHook returns a response and not None the proxy call is not triggered and and # post hooks are processed for the returned response. try: response = filtermanager.runPreHook(filtermanager.EmptyProxyResponse(), request, self.url) except filtermanager.ResponseFinished, e: return e.response
def response(self): request = self.request settings = request.registry.settings request.environ["proxy"] = self # Run pre proxy request hooked filters # If the filter raises `ResponseFinished` processing is stopped and the response returned. # If runPreHook returns a response and not None the proxy call is not triggered and and # post hooks are processed for the returned response. try: response = filtermanager.runPreHook( filtermanager.EmptyProxyResponse(), request, self.url) except filtermanager.ResponseFinished as e: return e.response if response is None: response, body = self.proxy(self.url, request) else: # pre hook returned response body = response.body def removeHeader(key, values): # the default header key should be the standard capitilized version e.g 'Content-Length' try: del headers[key] except KeyError: try: del headers[key.lower()] except KeyError: try: del headers[key.upper()] except KeyError: pass # clean up headers headers = dict(response.headers) keys = [k.lower() for k in list(headers)] if 'content-length' in keys: removeHeader('Content-Length', headers) if 'transfer-encoding' in keys: removeHeader('Transfer-Encoding', headers) if 'content-encoding' in keys: removeHeader('Content-Encoding', headers) if 'connection' in keys: removeHeader('Connection', headers) if 'keep-alive' in keys: removeHeader('Keep-Alive', headers) # cookies if 'set-cookie' in keys: try: cookie = headers['Set-Cookie'] except KeyError: try: cookie = headers['set-cookie'] except KeyError: cookie = headers['SET-COOKIE'] host = request.host.split(":")[0] local = str(self.url.host).split(":")[0] cookie = cookie.replace(local, host) headers['set-cookie'] = cookie proxy_response = Response(body=body, status=response.status_code) proxy_response.headers.update(headers) alsoProvides(proxy_response, filtermanager.IProxyRequest) # run post proxy request hooked filters proxy_response = filtermanager.runPostHook(proxy_response, request, self.url) return proxy_response
def response(self): log = logging.getLogger("outpost.files") settings = self.request.registry.settings url = self.request.url # run pre proxy request hooked filters # if the filter returns a response and not None. The response is returned # immediately try: file = filtermanager.runPreHook(filtermanager.EmptyFileResponse(), self.request, self.url) except filtermanager.ResponseFinished as e: return e.response if file is None: df = settings.get("server.default_path") # bw 0.2.6 if df is None: df = settings.get("server.defaultfile") if df: static = static_view(root_dir=settings["files.directory"], use_subpath=True, index=df) else: static = static_view(root_dir=settings["files.directory"], use_subpath=True) file = static(self.context, self.request) alsoProvides(file, filtermanager.IFileRequest) # adjust headers #file.headers["Cache-control"] = "no-cache" #file.headers["Pragma"] = "no-cache" #file.headers["Expires"] = "0" #if "Last-Modified" in file.headers: # del file.headers["Last-Modified"] # set default mime type to text/html if len(self.request.subpath): name = self.request.subpath[-1] else: name = df # cache content type global __ct_cache__ ext = ".".join(name.split(".")[1:]) if ext in __ct_cache__: ct = __ct_cache__[ext] else: ct = guess_type(name, strict=False)[0] or settings.get("server.content_type") __ct_cache__[ext] = ct file.headers["Content-Type"] = ct file.content_type = ct file.charset = settings.get("files.charset") or "utf-8" if self.debug: server_trace = settings.get("files.trace") # bw 0.2.6 renamed setting if server_trace is None: server_trace = settings.get("server.trace") # trace in debugger if server_trace and re.search(server_trace, url): pdb.set_trace() # run post file server hooked filters file = filtermanager.runPostHook(file, self.request, self.url) #=> Ready to filter and return the current file. Step once (n) to apply filters. return file
def response(self): log = logging.getLogger("outpost.files") settings = self.request.registry.settings url = self.request.url # run pre proxy request hooked filters # if the filter returns a response and not None. The response is returned # immediately try: file = filtermanager.runPreHook(filtermanager.EmptyFileResponse(), self.request, self.url) except filtermanager.ResponseFinished as e: return e.response if file is None: df = settings.get("server.default_path") # bw 0.2.6 if df is None: df = settings.get("server.defaultfile") if df: static = static_view(root_dir=settings["files.directory"], use_subpath=True, index=df) else: static = static_view(root_dir=settings["files.directory"], use_subpath=True) file = static(self.context, self.request) alsoProvides(file, filtermanager.IFileRequest) # adjust headers #file.headers["Cache-control"] = "no-cache" #file.headers["Pragma"] = "no-cache" #file.headers["Expires"] = "0" #if "Last-Modified" in file.headers: # del file.headers["Last-Modified"] # set default mime type to text/html if len(self.request.subpath): name = self.request.subpath[-1] else: name = df # cache content type global __ct_cache__ ext = ".".join(name.split(".")[1:]) if ext in __ct_cache__: ct = __ct_cache__[ext] else: ct = guess_type( name, strict=False)[0] or settings.get("server.content_type") __ct_cache__[ext] = ct file.headers["Content-Type"] = ct file.content_type = ct file.charset = settings.get("files.charset") or "utf-8" if self.debug: server_trace = settings.get("files.trace") # bw 0.2.6 renamed setting if server_trace is None: server_trace = settings.get("server.trace") # trace in debugger if server_trace and re.search(server_trace, url): pdb.set_trace() # run post file server hooked filters file = filtermanager.runPostHook( file, self.request, self.url ) #=> Ready to filter and return the current file. Step once (n) to apply filters. return file
def response(self): request = self.request settings = request.registry.settings request.environ["proxy"] = self # Run pre proxy request hooked filters # If the filter raises `ResponseFinished` processing is stopped and the response returned. # If runPreHook returns a response and not None the proxy call is not triggered and and # post hooks are processed for the returned response. try: response = filtermanager.runPreHook(filtermanager.EmptyProxyResponse(), request, self.url) except filtermanager.ResponseFinished as e: return e.response if response is None: response, body = self.proxy(self.url, request) else: # pre hook returned response body = response.body def removeHeader(key, values): # the default header key should be the standard capitilized version e.g 'Content-Length' try: del headers[key] except KeyError: try: del headers[key.lower()] except KeyError: try: del headers[key.upper()] except KeyError: pass # clean up headers headers = dict(response.headers) keys = [k.lower() for k in list(headers)] if 'content-length' in keys: removeHeader('Content-Length', headers) if 'transfer-encoding' in keys: removeHeader('Transfer-Encoding', headers) if 'content-encoding' in keys: removeHeader('Content-Encoding', headers) if 'connection' in keys: removeHeader('Connection', headers) if 'keep-alive' in keys: removeHeader('Keep-Alive', headers) # cookies if 'set-cookie' in keys: try: cookie = headers['Set-Cookie'] except KeyError: try: cookie = headers['set-cookie'] except KeyError: cookie = headers['SET-COOKIE'] host = request.host.split(":")[0] local = str(self.url.host).split(":")[0] cookie = cookie.replace(local, host) headers['set-cookie'] = cookie proxy_response = Response(body=body, status=response.status_code) proxy_response.headers.update(headers) alsoProvides(proxy_response, filtermanager.IProxyRequest) # run post proxy request hooked filters proxy_response = filtermanager.runPostHook(proxy_response, request, self.url) return proxy_response