mirror of https://github.com/jumpserver/jumpserver
				
				
				
			fix: 解决 swagger api 报错的问题
							parent
							
								
									2b29ce69f4
								
							
						
					
					
						commit
						1035e27201
					
				| 
						 | 
				
			
			@ -312,7 +312,7 @@ class DatesLoginMetricMixin:
 | 
			
		|||
 | 
			
		||||
    @lazyproperty
 | 
			
		||||
    def commands_danger_amount(self):
 | 
			
		||||
        return self.command_queryset.filter(risk_level=Command.RISK_LEVEL_DANGEROUS).count()
 | 
			
		||||
        return self.command_queryset.filter(risk_level=Command.RiskLevelChoices.dangerous).count()
 | 
			
		||||
 | 
			
		||||
    @lazyproperty
 | 
			
		||||
    def job_logs_running_amount(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,12 +10,10 @@ from orgs.mixins.models import OrgModelMixin
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class AbstractSessionCommand(OrgModelMixin):
 | 
			
		||||
    RISK_LEVEL_ORDINARY = 0
 | 
			
		||||
    RISK_LEVEL_DANGEROUS = 5
 | 
			
		||||
    RISK_LEVEL_CHOICES = (
 | 
			
		||||
        (RISK_LEVEL_ORDINARY, _('Ordinary')),
 | 
			
		||||
        (RISK_LEVEL_DANGEROUS, _('Dangerous')),
 | 
			
		||||
    )
 | 
			
		||||
    class RiskLevelChoices(models.IntegerChoices):
 | 
			
		||||
        ordinary = 0, _('Ordinary')
 | 
			
		||||
        dangerous = 5, _('Dangerous')
 | 
			
		||||
 | 
			
		||||
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
 | 
			
		||||
    user = models.CharField(max_length=64, db_index=True, verbose_name=_("User"))
 | 
			
		||||
    asset = models.CharField(max_length=128, db_index=True, verbose_name=_("Asset"))
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +21,10 @@ class AbstractSessionCommand(OrgModelMixin):
 | 
			
		|||
    input = models.CharField(max_length=128, db_index=True, verbose_name=_("Input"))
 | 
			
		||||
    output = models.CharField(max_length=1024, blank=True, verbose_name=_("Output"))
 | 
			
		||||
    session = models.CharField(max_length=36, db_index=True, verbose_name=_("Session"))
 | 
			
		||||
    risk_level = models.SmallIntegerField(default=RISK_LEVEL_ORDINARY, choices=RISK_LEVEL_CHOICES, db_index=True, verbose_name=_("Risk level"))
 | 
			
		||||
    risk_level = models.SmallIntegerField(
 | 
			
		||||
        default=RiskLevelChoices.ordinary, choices=RiskLevelChoices.choices, db_index=True,
 | 
			
		||||
        verbose_name=_("Risk level")
 | 
			
		||||
    )
 | 
			
		||||
    timestamp = models.IntegerField(db_index=True)
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +45,7 @@ class AbstractSessionCommand(OrgModelMixin):
 | 
			
		|||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_risk_level_str(cls, risk_level):
 | 
			
		||||
        risk_mapper = dict(cls.RISK_LEVEL_CHOICES)
 | 
			
		||||
        risk_mapper = dict(cls.RiskLevelChoices.choices)
 | 
			
		||||
        return risk_mapper.get(risk_level)
 | 
			
		||||
 | 
			
		||||
    def to_dict(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,11 +5,12 @@ from rest_framework import serializers
 | 
			
		|||
from common.utils import pretty_string
 | 
			
		||||
from common.serializers.fields import LabeledChoiceField
 | 
			
		||||
from terminal.backends.command.models import AbstractSessionCommand
 | 
			
		||||
from terminal.models import Command
 | 
			
		||||
 | 
			
		||||
__all__ = ['SessionCommandSerializer', 'InsecureCommandAlertSerializer']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SimpleSessionCommandSerializer(serializers.Serializer):
 | 
			
		||||
class SimpleSessionCommandSerializer(serializers.ModelSerializer):
 | 
			
		||||
 | 
			
		||||
    """ 简单Session命令序列类, 用来提取公共字段 """
 | 
			
		||||
    user = serializers.CharField(label=_("User"))  # 限制 64 字符,见 validate_user
 | 
			
		||||
| 
						 | 
				
			
			@ -17,12 +18,18 @@ class SimpleSessionCommandSerializer(serializers.Serializer):
 | 
			
		|||
    input = serializers.CharField(max_length=2048, label=_("Command"))
 | 
			
		||||
    session = serializers.CharField(max_length=36, label=_("Session ID"))
 | 
			
		||||
    risk_level = LabeledChoiceField(
 | 
			
		||||
        required=False, label=_("Risk level"), choices=AbstractSessionCommand.RISK_LEVEL_CHOICES
 | 
			
		||||
        choices=AbstractSessionCommand.RiskLevelChoices.choices,
 | 
			
		||||
        required=False, label=_("Risk level"),
 | 
			
		||||
    )
 | 
			
		||||
    org_id = serializers.CharField(
 | 
			
		||||
        max_length=36, required=False, default='', allow_null=True, allow_blank=True
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
        # 继承 ModelSerializer 解决 swagger risk_level type 为 object 的问题
 | 
			
		||||
        model = Command
 | 
			
		||||
        fields = ['user', 'asset', 'input', 'session', 'risk_level', 'org_id']
 | 
			
		||||
 | 
			
		||||
    def validate_user(self, value):
 | 
			
		||||
        if len(value) > 64:
 | 
			
		||||
            value = value[:32] + value[-32:]
 | 
			
		||||
| 
						 | 
				
			
			@ -51,5 +58,9 @@ class SessionCommandSerializerMixin(serializers.Serializer):
 | 
			
		|||
 | 
			
		||||
class SessionCommandSerializer(SessionCommandSerializerMixin, SimpleSessionCommandSerializer):
 | 
			
		||||
    """ 字段排序序列类 """
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
    class Meta(SimpleSessionCommandSerializer.Meta):
 | 
			
		||||
        fields = SimpleSessionCommandSerializer.Meta.fields + [
 | 
			
		||||
            'id', 'account', 'output', 'timestamp', 'timestamp_display', 'remote_addr'
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue