Coverage for utils/get_real_ip.py: 77.78%

9 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2026-01-25 13:05 +0000

1from fastapi import Request 

2 

3def get_real_ip(request: Request) -> str: 

4 """ 

5 Get the real client IP address, prioritizing proxy headers 

6  

7 Priority order: 

8 1. X-Forwarded-For (takes first IP, usually the original client) 

9 2. X-Real-IP (real IP set by nginx) 

10 3. request.client.host (direct connection IP) 

11  

12 Args: 

13 request: FastAPI request object 

14  

15 Returns: 

16 str: Real client IP address 

17 """ 

18 # First try X-Forwarded-For 

19 forwarded_for = request.headers.get("x-forwarded-for") 

20 if forwarded_for: 

21 return forwarded_for.split(",")[0].strip() 

22 

23 # Then try X-Real-IP 

24 real_ip = request.headers.get("x-real-ip") 

25 if real_ip: 

26 return real_ip.strip() 

27 

28 # Fallback to direct connection IP 

29 return request.client.host if request.client else "unknown"