Skip to content

Commit fd98369

Browse files
committed
Move get_user_ip from exordos_core
1 parent 8909e23 commit fd98369

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

gcl_iam/contexts.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import contextlib
1818
import logging
1919
import urllib.parse
20+
import netaddr
21+
import typing as tp
2022

2123
from restalchemy.common import contexts
2224
from restalchemy.storage.sql import engines
@@ -65,6 +67,25 @@ def get_real_url_with_prefix(self):
6567

6668
return new_uri
6769

70+
def get_user_ip(self) -> tp.Optional[netaddr.IPAddress]:
71+
request = self.request
72+
forwarded_for = request.headers.get("X-Forwarded-For")
73+
if forwarded_for:
74+
return netaddr.IPAddress(forwarded_for.split(",")[0].strip())
75+
real_ip = request.headers.get("X-Real-IP")
76+
if real_ip:
77+
return netaddr.IPAddress(real_ip.strip())
78+
remote_addr = getattr(request, "remote_addr", None) or getattr(
79+
request, "client_addr", None
80+
)
81+
if remote_addr:
82+
return netaddr.IPAddress(str(remote_addr))
83+
environ = getattr(request, "environ", None)
84+
if environ:
85+
remote_env = environ.get("REMOTE_ADDR")
86+
return netaddr.IPAddress(remote_env) if remote_env else None
87+
return None
88+
6889
@contextlib.contextmanager
6990
def iam_session(self, iam_context):
7091
self._store_iam_session(iam_context)

0 commit comments

Comments
 (0)