From 7b932d7afb9826b75441e831acdf4416009e2359 Mon Sep 17 00:00:00 2001 From: fawney19 Date: Thu, 18 Dec 2025 19:07:20 +0800 Subject: [PATCH] refactor: optimize middleware with pure ASGI implementation and enhance security measures - Replace BaseHTTPMiddleware with pure ASGI implementation in plugin middleware for better streaming response handling - Add trusted proxy count configuration for client IP extraction in reverse proxy environments - Implement audit log cleanup scheduler with configurable retention period - Replace plaintext token logging with SHA256 hash fingerprints for security - Fix database session lifecycle management in middleware - Improve request tracing and error logging throughout the system - Add comprehensive tests for pipeline architecture --- .../components/StandaloneKeyFormDialog.vue | 8 +- .../usage/components/RequestDetailDrawer.vue | 2 +- frontend/src/views/admin/SystemSettings.vue | 73 ++--- src/api/admin/api_keys/routes.py | 2 +- src/api/announcements/routes.py | 2 +- src/api/base/pipeline.py | 4 +- src/api/handlers/base/base_handler.py | 40 ++- src/api/handlers/base/chat_handler_base.py | 6 +- src/api/handlers/base/cli_handler_base.py | 4 +- src/clients/redis_client.py | 4 +- src/config/settings.py | 7 + src/database/database.py | 18 +- src/main.py | 6 +- src/middleware/plugin_middleware.py | 297 +++++++++--------- src/plugins/auth/jwt.py | 5 +- src/services/auth/jwt_blacklist.py | 15 +- src/services/auth/service.py | 4 +- src/services/system/cleanup_scheduler.py | 79 ++++- src/services/usage/service.py | 10 +- src/services/usage/stream.py | 3 +- src/services/user/apikey.py | 10 +- src/utils/auth_utils.py | 15 +- src/utils/request_utils.py | 44 ++- tests/api/test_pipeline.py | 58 ++++ 24 files changed, 497 insertions(+), 219 deletions(-) diff --git a/frontend/src/features/api-keys/components/StandaloneKeyFormDialog.vue b/frontend/src/features/api-keys/components/StandaloneKeyFormDialog.vue index 5f8cde6..35b9b13 100644 --- a/frontend/src/features/api-keys/components/StandaloneKeyFormDialog.vue +++ b/frontend/src/features/api-keys/components/StandaloneKeyFormDialog.vue @@ -132,7 +132,7 @@ type="number" min="1" max="10000" - placeholder="100" + placeholder="留空不限制" class="h-10" @update:model-value="(v) => form.rate_limit = parseNumberInput(v, { min: 1, max: 10000 })" /> @@ -376,7 +376,7 @@ const form = ref({ initial_balance_usd: 10, expire_days: undefined, never_expire: true, - rate_limit: 100, + rate_limit: undefined, auto_delete_on_expiry: false, allowed_providers: [], allowed_api_formats: [], @@ -389,7 +389,7 @@ function resetForm() { initial_balance_usd: 10, expire_days: undefined, never_expire: true, - rate_limit: 100, + rate_limit: undefined, auto_delete_on_expiry: false, allowed_providers: [], allowed_api_formats: [], @@ -408,7 +408,7 @@ function loadKeyData() { initial_balance_usd: props.apiKey.initial_balance_usd, expire_days: props.apiKey.expire_days, never_expire: props.apiKey.never_expire, - rate_limit: props.apiKey.rate_limit || 100, + rate_limit: props.apiKey.rate_limit, auto_delete_on_expiry: props.apiKey.auto_delete_on_expiry, allowed_providers: props.apiKey.allowed_providers || [], allowed_api_formats: props.apiKey.allowed_api_formats || [], diff --git a/frontend/src/features/usage/components/RequestDetailDrawer.vue b/frontend/src/features/usage/components/RequestDetailDrawer.vue index 23f891a..3603707 100644 --- a/frontend/src/features/usage/components/RequestDetailDrawer.vue +++ b/frontend/src/features/usage/components/RequestDetailDrawer.vue @@ -25,7 +25,7 @@
{{ detail?.model || '-' }} -