Skip to content

Commit a0e856f

Browse files
authored
fix: provider source id contains slash will lead to 405 (#4162)
1 parent 8c94a00 commit a0e856f

2 files changed

Lines changed: 25 additions & 11 deletions

File tree

astrbot/dashboard/routes/config.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -185,23 +185,30 @@ def __init__(
185185
"/config/provider/list": ("GET", self.get_provider_config_list),
186186
"/config/provider/model_list": ("GET", self.get_provider_model_list),
187187
"/config/provider/get_embedding_dim": ("POST", self.get_embedding_dim),
188-
"/config/provider_sources/<provider_source_id>/models": (
188+
"/config/provider_sources/models": (
189189
"GET",
190190
self.get_provider_source_models,
191191
),
192-
"/config/provider_sources/<provider_source_id>/update": (
192+
"/config/provider_sources/update": (
193193
"POST",
194194
self.update_provider_source,
195195
),
196-
"/config/provider_sources/<provider_source_id>/delete": (
196+
"/config/provider_sources/delete": (
197197
"POST",
198198
self.delete_provider_source,
199199
),
200200
}
201201
self.register_routes()
202202

203-
async def delete_provider_source(self, provider_source_id: str):
203+
async def delete_provider_source(self):
204204
"""删除 provider_source,并更新关联的 providers"""
205+
post_data = await request.json
206+
if not post_data:
207+
return Response().error("缺少配置数据").__dict__
208+
209+
provider_source_id = post_data.get("id")
210+
if not provider_source_id:
211+
return Response().error("缺少 provider_source_id").__dict__
205212

206213
provider_sources = self.config.get("provider_sources", [])
207214
target_idx = next(
@@ -235,15 +242,16 @@ async def delete_provider_source(self, provider_source_id: str):
235242

236243
return Response().ok(message="删除 provider source 成功").__dict__
237244

238-
async def update_provider_source(self, provider_source_id: str):
245+
async def update_provider_source(self):
239246
"""更新或新增 provider_source,并重载关联的 providers"""
240-
241247
post_data = await request.json
242248
if not post_data:
243249
return Response().error("缺少配置数据").__dict__
244250

245251
new_source_config = post_data.get("config") or post_data
246-
original_id = provider_source_id
252+
original_id = post_data.get("original_id")
253+
if not original_id:
254+
return Response().error("缺少 original_id").__dict__
247255

248256
if not isinstance(new_source_config, dict):
249257
return Response().error("缺少或错误的配置数据").__dict__
@@ -684,11 +692,15 @@ async def get_embedding_dim(self):
684692
logger.error(traceback.format_exc())
685693
return Response().error(f"获取嵌入维度失败: {e!s}").__dict__
686694

687-
async def get_provider_source_models(self, provider_source_id: str):
695+
async def get_provider_source_models(self):
688696
"""获取指定 provider_source 支持的模型列表
689697
690698
本质上会临时初始化一个 Provider 实例,调用 get_models() 获取模型列表,然后销毁实例
691699
"""
700+
provider_source_id = request.args.get("source_id")
701+
if not provider_source_id:
702+
return Response().error("缺少参数 source_id").__dict__
703+
692704
try:
693705
from astrbot.core.provider.register import provider_cls_map
694706

dashboard/src/composables/useProviderSources.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ export function useProviderSources(options: UseProviderSourcesOptions) {
398398
if (!confirm(tm('providerSources.deleteConfirm', { id: source.id }))) return
399399

400400
try {
401-
await axios.post(`/api/config/provider_sources/${source.id}/delete`)
401+
await axios.post('/api/config/provider_sources/delete', { id: source.id })
402402

403403
providers.value = providers.value.filter((p) => p.provider_source_id !== source.id)
404404
providerSources.value = providerSources.value.filter((s) => s.id !== source.id)
@@ -423,7 +423,7 @@ export function useProviderSources(options: UseProviderSourcesOptions) {
423423
savingSource.value = true
424424
const originalId = selectedProviderSourceOriginalId.value || selectedProviderSource.value.id
425425
try {
426-
const response = await axios.post(`/api/config/provider_sources/${originalId}/update`, {
426+
const response = await axios.post('/api/config/provider_sources/update', {
427427
config: editableProviderSource.value,
428428
original_id: originalId
429429
})
@@ -478,7 +478,9 @@ export function useProviderSources(options: UseProviderSourcesOptions) {
478478
loadingModels.value = true
479479
try {
480480
const sourceId = editableProviderSource.value?.id || selectedProviderSource.value.id
481-
const response = await axios.get(`/api/config/provider_sources/${sourceId}/models`)
481+
const response = await axios.get('/api/config/provider_sources/models', {
482+
params: { source_id: sourceId }
483+
})
482484
if (response.data.status === 'ok') {
483485
const metadataMap = response.data.data.model_metadata || {}
484486
modelMetadata.value = metadataMap

0 commit comments

Comments
 (0)