feat: system profile (#3193)

This commit is contained in:
shaohuzhang1 2025-06-04 17:16:35 +08:00 committed by GitHub
parent 28c09ae220
commit 445a87143b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 98 additions and 1 deletions

View File

@ -20,8 +20,10 @@ class Cache_Version(Enum):
ROLE_LIST = "ROLE:LIST", lambda user_id: user_id
# 当前用户所有权限
PERMISSION_LIST = "PERMISSION:LIST", lambda user_id: user_id
# 验证码
CAPTCHA = "CAPTCHA", lambda captcha: captcha
# 系统
SYSTEM = "SYSTEM", lambda key: key
def get_version(self):
return self.value[0]

View File

@ -155,3 +155,5 @@ STATIC_URL = 'static/'
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
edition = 'CE'

View File

@ -0,0 +1,22 @@
# coding=utf-8
"""
@project: MaxKB
@Author虎虎
@file system_setting.py
@date2025/6/4 16:34
@desc:
"""
from common.mixins.api_mixin import APIMixin
from common.result import ResultSerializer
from system_manage.serializers.system import SystemProfileResponseSerializer
class SystemProfileResult(ResultSerializer):
def get_data(self):
return SystemProfileResponseSerializer()
class SystemProfileAPI(APIMixin):
@staticmethod
def get_response():
return SystemProfileResult

View File

@ -0,0 +1,41 @@
# coding=utf-8
"""
@project: MaxKB
@Author虎虎
@file system.py
@date2025/6/4 16:01
@desc:
"""
import os
from django.db import models
from rest_framework import serializers
from django.core.cache import cache
from common.constants.cache_version import Cache_Version
from maxkb import settings
class SettingType(models.CharField):
# Community Edition
CE = "CE", "社区"
# Enterprise Edition
PE = "PE", "专业版"
# Professional Edition
EE = "EE", '企业版'
class SystemProfileResponseSerializer(serializers.Serializer):
version = serializers.CharField(required=True, label="version")
edition = serializers.CharField(required=True, label="edition")
license_is_valid = serializers.BooleanField(required=True, label="License is valid")
class SystemProfileSerializer(serializers.Serializer):
@staticmethod
def profile():
version = os.environ.get('MAXKB_VERSION')
license_is_valid = cache.get(Cache_Version.SYSTEM.get_key(key='license_is_valid'),
version=Cache_Version.SYSTEM.get_version())
return {'version': version, 'edition': settings.edition,
'license_is_valid': license_is_valid if license_is_valid is not None else False}

View File

@ -7,4 +7,5 @@ urlpatterns = [
path('workspace/<str:workspace_id>/user_resource_permission/user/<str:user_id>',
views.WorkSpaceUserResourcePermissionView.as_view()),
path('email_setting', views.SystemSetting.Email.as_view()),
path('profile', views.SystemProfile.as_view())
]

View File

@ -8,3 +8,4 @@
"""
from .user_resource_permission import *
from .email_setting import *
from .system_profile import *

View File

@ -0,0 +1,28 @@
# coding=utf-8
"""
@project: MaxKB
@Author虎虎
@file system_profile.py
@date2025/6/4 15:59
@desc:
"""
from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema
from rest_framework.request import Request
from rest_framework.views import APIView
from common import result
from system_manage.api.system import SystemProfileAPI
from system_manage.serializers.system import SystemProfileSerializer
class SystemProfile(APIView):
@extend_schema(
methods=['GET'],
description=_('Get MaxKB related information'),
operation_id=_('Get MaxKB related information'), # type: ignore
responses=SystemProfileAPI.get_response(),
tags=[_('System parameters')] # type: ignore
)
def get(self, request: Request):
return result.success(SystemProfileSerializer.profile())