Use req.forwarded in req properties server_name, server_port, scheme and remote_addr.
X-Scheme handling moved to parse_xforwarded.
This commit is contained in:
parent
f69383db04
commit
b896454135
@ -39,7 +39,10 @@ def parse_xforwarded(headers, config):
|
|||||||
addr = addr.strip()
|
addr = addr.strip()
|
||||||
if not addr:
|
if not addr:
|
||||||
return None
|
return None
|
||||||
other = ((h, headers.get(f'x-forwarded-{h}')) for h in ('proto', 'host', 'port', 'path'))
|
other = (
|
||||||
|
('proto', headers.get('x-scheme')),
|
||||||
|
*((h, headers.get(f'x-forwarded-{h}')) for h in ('proto', 'host', 'port', 'path'))
|
||||||
|
)
|
||||||
return {'for': addr, **{h: v for h, v in other if v}}
|
return {'for': addr, **{h: v for h, v in other if v}}
|
||||||
|
|
||||||
def test_parse_forwarded():
|
def test_parse_forwarded():
|
||||||
|
@ -372,7 +372,7 @@ class Request(dict):
|
|||||||
"""
|
"""
|
||||||
return (
|
return (
|
||||||
self.app.config.get("SERVER_NAME")
|
self.app.config.get("SERVER_NAME")
|
||||||
or self.headers.get("x-forwarded-host")
|
or self.forwarded.get("host")
|
||||||
or self.host.split(":")[0]
|
or self.host.split(":")[0]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -394,7 +394,7 @@ class Request(dict):
|
|||||||
:return: server port
|
:return: server port
|
||||||
:rtype: int
|
:rtype: int
|
||||||
"""
|
"""
|
||||||
forwarded_port = self.headers.get("x-forwarded-port") or (
|
forwarded_port = self.forwarded.get("port") or (
|
||||||
self.host.split(":")[1] if ":" in self.host else None
|
self.host.split(":")[1] if ":" in self.host else None
|
||||||
)
|
)
|
||||||
if forwarded_port:
|
if forwarded_port:
|
||||||
@ -412,33 +412,7 @@ class Request(dict):
|
|||||||
:return: original client ip.
|
:return: original client ip.
|
||||||
"""
|
"""
|
||||||
if not hasattr(self, "_remote_addr"):
|
if not hasattr(self, "_remote_addr"):
|
||||||
if self.app.config.PROXIES_COUNT == 0:
|
self._remote_addr = self.forwarded.get("for") or ""
|
||||||
self._remote_addr = ""
|
|
||||||
elif self.app.config.REAL_IP_HEADER and self.headers.get(
|
|
||||||
self.app.config.REAL_IP_HEADER
|
|
||||||
):
|
|
||||||
self._remote_addr = self.headers[
|
|
||||||
self.app.config.REAL_IP_HEADER
|
|
||||||
]
|
|
||||||
elif self.app.config.FORWARDED_FOR_HEADER:
|
|
||||||
forwarded_for = self.headers.get(
|
|
||||||
self.app.config.FORWARDED_FOR_HEADER, ""
|
|
||||||
).split(",")
|
|
||||||
remote_addrs = [
|
|
||||||
addr
|
|
||||||
for addr in [addr.strip() for addr in forwarded_for]
|
|
||||||
if addr
|
|
||||||
]
|
|
||||||
if self.app.config.PROXIES_COUNT == -1:
|
|
||||||
self._remote_addr = remote_addrs[0]
|
|
||||||
elif len(remote_addrs) >= self.app.config.PROXIES_COUNT:
|
|
||||||
self._remote_addr = remote_addrs[
|
|
||||||
-self.app.config.PROXIES_COUNT
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
self._remote_addr = ""
|
|
||||||
else:
|
|
||||||
self._remote_addr = ""
|
|
||||||
return self._remote_addr
|
return self._remote_addr
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -451,9 +425,7 @@ class Request(dict):
|
|||||||
:return: http|https|ws|wss or arbitrary value given by the headers.
|
:return: http|https|ws|wss or arbitrary value given by the headers.
|
||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
forwarded_proto = self.headers.get(
|
forwarded_proto = self.forwarded.get("proto")
|
||||||
"x-forwarded-proto"
|
|
||||||
) or self.headers.get("x-scheme")
|
|
||||||
if forwarded_proto:
|
if forwarded_proto:
|
||||||
return forwarded_proto
|
return forwarded_proto
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user