dapi/wwwroot/do_update_apikey.dspy
yumoqing c210f30322 feat: 客户API Key管理 - 创建/更新/复制/删除功能
1. json/downapp.json: 添加更新和删除工具栏按钮,移除noedit限制
2. wwwroot/update_apikey.dspy: 查询并返回预填充的更新表单
3. wwwroot/do_update_apikey.dspy: 处理更新表单提交
4. wwwroot/delete_apikey.dspy: 删除API Key及关联应用
5. wwwroot/apikey_manage.ui: 独立API Key管理页面
6. scripts/load_path.py: 使用通配符%/dapi/%注册所有路径
2026-05-31 12:09:45 +08:00

53 lines
1.4 KiB
Plaintext

debug(f'{params_kw=}')
dbname = get_module_dbname('dapi')
db = DBPools()
userid = await get_user()
orgid = await get_userorgid()
if not userid:
return UiError(title='更新API Key', message='需要登录')
try:
async with db.sqlorContext(dbname) as sor:
# 验证权限
ns = {
"id": params_kw.id,
"orgid": orgid
}
sql = """select * from downapp
where id = ${id}$ and orgid = ${orgid}$"""
recs = await sor.sqlExe(sql, ns)
if not recs:
return UiError(title='更新API Key', message='API Key不存在或无权访问')
# 更新downapp
update_ns = {
"id": params_kw.id,
"name": params_kw.appname,
"description": params_kw.description,
"allowedips": params_kw.allowedips
}
await sor.U('downapp', update_ns)
# 如果需要重新生成apikey
if params_kw.get('regenerate_apikey') == 'true':
new_apikey = password_encode(uuid())
keys = await sor.R('downapikey', {"dappid": params_kw.id})
if keys:
key_data = {"id": keys[0].id, "apikey": new_apikey}
await sor.U('downapikey', key_data)
kw = {
"binds": [
{
"wid": "self",
"event": "dismissed",
"actiontype": "script",
"target": "app.sage_main_content",
"script": "this.render()"
}
]
}
return UiMessage(title="更新API Key", message="API Key更新成功", **kw)
except Exception as e:
return UiError(title='更新API Key', message=f'更新失败: {e}')