mirror of https://github.com/jumpserver/jumpserver
commit
ce63ea7528
|
@ -19,7 +19,7 @@ from django.utils.translation import gettext as _
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
|
|
||||||
from acls.models import LoginACL
|
from acls.models import LoginACL
|
||||||
from common.utils import get_request_ip, get_logger, bulk_get, FlashMessageUtil
|
from common.utils import get_request_ip_or_data, get_logger, bulk_get, FlashMessageUtil
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from users.utils import LoginBlockUtil, MFABlockUtils, LoginIpBlockUtil
|
from users.utils import LoginBlockUtil, MFABlockUtils, LoginIpBlockUtil
|
||||||
from . import errors
|
from . import errors
|
||||||
|
@ -107,13 +107,12 @@ auth.authenticate = authenticate
|
||||||
|
|
||||||
class CommonMixin:
|
class CommonMixin:
|
||||||
request: Request
|
request: Request
|
||||||
|
_ip = ''
|
||||||
|
|
||||||
def get_request_ip(self):
|
def get_request_ip(self):
|
||||||
ip = ''
|
if not self._ip:
|
||||||
if hasattr(self.request, 'data'):
|
self._ip = get_request_ip_or_data(self.request)
|
||||||
ip = self.request.data.get('remote_addr', '')
|
return self._ip
|
||||||
ip = ip or get_request_ip(self.request)
|
|
||||||
return ip
|
|
||||||
|
|
||||||
def raise_credential_error(self, error):
|
def raise_credential_error(self, error):
|
||||||
raise self.partial_credential_error(error=error)
|
raise self.partial_credential_error(error=error)
|
||||||
|
|
|
@ -17,6 +17,8 @@ import psutil
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.templatetags.static import static
|
from django.templatetags.static import static
|
||||||
|
|
||||||
|
from common.permissions import ServiceAccountSignaturePermission
|
||||||
|
|
||||||
UUID_PATTERN = re.compile(r'\w{8}(-\w{4}){3}-\w{12}')
|
UUID_PATTERN = re.compile(r'\w{8}(-\w{4}){3}-\w{12}')
|
||||||
ipip_db = None
|
ipip_db = None
|
||||||
|
|
||||||
|
@ -153,18 +155,25 @@ def is_uuid(seq):
|
||||||
|
|
||||||
|
|
||||||
def get_request_ip(request):
|
def get_request_ip(request):
|
||||||
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR', '').split(',')
|
x_real_ip = request.META.get('HTTP_X_REAL_IP', '')
|
||||||
|
if x_real_ip:
|
||||||
|
return x_real_ip
|
||||||
|
|
||||||
|
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR', '').split(',')
|
||||||
if x_forwarded_for and x_forwarded_for[0]:
|
if x_forwarded_for and x_forwarded_for[0]:
|
||||||
login_ip = x_forwarded_for[0]
|
login_ip = x_forwarded_for[0]
|
||||||
else:
|
return login_ip
|
||||||
|
|
||||||
login_ip = request.META.get('REMOTE_ADDR', '')
|
login_ip = request.META.get('REMOTE_ADDR', '')
|
||||||
return login_ip
|
return login_ip
|
||||||
|
|
||||||
|
|
||||||
def get_request_ip_or_data(request):
|
def get_request_ip_or_data(request):
|
||||||
ip = ''
|
ip = ''
|
||||||
if hasattr(request, 'data'):
|
|
||||||
|
if hasattr(request, 'data') and request.data.get('remote_addr', ''):
|
||||||
|
permission = ServiceAccountSignaturePermission()
|
||||||
|
if permission.has_permission(request, None):
|
||||||
ip = request.data.get('remote_addr', '')
|
ip = request.data.get('remote_addr', '')
|
||||||
ip = ip or get_request_ip(request)
|
ip = ip or get_request_ip(request)
|
||||||
return ip
|
return ip
|
||||||
|
|
Loading…
Reference in New Issue