def __call__(self, environ, start_response): # we override this here to ensure that this header, and only this # header, is trusted to reduce the number of potential # misconfigurations between wsgi application servers (e.g. gunicorn # which trusts three different headers out of the box for this) and # haproxy (which won't clean out bad headers by default) forwarded_proto = environ.get("HTTP_X_FORWARDED_PROTO", "http").lower() assert forwarded_proto in ("http", "https") request.environ["wsgi.url_scheme"] = forwarded_proto true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') if (g.ip_hash and true_client_ip and ip_hash and hashlib.md5(true_client_ip + g.ip_hash).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip elif g.trust_local_proxies and forwarded_for and is_local_address(remote_addr): request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the paramters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.fullurl = request.host_url + request.fullpath request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' if meth != 'OPTIONS': handler_name = meth + '_' + action else: handler_name = meth request.environ['pylons.routes_dict']['action_name'] = action request.environ['pylons.routes_dict']['action'] = handler_name return WSGIController.__call__(self, environ, start_response)
def __call__(self, environ, start_response): true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') if (g.ip_hash and true_client_ip and ip_hash and hashlib.md5(true_client_ip + g.ip_hash).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip elif g.trust_local_proxies and forwarded_for and is_local_address(remote_addr): request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the paramters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' if meth != 'OPTIONS': handler_name = meth + '_' + action else: handler_name = meth request.environ['pylons.routes_dict']['action_name'] = action request.environ['pylons.routes_dict']['action'] = handler_name try: res = WSGIController.__call__(self, environ, start_response) except Exception as e: if g.exception_logging and not isinstance(e, OPERATIONAL_EXCEPTIONS): try: log_exception(e, *sys.exc_info()) except Exception as f: print "log_exception() freaked out: %r" % f print "sorry for breaking the stack trace:" raise return res
def __call__(self, environ, start_response): # we override this here to ensure that this header, and only this # header, is trusted to reduce the number of potential # misconfigurations between wsgi application servers (e.g. gunicorn # which trusts three different headers out of the box for this) and # haproxy (which won't clean out bad headers by default) forwarded_proto = environ.get("HTTP_X_FORWARDED_PROTO", "http").lower() assert forwarded_proto in ("http", "https") request.environ["wsgi.url_scheme"] = forwarded_proto true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') request.via_cdn = False if (g.secrets["true_ip"] and true_client_ip and ip_hash and hashlib.md5(true_client_ip + g.secrets["true_ip"]).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip request.via_cdn = True elif g.trust_local_proxies and forwarded_for and is_local_address(remote_addr): request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the parameters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.referer = environ.get('HTTP_REFERER') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.fullurl = request.host_url + request.fullpath request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' if meth != 'OPTIONS': handler_name = meth + '_' + action else: handler_name = meth request.environ['pylons.routes_dict']['action_name'] = action request.environ['pylons.routes_dict']['action'] = handler_name return WSGIController.__call__(self, environ, start_response)
def __call__(self, environ, start_response): # we override this here to ensure that this header, and only this # header, is trusted to reduce the number of potential # misconfigurations between wsgi application servers (e.g. gunicorn # which trusts three different headers out of the box for this) and # haproxy (which won't clean out bad headers by default) forwarded_proto = environ.get("HTTP_X_FORWARDED_PROTO", "http").lower() assert forwarded_proto in ("http", "https") request.environ["wsgi.url_scheme"] = forwarded_proto forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') request.via_cdn = False cdn_ip = g.cdn_provider.get_client_ip(environ) if cdn_ip: request.ip = cdn_ip request.via_cdn = True elif g.trust_local_proxies and forwarded_for and is_local_address(remote_addr): request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the parameters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.referer = environ.get('HTTP_REFERER') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.fullurl = request.host_url + request.fullpath request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if (request.environ.get('r2.controller.exception') and action == 'document' and request.environ.get('render_style') == 'api'): action = 'api_error' if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' if (meth == 'OPTIONS' and self._get_action_handler(action, meth) is None): handler_name = meth else: handler_name = meth + '_' + action request.environ['pylons.routes_dict']['action_name'] = action request.environ['pylons.routes_dict']['action'] = handler_name return WSGIController.__call__(self, environ, start_response)
def __call__(self, environ, start_response): true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') if (g.ip_hash and true_client_ip and ip_hash and hashlib.md5(true_client_ip + g.ip_hash).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip elif remote_addr in g.proxy_addr and forwarded_for: request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the paramters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.path = environ.get('PATH_INFO') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' request.environ['pylons.routes_dict']['action'] = \ meth + '_' + action c.thread_pool = environ['paste.httpserver.thread_pool'] c.response = Response() try: res = WSGIController.__call__(self, environ, start_response) except Exception as e: if g.exception_logging: try: log_exception(e, *sys.exc_info()) except Exception as f: print "log_exception() freaked out: %r" % f print "sorry for breaking the stack trace:" raise return res
def __call__(self, environ, start_response): true_client_ip = environ.get("HTTP_TRUE_CLIENT_IP") ip_hash = environ.get("HTTP_TRUE_CLIENT_IP_HASH") forwarded_for = environ.get("HTTP_X_FORWARDED_FOR", ()) remote_addr = environ.get("REMOTE_ADDR") if ( g.ip_hash and true_client_ip and ip_hash and hashlib.md5(true_client_ip + g.ip_hash).hexdigest() == ip_hash.lower() ): request.ip = true_client_ip elif remote_addr in g.proxy_addr and forwarded_for: request.ip = forwarded_for.split(",")[-1] else: request.ip = environ["REMOTE_ADDR"] # if x-dont-decode is set, pylons won't unicode all the paramters if environ.get("HTTP_X_DONT_DECODE"): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get("HTTP_REFERER") request.path = environ.get("PATH_INFO") request.user_agent = environ.get("HTTP_USER_AGENT") request.fullpath = environ.get("FULLPATH", request.path) request.port = environ.get("request_port") if_modified_since = environ.get("HTTP_IF_MODIFIED_SINCE") if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None # set the function to be called action = request.environ["pylons.routes_dict"].get("action") if action: meth = request.method.upper() if meth == "HEAD": meth = "GET" request.environ["pylons.routes_dict"]["action"] = meth + "_" + action c.thread_pool = environ["paste.httpserver.thread_pool"] c.response = Response() try: res = WSGIController.__call__(self, environ, start_response) except Exception as e: if g.exception_logging: try: log_exception(e, *sys.exc_info()) except Exception as f: print "log_exception() freaked out: %r" % f print "sorry for breaking the stack trace:" raise return res
def __before__(self): """Perform setup tasks before the controller method/action is executed. Called by WSGIController.__call__. """ # we override this here to ensure that this header, and only this # header, is trusted to reduce the number of potential # misconfigurations between wsgi application servers (e.g. gunicorn # which trusts three different headers out of the box for this) and # haproxy (which won't clean out bad headers by default) forwarded_proto = request.environ.get("HTTP_X_FORWARDED_PROTO", "http") forwarded_proto = forwarded_proto.lower() assert forwarded_proto in ("http", "https") request.environ["wsgi.url_scheme"] = forwarded_proto forwarded_for = request.environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = request.environ.get('REMOTE_ADDR') request.via_cdn = False cdn_ip = g.cdn_provider.get_client_ip(request.environ) if cdn_ip: request.ip = cdn_ip request.via_cdn = True elif (g.trust_local_proxies and forwarded_for and is_local_address(remote_addr)): request.ip = forwarded_for.split(',')[-1] else: request.ip = request.environ['REMOTE_ADDR'] try: # webob can't handle non utf-8 encoded query strings or paths request.params request.path except UnicodeDecodeError: abort(400) #if x-dont-decode is set, pylons won't unicode all the parameters if request.environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.referer = request.environ.get('HTTP_REFERER') request.user_agent = request.environ.get('HTTP_USER_AGENT') request.parsed_agent = Agent.parse(request.user_agent) request.fullpath = request.environ.get('FULLPATH', request.path) request.fullurl = request.host_url + request.fullpath request.port = request.environ.get('request_port') if_modified_since = request.environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None self.fix_cookie_header() self.pre()
def __call__(self, environ, start_response): """Invoke the Controller""" # WSGIController.__call__ dispatches to the Controller method # the request is routed to. This routing information is # available in environ['pylons.routes_dict'] request.ip = self.get_client_ip(environ) if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) # print request.get request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.path = environ.get('PATH_INFO') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH',request.path) request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None action = request.environ['pylons.routes_dict'].get('action') print action if action: meth = request.method.upper() print "method:%s" % meth if meth == 'HEAD': meth = 'GET' # request.environ['pylos.routes_dict']['action'] = meth + '_' +action print "action:%s" % action # print request.environ['pylons.routes_dict'] # print 'action_name:%s' % request.environ['pylons.routes_dict']['action_name'] # print request.environ['pylons.routes_dict']['action'] # request.environ['pylons.routes_dict']['action_name'] = action # request.environ['pylons.routes_dict']['action'] = handler_name c.thread_pool = environ['paste.httpserver.thread_pool'] c.response=Response() try: res = WSGIController.__call__(self, environ, start_response) except Exception as e: if g.exception_logging: try: log_exception(e, *sys.exc_info()) except Exception as f: print "log_exception() freaked out: %r" % f raise return res
def __call__(self, environ, start_response): true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') if (g.ip_hash and true_client_ip and ip_hash and hashlib.md5(true_client_ip + g.ip_hash).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip elif g.trust_local_proxies and forwarded_for and is_local_address( remote_addr): request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the paramters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.fullurl = environ.get('FULLURL', request.url) request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' if meth != 'OPTIONS': handler_name = meth + '_' + action else: handler_name = meth request.environ['pylons.routes_dict']['action_name'] = action request.environ['pylons.routes_dict']['action'] = handler_name return WSGIController.__call__(self, environ, start_response)
def __call__(self, environ, start_response): true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') if (g.ip_hash and true_client_ip and ip_hash and md5.new(true_client_ip + g.ip_hash).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip elif remote_addr == g.proxy_addr and forwarded_for: request.ip = forwarded_for.split(',')[-1] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the paramters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.path = environ.get('PATH_INFO') request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' request.environ['pylons.routes_dict']['action'] = \ meth + '_' + action c.thread_pool = environ['paste.httpserver.thread_pool'] c.response = Response() res = WSGIController.__call__(self, environ, start_response) return res
def __call__(self, environ, start_response): true_client_ip = environ.get('HTTP_TRUE_CLIENT_IP') ip_hash = environ.get('HTTP_TRUE_CLIENT_IP_HASH') forwarded_for = environ.get('HTTP_X_FORWARDED_FOR', ()) remote_addr = environ.get('REMOTE_ADDR') if (g.ip_hash and true_client_ip and ip_hash and md5.new(true_client_ip + g.ip_hash).hexdigest() \ == ip_hash.lower()): request.ip = true_client_ip elif remote_addr == g.proxy_addr and forwarded_for: request.ip = forwarded_for.split(',')[0] else: request.ip = environ['REMOTE_ADDR'] #if x-dont-decode is set, pylons won't unicode all the paramters if environ.get('HTTP_X_DONT_DECODE'): request.charset = None request.get = storify(request.GET) request.post = storify(request.POST) request.referer = environ.get('HTTP_REFERER') request.path = _force_utf8(environ.get('PATH_INFO')) # Enforce only valid utf8 chars in request path request.user_agent = environ.get('HTTP_USER_AGENT') request.fullpath = environ.get('FULLPATH', request.path) request.port = environ.get('request_port') if_modified_since = environ.get('HTTP_IF_MODIFIED_SINCE') if if_modified_since: request.if_modified_since = read_http_date(if_modified_since) else: request.if_modified_since = None #set the function to be called action = request.environ['pylons.routes_dict'].get('action') if action: meth = request.method.upper() if meth == 'HEAD': meth = 'GET' request.environ['pylons.routes_dict']['action'] = \ meth + '_' + action c.response = Response() res = WSGIController.__call__(self, environ, start_response) return res