v0.16.0: 后台体验升级——i18n(默认英文)/浅深主题/字号放大/关站维护页/个人设置(头像·语言·主题·密码·MCP Token)/权限管理(菜单+MCP·API)/询盘抽屉翻倍+PHP序列化数据清洗(22.7万行)+去裸JSON
This commit is contained in:
+16
-1
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
import { SQL } from "bun";
|
||||
import { parseImageSize } from "../src/server/image-size";
|
||||
import pkg from "../package.json";
|
||||
|
||||
/** # 成员变量 数据库连接(与站点同库;单连接足够 MCP 串行调用) **/
|
||||
const sql = new SQL(process.env.DATABASE_URL || "postgres://dusuniot:dusuniot@127.0.0.1:25432/dusuniot", { max: 2 });
|
||||
@@ -451,6 +452,20 @@ function send(msg: Record<string, unknown>) {
|
||||
/** # 类型 已初始化标记(initialize 之前拒绝 tools/* 调用) **/
|
||||
let initialized = false;
|
||||
|
||||
// ---- 访问令牌校验(v0.16.0)----
|
||||
// 设置环境变量 DUSUN_MCP_TOKEN 后启动即进入令牌模式:值必须命中某后台角色用户的
|
||||
// users.mcp_token(个人设置页生成),且该角色在 权限管理 里允许 MCP;否则进程退出。
|
||||
// 未设置环境变量保持旧行为(本地直连受信任环境,不校验),向后兼容。
|
||||
if (process.env.DUSUN_MCP_TOKEN) {
|
||||
const { findMcpTokenUser } = await import("../src/server/permissions");
|
||||
const hit = await findMcpTokenUser(process.env.DUSUN_MCP_TOKEN).catch(() => null);
|
||||
if (!hit) {
|
||||
console.error("dusuniot-cms: DUSUN_MCP_TOKEN 无效或该角色未获 MCP 权限,拒绝启动");
|
||||
process.exit(1);
|
||||
}
|
||||
console.error(`dusuniot-cms: token auth ok (${hit})`);
|
||||
}
|
||||
|
||||
/** # 函数 逐行解析 stdin 请求并分发(initialize / tools/list / tools/call / ping) */
|
||||
for await (const chunk of Bun.stdin.stream()) {
|
||||
const text = new TextDecoder().decode(chunk);
|
||||
@@ -472,7 +487,7 @@ for await (const chunk of Bun.stdin.stream()) {
|
||||
result: {
|
||||
protocolVersion: "2024-11-05",
|
||||
capabilities: { tools: {} },
|
||||
serverInfo: { name: "dusuniot-cms", version: process.env.npm_package_version ?? "0.11.0" },
|
||||
serverInfo: { name: "dusuniot-cms", version: pkg.version },
|
||||
},
|
||||
});
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user