Cleanup and fix req.server_port; no longer reports socket port if any forwards headers are used.

This commit is contained in:
L. Kärkkäinen 2019-07-20 16:52:35 +03:00
parent b896454135
commit 1838f43eff

View File

@ -389,19 +389,20 @@ class Request(dict):
def server_port(self): def server_port(self):
""" """
Attempt to get the server's port in this order: Attempt to get the server's port in this order:
`x-forwarded-port` header, :func:`Request.host`, actual port used by `forwarded` header, `x-forwarded-port` header, :func:`Request.host`,
the transport layer socket. actual port used by the transport layer socket.
:return: server port :return: server port
:rtype: int :rtype: int
""" """
if self.forwarded:
forwarded_port = self.forwarded.get("port") or ( forwarded_port = self.forwarded.get("port") or (
self.host.split(":")[1] if ":" in self.host else None "80" if self.scheme in ("http", "ws") else "443"
) )
if forwarded_port: elif ":" in self.host:
return int(forwarded_port) forwarded_port = self.host.split(":")[1]
else: else:
_, port = self.transport.get_extra_info("sockname") return self.transport.get_extra_info("sockname")[1]
return port return int(forwarded_port)
@property @property
def remote_addr(self): def remote_addr(self):