jumpserver/apps/settings/api/public.py

70 lines
2.5 KiB
Python

from django.conf import settings
from rest_framework import generics
from rest_framework.permissions import AllowAny
from authentication.permissions import IsValidUserOrConnectionToken
from common.const.choices import COUNTRY_CALLING_CODES
from common.utils import get_logger, lazyproperty
from common.utils.timezone import local_now
from .. import serializers
from ..utils import get_interface_setting_or_default
logger = get_logger(__name__)
__all__ = ['PublicSettingApi', 'OpenPublicSettingApi', 'ServerInfoApi']
class OpenPublicSettingApi(generics.RetrieveAPIView):
permission_classes = (AllowAny,)
serializer_class = serializers.PublicSettingSerializer
@lazyproperty
def interface_setting(self):
return get_interface_setting_or_default()
def get_object(self):
return {
"XPACK_ENABLED": settings.XPACK_ENABLED,
"INTERFACE": self.interface_setting,
"COUNTRY_CALLING_CODES": COUNTRY_CALLING_CODES
}
class PublicSettingApi(OpenPublicSettingApi):
permission_classes = (IsValidUserOrConnectionToken,)
serializer_class = serializers.PrivateSettingSerializer
def get_object(self):
values = super().get_object()
values.update({
"XPACK_LICENSE_IS_VALID": settings.XPACK_LICENSE_IS_VALID,
"XPACK_LICENSE_INFO": settings.XPACK_LICENSE_INFO,
"PASSWORD_RULE": {
'SECURITY_PASSWORD_MIN_LENGTH': settings.SECURITY_PASSWORD_MIN_LENGTH,
'SECURITY_ADMIN_USER_PASSWORD_MIN_LENGTH': settings.SECURITY_ADMIN_USER_PASSWORD_MIN_LENGTH,
'SECURITY_PASSWORD_UPPER_CASE': settings.SECURITY_PASSWORD_UPPER_CASE,
'SECURITY_PASSWORD_LOWER_CASE': settings.SECURITY_PASSWORD_LOWER_CASE,
'SECURITY_PASSWORD_NUMBER': settings.SECURITY_PASSWORD_NUMBER,
'SECURITY_PASSWORD_SPECIAL_CHAR': settings.SECURITY_PASSWORD_SPECIAL_CHAR,
},
})
serializer = self.serializer_class()
field_names = list(serializer.fields.keys())
for name in field_names:
if name in values:
continue
# 提前把异常爆出来
values[name] = getattr(settings, name)
return values
class ServerInfoApi(generics.RetrieveAPIView):
permission_classes = (IsValidUserOrConnectionToken,)
serializer_class = serializers.ServerInfoSerializer
def get_object(self):
return {
"CURRENT_TIME": local_now(),
}