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.
jumpserver/apps/settings/serializers/feature.py

123 lines
4.3 KiB

import uuid
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from assets.const import Protocol
from common.serializers.fields import EncryptedField
__all__ = [
'AnnouncementSettingSerializer', 'OpsSettingSerializer',
'VaultSettingSerializer', 'TicketSettingSerializer',
'ChatAISettingSerializer'
]
class AnnouncementSerializer(serializers.Serializer):
ID = serializers.CharField(required=False, allow_blank=True, allow_null=True)
SUBJECT = serializers.CharField(required=True, max_length=1024, label=_("Subject"))
CONTENT = serializers.CharField(label=_("Content"))
LINK = serializers.URLField(
required=False, allow_null=True, allow_blank=True,
label=_("More url"), default='',
)
def to_representation(self, instance):
defaults = {'ID': '', 'SUBJECT': '', 'CONTENT': '', 'LINK': '', 'ENABLED': False}
data = {**defaults, **instance}
return super().to_representation(data)
def to_internal_value(self, data):
data['ID'] = str(uuid.uuid4())
return super().to_internal_value(data)
class AnnouncementSettingSerializer(serializers.Serializer):
PREFIX_TITLE = _('Announcement')
ANNOUNCEMENT_ENABLED = serializers.BooleanField(label=_('Enable announcement'), default=True)
ANNOUNCEMENT = AnnouncementSerializer(label=_("Announcement"))
class VaultSettingSerializer(serializers.Serializer):
PREFIX_TITLE = _('HCP Vault')
VAULT_ENABLED = serializers.BooleanField(
required=False, label=_('Enable Vault'), read_only=True
)
VAULT_HCP_HOST = serializers.CharField(
max_length=256, allow_blank=True, required=False, label=_('Host')
)
VAULT_HCP_TOKEN = EncryptedField(
max_length=256, allow_blank=True, required=False, label=_('Token'), default=''
)
VAULT_HCP_MOUNT_POINT = serializers.CharField(
max_length=256, allow_blank=True, required=False, label=_('Mount Point')
)
class ChatAISettingSerializer(serializers.Serializer):
PREFIX_TITLE = _('Chat AI')
GPT_MODEL_CHOICES = []
CHAT_AI_ENABLED = serializers.BooleanField(
required=False, label=_('Enable Vault')
)
GPT_BASE_URL = serializers.CharField(
max_length=256, allow_blank=True, required=False, label=_('Base Url')
)
GPT_API_KEY = EncryptedField(
max_length=256, allow_blank=True, required=False, label=_('Api Key'),
)
GPT_PROXY = serializers.CharField(
max_length=256, allow_blank=True, required=False, label=_('Proxy')
)
GPT_MODEL = serializers.ChoiceField(
default='', choices=GPT_MODEL_CHOICES, label=_("GPT Model"), required=False,
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.set_GPT_MODEL_choices()
def set_GPT_MODEL_choices(self):
field_gpt_model = self.fields.get("GPT_MODEL")
if not field_gpt_model:
return
gpt_api_model = Protocol.gpt_protocols()[Protocol.chatgpt]['setting']['api_mode']
choices = gpt_api_model['choices']
field_gpt_model._choices = choices
field_gpt_model.default = gpt_api_model['default']
cls = self.__class__
if cls.GPT_MODEL_CHOICES:
return
cls.GPT_MODEL_CHOICES.extend(choices)
class TicketSettingSerializer(serializers.Serializer):
PREFIX_TITLE = _('Ticket')
TICKETS_ENABLED = serializers.BooleanField(required=False, default=True, label=_("Enable tickets"))
TICKET_AUTHORIZE_DEFAULT_TIME = serializers.IntegerField(
min_value=1, max_value=999999, required=False,
label=_("Ticket authorize default time")
)
TICKET_AUTHORIZE_DEFAULT_TIME_UNIT = serializers.ChoiceField(
choices=[('day', _("day")), ('hour', _("hour"))],
label=_("Ticket authorize default time unit"), required=False,
)
class OpsSettingSerializer(serializers.Serializer):
PREFIX_TITLE = _('Feature')
SECURITY_COMMAND_EXECUTION = serializers.BooleanField(
required=False, label=_('Operation center'),
help_text=_('Allow user run batch command or not using ansible')
)
SECURITY_COMMAND_BLACKLIST = serializers.ListField(
child=serializers.CharField(max_length=1024, ),
label=_('Operation center command blacklist'),
help_text=_("Commands that are not allowed execute.")
)