Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/apps/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from apps.system.api import login, user, aimodel, workspace, assistant, parameter, apikey
from apps.terminology.api import terminology
from apps.settings.api import base
#from apps.audit.api import audit_api
#from audit.api import audit_api


api_router = APIRouter()
Expand Down
5 changes: 5 additions & 0 deletions backend/apps/chat/api/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ def inner():


@router.post("/rename", response_model=str, summary=f"{PLACEHOLDER_PREFIX}rename_chat")
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.CHAT,
resource_id_expr="chat.id"
))
async def rename(session: SessionDep, chat: RenameChat):
try:
return rename_chat(session=session, rename_object=chat)
Expand Down
5 changes: 5 additions & 0 deletions backend/apps/dashboard/api/dashboard_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ async def create_resource_api(session: SessionDep, user: CurrentUser, dashboard:


@router.post("/update_resource", response_model=BaseDashboard)
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.DASHBOARD,
resource_id_expr="dashboard.id"
))
async def update_resource_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
return update_resource(session=session, user=user, dashboard=dashboard)

Expand Down
7 changes: 7 additions & 0 deletions backend/apps/data_training/api/data_training.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
from common.core.deps import SessionDep, CurrentUser, Trans
from common.utils.data_format import DataFormat
from common.utils.excel import get_excel_column_count
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log

router = APIRouter(tags=["SQL Examples"], prefix="/system/data-training")

Expand All @@ -40,6 +42,7 @@ async def pager(session: SessionDep, current_user: CurrentUser, current_page: in


@router.put("", response_model=int, summary=f"{PLACEHOLDER_PREFIX}create_or_update_dt")
@system_log(LogConfig(operation_type=OperationType.CREATE_OR_UPDATE, module=OperationModules.DATA_TRAINING,resource_id_expr='info.id', result_id_expr="result_self"))
async def create_or_update(session: SessionDep, current_user: CurrentUser, trans: Trans, info: DataTrainingInfo):
oid = current_user.oid
if info.id:
Expand All @@ -49,16 +52,19 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans


@router.delete("", summary=f"{PLACEHOLDER_PREFIX}delete_dt")
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.DATA_TRAINING,resource_id_expr='id_list'))
async def delete(session: SessionDep, id_list: list[int]):
delete_training(session, id_list)


@router.get("/{id}/enable/{enabled}", summary=f"{PLACEHOLDER_PREFIX}enable_dt")
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.DATA_TRAINING,resource_id_expr='id'))
async def enable(session: SessionDep, id: int, enabled: bool, trans: Trans):
enable_training(session, id, enabled, trans)


@router.get("/export", summary=f"{PLACEHOLDER_PREFIX}export_dt")
@system_log(LogConfig(operation_type=OperationType.EXPORT, module=OperationModules.DATA_TRAINING))
async def export_excel(session: SessionDep, trans: Trans, current_user: CurrentUser,
question: Optional[str] = Query(None, description="搜索术语(可选)")):
def inner():
Expand Down Expand Up @@ -148,6 +154,7 @@ def inner():


@router.post("/uploadExcel", summary=f"{PLACEHOLDER_PREFIX}upload_excel_dt")
@system_log(LogConfig(operation_type=OperationType.IMPORT, module=OperationModules.DATA_TRAINING))
async def upload_excel(trans: Trans, current_user: CurrentUser, file: UploadFile = File(...)):
ALLOWED_EXTENSIONS = {"xlsx", "xls"}
if not file.filename.lower().endswith(tuple(ALLOWED_EXTENSIONS)):
Expand Down
4 changes: 4 additions & 0 deletions backend/apps/datasource/api/recommended_problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
save_recommended_problem, get_datasource_recommended_base
from apps.datasource.models.datasource import RecommendedProblemBase
from common.core.deps import SessionDep, CurrentUser
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log

router = APIRouter(tags=["recommended_problem"], prefix="/recommended_problem")

Expand All @@ -19,6 +21,8 @@ async def datasource_recommended(session: SessionDep, ds_id: int):


@router.post("/save_recommended_problem")
@system_log(
LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.DATASOURCE, resource_id_expr="data_info.datasource_id"))
async def datasource_recommended(session: SessionDep, user: CurrentUser, data_info: RecommendedProblemBase):
update_ds_recommended_config(session, data_info.datasource_id, data_info.recommended_config)
return save_recommended_problem(session, user, data_info)
15 changes: 11 additions & 4 deletions backend/apps/system/api/aimodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
from common.utils.utils import SQLBotLogUtil, prepare_model_arg

router = APIRouter(tags=["system_model"], prefix="/system/aimodel")
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log

@router.post("/status", include_in_schema=False)
@require_permissions(permission=SqlbotPermission(role=['admin']))
Expand Down Expand Up @@ -54,7 +56,8 @@ async def check_default(session: SessionDep, trans: Trans):
raise Exception(trans('i18n_llm.miss_default'))

@router.put("/default/{id}", summary=f"{PLACEHOLDER_PREFIX}system_model_default", description=f"{PLACEHOLDER_PREFIX}system_model_default")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.AI_MODEL, resource_id_expr="id"))
async def set_default(session: SessionDep, id: int = Path(description="ID")):
db_model = session.get(AiModelDetail, id)
if not db_model:
Expand Down Expand Up @@ -122,7 +125,8 @@ async def get_model_by_id(
return AiModelEditor(**data)

@router.post("", summary=f"{PLACEHOLDER_PREFIX}system_model_create", description=f"{PLACEHOLDER_PREFIX}system_model_create")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.AI_MODEL, result_id_expr="id"))
async def add_model(
session: SessionDep,
creator: AiModelCreator
Expand All @@ -137,9 +141,11 @@ async def add_model(
detail.default_model = True
session.add(detail)
session.commit()
return detail

@router.put("", summary=f"{PLACEHOLDER_PREFIX}system_model_update", description=f"{PLACEHOLDER_PREFIX}system_model_update")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.AI_MODEL, resource_id_expr="editor.id"))
async def update_model(
session: SessionDep,
editor: AiModelEditor
Expand All @@ -155,7 +161,8 @@ async def update_model(
session.commit()

@router.delete("/{id}", summary=f"{PLACEHOLDER_PREFIX}system_model_del", description=f"{PLACEHOLDER_PREFIX}system_model_del")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.AI_MODEL, resource_id_expr="id"))
async def delete_model(
session: SessionDep,
trans: Trans,
Expand Down
5 changes: 5 additions & 0 deletions backend/apps/system/api/apikey.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@
import secrets

router = APIRouter(tags=["system_apikey"], prefix="/system/apikey", include_in_schema=False)
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log

@router.get("")
async def grid(session: SessionDep, current_user: CurrentUser) -> list[ApikeyGridItem]:
query = select(ApiKeyModel).where(ApiKeyModel.uid == current_user.id).order_by(ApiKeyModel.create_time.desc())
return session.exec(query).all()

@router.post("")
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.API_KEY,result_id_expr='result.self'))
async def create(session: SessionDep, current_user: CurrentUser):
count = session.exec(select(func.count()).select_from(ApiKeyModel)).one()
if count >= 5:
Expand All @@ -34,6 +37,7 @@ async def create(session: SessionDep, current_user: CurrentUser):
return api_key.id

@router.put("/status")
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.API_KEY,resource_id_expr='id'))
async def status(session: SessionDep, current_user: CurrentUser, dto: ApikeyStatus):
api_key = session.get(ApiKeyModel, dto.id)
if not api_key:
Expand All @@ -48,6 +52,7 @@ async def status(session: SessionDep, current_user: CurrentUser, dto: ApikeyStat
session.commit()

@router.delete("/{id}")
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.API_KEY,resource_id_expr='id'))
async def delete(session: SessionDep, current_user: CurrentUser, id: int):
api_key = session.get(ApiKeyModel, id)
if not api_key:
Expand Down
7 changes: 6 additions & 1 deletion backend/apps/system/api/assistant.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
from common.utils.utils import get_origin_from_referer, origin_match_domain

router = APIRouter(tags=["system_assistant"], prefix="/system/assistant")
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log


@router.get("/info/{id}", include_in_schema=False)
Expand Down Expand Up @@ -168,12 +170,14 @@ async def query_advanced_application(session: SessionDep):


@router.post("", summary=f"{PLACEHOLDER_PREFIX}assistant_create_api", description=f"{PLACEHOLDER_PREFIX}assistant_create_api")
@system_log(LogConfig(operation_type=OperationType.CREATE, module=OperationModules.APPLICATION, result_id_expr="id"))
async def add(request: Request, session: SessionDep, creator: AssistantBase):
await save(request, session, creator)
return await save(request, session, creator)


@router.put("", summary=f"{PLACEHOLDER_PREFIX}assistant_update_api", description=f"{PLACEHOLDER_PREFIX}assistant_update_api")
@clear_cache(namespace=CacheNamespace.EMBEDDED_INFO, cacheName=CacheName.ASSISTANT_INFO, keyExpression="editor.id")
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.APPLICATION, resource_id_expr="editor.id"))
async def update(request: Request, session: SessionDep, editor: AssistantDTO):
id = editor.id
db_model = session.get(AssistantModel, id)
Expand All @@ -197,6 +201,7 @@ async def get_one(session: SessionDep, id: int = Path(description="ID")):

@router.delete("/{id}", summary=f"{PLACEHOLDER_PREFIX}assistant_del_api", description=f"{PLACEHOLDER_PREFIX}assistant_del_api")
@clear_cache(namespace=CacheNamespace.EMBEDDED_INFO, cacheName=CacheName.ASSISTANT_INFO, keyExpression="id")
@system_log(LogConfig(operation_type=OperationType.DELETE, module=OperationModules.APPLICATION, resource_id_expr="id"))
async def delete(request: Request, session: SessionDep, id: int = Path(description="ID")):
db_model = session.get(AssistantModel, id)
if not db_model:
Expand Down
4 changes: 3 additions & 1 deletion backend/apps/system/api/parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from common.core.deps import SessionDep

router = APIRouter(tags=["system/parameter"], prefix="/system/parameter", include_in_schema=False)

from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log

@router.get("/login")
async def get_login_args(session: SessionDep) -> list[SysArgModel]:
Expand All @@ -21,6 +22,7 @@ async def get_args(session: SessionDep) -> list[SysArgModel]:

@router.post("", )
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(operation_type=OperationType.UPDATE, module=OperationModules.PARAMS_SETTING))
async def save_args(session: SessionDep, request: Request):
return await save_parameter_args(session=session, request=request)

Expand Down
43 changes: 41 additions & 2 deletions backend/apps/system/api/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from apps.system.schemas.auth import CacheName, CacheNamespace
from apps.system.schemas.permission import SqlbotPermission, require_permissions
from apps.system.schemas.system_schema import PwdEditor, UserCreator, UserEditor, UserGrid, UserInfoDTO, UserLanguage, UserStatus, UserWs
from sqlbot_xpack.audit.models.log_model import OperationType, OperationModules
from sqlbot_xpack.audit.schemas.logger_decorator import LogConfig, system_log
from common.core.deps import CurrentUser, SessionDep, Trans
from common.core.pagination import Paginator
from common.core.schemas import PaginatedResponse, PaginationParams
Expand Down Expand Up @@ -117,6 +119,11 @@ async def ws_options(session: SessionDep, current_user: CurrentUser, trans: Tran

@router.put("/ws/{oid}", summary=f"{PLACEHOLDER_PREFIX}switch_oid_api", description=f"{PLACEHOLDER_PREFIX}switch_oid_api")
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.USER,
resource_id_expr="editor.id"
))
async def ws_change(session: SessionDep, current_user: CurrentUser, trans:Trans, oid: int = Path(description=f"{PLACEHOLDER_PREFIX}oid")):
ws_list: list[UserWs] = await user_ws_options(session, current_user.id)
if not any(x.id == oid for x in ws_list):
Expand All @@ -141,8 +148,13 @@ async def query(session: SessionDep, trans: Trans, id: int = Path(description=f"

@router.post("", summary=f"{PLACEHOLDER_PREFIX}user_create_api", description=f"{PLACEHOLDER_PREFIX}user_create_api")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(
operation_type=OperationType.CREATE,
module=OperationModules.USER,
result_id_expr="id"
))
async def user_create(session: SessionDep, creator: UserCreator, trans: Trans):
await create(session=session, creator=creator, trans=trans)
return await create(session=session, creator=creator, trans=trans)

async def create(session: SessionDep, creator: UserCreator, trans: Trans):
if check_account_exists(session=session, account=creator.account):
Expand All @@ -169,11 +181,17 @@ async def create(session: SessionDep, creator: UserCreator, trans: Trans):
session.add_all(db_model_list)
user_model.oid = creator.oid_list[0]
session.add(user_model)
return user_model


@router.put("", summary=f"{PLACEHOLDER_PREFIX}user_update_api", description=f"{PLACEHOLDER_PREFIX}user_update_api")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="editor.id")
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.USER,
resource_id_expr="editor.id"
))
async def update(session: SessionDep, editor: UserEditor, trans: Trans):
user_model: UserModel = get_db_user(session = session, user_id = editor.id)
if not user_model:
Expand Down Expand Up @@ -207,7 +225,12 @@ async def update(session: SessionDep, editor: UserEditor, trans: Trans):
session.add(user_model)

@router.delete("/{id}", summary=f"{PLACEHOLDER_PREFIX}user_del_api", description=f"{PLACEHOLDER_PREFIX}user_del_api")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@require_permissions(permission=SqlbotPermission(role=['admin']))
@system_log(LogConfig(
operation_type=OperationType.DELETE,
module=OperationModules.USER,
resource_id_expr="id"
))
async def delete(session: SessionDep, id: int = Path(description=f"{PLACEHOLDER_PREFIX}uid")):
await single_delete(session, id)

Expand All @@ -231,6 +254,11 @@ async def langChange(session: SessionDep, current_user: CurrentUser, trans: Tran
@router.patch("/pwd/{id}", summary=f"{PLACEHOLDER_PREFIX}reset_pwd", description=f"{PLACEHOLDER_PREFIX}reset_pwd")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="id")
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.USER,
resource_id_expr="id"
))
async def pwdReset(session: SessionDep, current_user: CurrentUser, trans: Trans, id: int = Path(description=f"{PLACEHOLDER_PREFIX}uid")):
if not current_user.isAdmin:
raise Exception(trans('i18n_permission.no_permission', url = " patch[/user/pwd/id],", msg = trans('i18n_permission.only_admin')))
Expand All @@ -240,6 +268,11 @@ async def pwdReset(session: SessionDep, current_user: CurrentUser, trans: Trans,

@router.put("/pwd", summary=f"{PLACEHOLDER_PREFIX}update_pwd", description=f"{PLACEHOLDER_PREFIX}update_pwd")
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="current_user.id")
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.USER,
result_id_expr="id"
))
async def pwdUpdate(session: SessionDep, current_user: CurrentUser, trans: Trans, editor: PwdEditor):
new_pwd = editor.new_pwd
if not check_pwd_format(new_pwd):
Expand All @@ -249,11 +282,17 @@ async def pwdUpdate(session: SessionDep, current_user: CurrentUser, trans: Trans
raise Exception(trans('i18n_error', key = trans('i18n_user.password')))
db_user.password = md5pwd(new_pwd)
session.add(db_user)
return db_user


@router.patch("/status", summary=f"{PLACEHOLDER_PREFIX}update_status", description=f"{PLACEHOLDER_PREFIX}update_status")
@require_permissions(permission=SqlbotPermission(role=['admin']))
@clear_cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="statusDto.id")
@system_log(LogConfig(
operation_type=OperationType.UPDATE,
module=OperationModules.USER,
resource_id_expr="statusDto.id"
))
async def statusChange(session: SessionDep, current_user: CurrentUser, trans: Trans, statusDto: UserStatus):
if not current_user.isAdmin:
raise Exception(trans('i18n_permission.no_permission', url = ", ", msg = trans('i18n_permission.only_admin')))
Expand Down
Loading