def ip_from_request(self, request: Request) -> Optional[str]: if self.config.http.obey_x_forwarded_for and request.requestHeaders.hasHeader( "X-Forwarded-For" ): # Type safety: hasHeaders returning True means that getRawHeaders # returns a nonempty list return request.requestHeaders.getRawHeaders("X-Forwarded-For")[0] # type: ignore[index] client = request.getClientAddress() if isinstance(client, (address.IPv4Address, address.IPv6Address)): return client.host else: return None