Merge pull request #5965 from jumpserver/dev

v2.9.0 rc3
This commit is contained in:
Jiangjie.Bai 2021-04-14 18:43:45 +08:00 committed by GitHub
commit 35dfdf831a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 287 additions and 227 deletions

View File

@ -1,9 +0,0 @@
from django.utils.translation import ugettext as _
common_help_text = _('Format for comma-delimited string, with * indicating a match all. ')
ip_group_help_text = common_help_text + _(
'Such as: '
'192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 '
)

View File

@ -4,7 +4,6 @@ from common.drf.serializers import BulkModelSerializer
from orgs.utils import current_org from orgs.utils import current_org
from ..models import LoginACL from ..models import LoginACL
from ..utils import is_ip_address, is_ip_network, is_ip_segment from ..utils import is_ip_address, is_ip_network, is_ip_segment
from .. import const
__all__ = ['LoginACLSerializer', ] __all__ = ['LoginACLSerializer', ]
@ -21,8 +20,14 @@ def ip_group_child_validator(ip_group_child):
class LoginACLSerializer(BulkModelSerializer): class LoginACLSerializer(BulkModelSerializer):
ip_group_help_text = _(
'Format for comma-delimited string, with * indicating a match all. '
'Such as: '
'192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 '
)
ip_group = serializers.ListField( ip_group = serializers.ListField(
default=['*'], label=_('IP'), help_text=const.ip_group_help_text, default=['*'], label=_('IP'), help_text=ip_group_help_text,
child=serializers.CharField(max_length=1024, validators=[ip_group_child_validator]) child=serializers.CharField(max_length=1024, validators=[ip_group_child_validator])
) )
user_display = serializers.ReadOnlyField(source='user.name', label=_('User')) user_display = serializers.ReadOnlyField(source='user.name', label=_('User'))

View File

@ -1,45 +1,59 @@
from rest_framework import serializers from rest_framework import serializers
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy as _
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from assets.models import SystemUser from assets.models import SystemUser
from acls import models from acls import models
from orgs.models import Organization from orgs.models import Organization
from .. import const
__all__ = ['LoginAssetACLSerializer'] __all__ = ['LoginAssetACLSerializer']
common_help_text = _('Format for comma-delimited string, with * indicating a match all. ')
class LoginAssetACLUsersSerializer(serializers.Serializer): class LoginAssetACLUsersSerializer(serializers.Serializer):
username_group = serializers.ListField( username_group = serializers.ListField(
default=['*'], child=serializers.CharField(max_length=128), label=_('Username'), default=['*'], child=serializers.CharField(max_length=128), label=_('Username'),
help_text=const.common_help_text help_text=common_help_text
) )
class LoginAssetACLAssestsSerializer(serializers.Serializer): class LoginAssetACLAssestsSerializer(serializers.Serializer):
ip_group_help_text = _(
'Format for comma-delimited string, with * indicating a match all. '
'Such as: '
'192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 '
'(Domain name support)'
)
ip_group = serializers.ListField( ip_group = serializers.ListField(
default=['*'], child=serializers.CharField(max_length=1024), label=_('IP'), default=['*'], child=serializers.CharField(max_length=1024), label=_('IP'),
help_text=const.ip_group_help_text + _('(Domain name support)') help_text=ip_group_help_text
) )
hostname_group = serializers.ListField( hostname_group = serializers.ListField(
default=['*'], child=serializers.CharField(max_length=128), label=_('Hostname'), default=['*'], child=serializers.CharField(max_length=128), label=_('Hostname'),
help_text=const.common_help_text help_text=common_help_text
) )
class LoginAssetACLSystemUsersSerializer(serializers.Serializer): class LoginAssetACLSystemUsersSerializer(serializers.Serializer):
protocol_group_help_text = _(
'Format for comma-delimited string, with * indicating a match all. '
'Protocol options: {}'
)
name_group = serializers.ListField( name_group = serializers.ListField(
default=['*'], child=serializers.CharField(max_length=128), label=_('Name'), default=['*'], child=serializers.CharField(max_length=128), label=_('Name'),
help_text=const.common_help_text help_text=common_help_text
) )
username_group = serializers.ListField( username_group = serializers.ListField(
default=['*'], child=serializers.CharField(max_length=128), label=_('Username'), default=['*'], child=serializers.CharField(max_length=128), label=_('Username'),
help_text=const.common_help_text help_text=common_help_text
) )
protocol_group = serializers.ListField( protocol_group = serializers.ListField(
default=['*'], child=serializers.CharField(max_length=16), label=_('Protocol'), default=['*'], child=serializers.CharField(max_length=16), label=_('Protocol'),
help_text=const.common_help_text + _('Protocol options: {}').format( help_text=protocol_group_help_text.format(
', '.join(SystemUser.ASSET_CATEGORY_PROTOCOLS) ', '.join(SystemUser.ASSET_CATEGORY_PROTOCOLS)
) )
) )

View File

@ -44,8 +44,8 @@ class ApplicationSerializerMixin(serializers.Serializer):
class ApplicationSerializer(ApplicationSerializerMixin, BulkOrgResourceModelSerializer): class ApplicationSerializer(ApplicationSerializerMixin, BulkOrgResourceModelSerializer):
category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category')) category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category(Display)'))
type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type')) type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type(Dispaly)'))
class Meta: class Meta:
model = models.Application model = models.Application

View File

@ -0,0 +1,18 @@
# Generated by Django 3.1 on 2021-04-14 06:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('audits', '0011_userloginlog_backend'),
]
operations = [
migrations.AlterField(
model_name='userloginlog',
name='type',
field=models.CharField(choices=[('W', 'Web'), ('T', 'Terminal'), ('U', 'Unknown')], max_length=2, verbose_name='Login type'),
),
]

View File

@ -79,6 +79,7 @@ class UserLoginLog(models.Model):
LOGIN_TYPE_CHOICE = ( LOGIN_TYPE_CHOICE = (
('W', 'Web'), ('W', 'Web'),
('T', 'Terminal'), ('T', 'Terminal'),
('U', 'Unknown'),
) )
MFA_DISABLED = 0 MFA_DISABLED = 0

View File

@ -146,7 +146,7 @@ def generate_data(username, request):
user_agent = request.META.get('HTTP_USER_AGENT', '') user_agent = request.META.get('HTTP_USER_AGENT', '')
login_ip = get_request_ip(request) or '0.0.0.0' login_ip = get_request_ip(request) or '0.0.0.0'
if isinstance(request, Request): if isinstance(request, Request):
login_type = request.META.get('HTTP_X_JMS_LOGIN_TYPE', '') login_type = request.META.get('HTTP_X_JMS_LOGIN_TYPE', 'U')
else: else:
login_type = 'W' login_type = 'W'

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -149,10 +149,8 @@ class CommandViewSet(viewsets.ModelViewSet):
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
query_all = self.request.query_params.get('all', False) # 适配像 ES 这种没有指定分页只返回少量数据的情况
if is_true(query_all): queryset = queryset[:]
# 适配像 ES 这种没有指定分页只返回少量数据的情况
queryset = queryset[:]
serializer = self.get_serializer(queryset, many=True) serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data) return Response(serializer.data)

View File

@ -32,7 +32,7 @@ class StatusSerializer(serializers.ModelSerializer):
class TerminalSerializer(BulkModelSerializer): class TerminalSerializer(BulkModelSerializer):
session_online = serializers.SerializerMethodField() session_online = serializers.ReadOnlyField(source='get_online_session_count')
is_alive = serializers.BooleanField(read_only=True) is_alive = serializers.BooleanField(read_only=True)
status = serializers.CharField(read_only=True, source='latest_status') status = serializers.CharField(read_only=True, source='latest_status')
status_display = serializers.CharField(read_only=True, source='latest_status_display') status_display = serializers.CharField(read_only=True, source='latest_status_display')
@ -73,10 +73,6 @@ class TerminalSerializer(BulkModelSerializer):
else: else:
raise serializers.ValidationError(_('Not found')) raise serializers.ValidationError(_('Not found'))
@staticmethod
def get_session_online(obj):
return Session.objects.filter(terminal=obj, is_finished=False).count()
class TaskSerializer(BulkModelSerializer): class TaskSerializer(BulkModelSerializer):
class Meta: class Meta: