def __call__(self, environ, start_response): exactproxy.filter_paste_httpserver_proxy_environ(environ) url = construct_url(environ) if self.store.has_url(url): app = self.store.static_serve_app(url) return app(environ, start_response) return exactproxy.proxy_exact_request(environ, start_response)
def send_to_subprocess(self, environ, start_response): ## FIXME: I should use the WSGIProxy proxying code, not ## another copy of it: environ['HTTP_X_SCRIPT_NAME'] = environ.get('SCRIPT_NAME', '') environ['HTTP_X_FORWARDED_SCHEME'] = environ['wsgi.url_scheme'] environ['HTTP_X_FORWARDED_FOR'] = environ['REMOTE_ADDR'] environ['SERVER_NAME'] = '127.0.0.1' environ['SERVER_PORT'] = str(self.spawned_port) return proxy_exact_request(environ, start_response)
def __call__(self, environ, start_response): """ Working function of the class. Implements the WSGI interface to the application. That is, this does the work of proxying. """ self.environ = environ self.start_response = start_response # Start off by examining auth if self.auth is not None: authres = self.auth(deepcopy(environ)) if authres is not True: start_response("401 Unauthorized", []) return str(authres) # Okay, let's look at protocol. if self.target_protocol != "": if self.target_protocol != "http" and \ self.target_protocol != "https": raise ValueError("target_protocol must be http or https" "(case insensitive)") self.environ['wsgi.url_scheme'] = self.target_protocol if self.target_protocol == "https": self.environ['HTTPS'] = "on" elif 'HTTPS' in self.environ: del self.environ['HTTPS'] # If the user didn't set anything, we want the same scheme to be used # But, force it lower case self.environ['wsgi.url_scheme'] = \ self.environ['wsgi.url_scheme'].lower() # Now we can pick the appropriate target port if self.server_port != 0: self.environ['SERVER_PORT'] = str(self.server_port) elif self.environ['wsgi.url_scheme'] == "http": self.environ['SERVER_PORT'] = "80" elif self.environ['wsgi.url_scheme'] == "https": self.environ['SERVER_PORT'] = "443" else: # Fall through and error raise ValueError("WSGI Environ passed a bad url_scheme") self.environ['HTTP_HOST'] = self.server_name + ":" + \ self.environ['SERVER_PORT'] self.environ['SERVER_NAME'] = self.server_name return proxy_exact_request(self.environ, self.proxy_start_response)
def __call__(self, environ, start_response): from wsgiproxy.exactproxy import proxy_exact_request path_info = environ['PATH_INFO'] for prefix, dest in self.proxies: if path_info.startswith(prefix + '/'): print >> environ['wsgi.errors'], 'Sending request to %s' % dest environ['PATH_INFO'] = path_info[len(prefix):] parts = urlparse.urlsplit(dest) environ['wsgi.url_scheme'] = parts.scheme if ':' in parts.netloc: host, port = parts.netloc.split(':', 1) else: host, port = parts.netloc, '80' environ['SERVER_NAME'] = environ['HTTP_HOST'] = host environ['SERVER_PORT'] = port environ['SCRIPT_NAME'] = parts.path return proxy_exact_request(environ, start_response) return self.app(environ, start_response)
def forward_request(self, environ, start_response): return proxy_exact_request(environ, start_response)
def __call__(self, environ, start_response): environ['SERVER_NAME'] = self.server environ['SERVER_PORT'] = self.port if self.scheme: environ['wsgi.url_scheme'] = self.scheme return proxy_exact_request(environ, start_response)
def forwarding(environ, start_response): environ['SERVER_PORT'] = BACKEND_WEB_PORT return proxy_exact_request(environ, start_response)