File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1717import contextlib
1818import logging
1919import urllib .parse
20+ import netaddr
21+ import typing as tp
2022
2123from restalchemy .common import contexts
2224from 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 )
You can’t perform that action at this time.
0 commit comments