mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
58 lines
1.8 KiB
# -*- coding: utf-8 -*- |
|
# |
|
import ipaddress |
|
from urllib.parse import urljoin, urlparse |
|
|
|
from django.conf import settings |
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
from common.utils import validate_ip, get_ip_city, get_request_ip |
|
from common.utils import get_logger |
|
from audits.models import UserLoginLog |
|
from audits.const import DEFAULT_CITY |
|
from .notifications import DifferentCityLoginMessage |
|
|
|
logger = get_logger(__file__) |
|
|
|
|
|
def check_different_city_login_if_need(user, request): |
|
if not settings.SECURITY_CHECK_DIFFERENT_CITY_LOGIN: |
|
return |
|
|
|
ip = get_request_ip(request) or '0.0.0.0' |
|
if not (ip and validate_ip(ip)): |
|
city = DEFAULT_CITY |
|
else: |
|
city = get_ip_city(ip) or DEFAULT_CITY |
|
|
|
city_white = [_('LAN'), 'LAN'] |
|
is_private = ipaddress.ip_address(ip).is_private |
|
if not is_private: |
|
last_user_login = UserLoginLog.objects.exclude(city__in=city_white) \ |
|
.filter(username=user.username, status=True).first() |
|
|
|
if last_user_login and last_user_login.city != city: |
|
DifferentCityLoginMessage(user, ip, city).publish_async() |
|
|
|
|
|
def build_absolute_uri(request, path=None): |
|
""" Build absolute redirect """ |
|
if path is None: |
|
path = '/' |
|
site_url = urlparse(settings.SITE_URL) |
|
scheme = site_url.scheme or request.scheme |
|
host = request.get_host() |
|
url = f'{scheme}://{host}' |
|
redirect_uri = urljoin(url, path) |
|
return redirect_uri |
|
|
|
|
|
def build_absolute_uri_for_oidc(request, path=None): |
|
""" Build absolute redirect uri for OIDC """ |
|
if path is None: |
|
path = '/' |
|
if settings.BASE_SITE_URL: |
|
# OIDC 专用配置项 |
|
redirect_uri = urljoin(settings.BASE_SITE_URL, path) |
|
return redirect_uri |
|
return build_absolute_uri(request, path=path)
|
|
|