diff --git a/assistant/package.json b/assistant/package.json index f2d8ca6..de8c4dc 100644 --- a/assistant/package.json +++ b/assistant/package.json @@ -49,7 +49,7 @@ "@kevisual/local-app-manager": "^0.1.32", "@kevisual/logger": "^0.0.4", "@kevisual/query": "0.0.49", - "@kevisual/router": "^0.0.83", + "@kevisual/router": "^0.0.84", "@kevisual/types": "^0.0.12", "@kevisual/use-config": "^1.0.30", "@opencode-ai/plugin": "^1.2.10", diff --git a/assistant/src/routes/call/index.ts b/assistant/src/routes/call/index.ts index 39a4529..df3dc1c 100644 --- a/assistant/src/routes/call/index.ts +++ b/assistant/src/routes/call/index.ts @@ -21,11 +21,11 @@ app.route({ }) }, }).define(async (ctx) => { - const { path, key = '' } = ctx.query; + const { path, key = '' } = ctx.args; if (!path) { ctx.throw('路径path不能为空'); } - const res = await ctx.run({ path, key, payload: ctx.query.payload || {} }, { + const res = await ctx.run({ path, key, payload: ctx.args.payload || {} }, { ...ctx }); ctx.forward(res); diff --git a/assistant/src/routes/client/ip.ts b/assistant/src/routes/client/ip.ts index 8277706..3751cb2 100644 --- a/assistant/src/routes/client/ip.ts +++ b/assistant/src/routes/client/ip.ts @@ -33,7 +33,8 @@ app.route({ title: '查看客户端 IP 地址', summary: '获取当前客户端的 IP 地址信息', }) - } + }, + middleware: ['auth-admin'] }) .define(async (ctx) => { const networkInterfaces = os.networkInterfaces(); diff --git a/assistant/src/routes/client/system.ts b/assistant/src/routes/client/system.ts index f491273..a749e79 100644 --- a/assistant/src/routes/client/system.ts +++ b/assistant/src/routes/client/system.ts @@ -76,10 +76,6 @@ app.route({ message: '客户端重启命令已执行', }; } catch (error) { - ctx.status = 500; - ctx.body = { - message: '重启客户端失败', - error: error.message, - }; + ctx.throw(500, '重启客户端失败'); } }).addTo(app); diff --git a/assistant/src/routes/cnb-board/index.ts b/assistant/src/routes/cnb-board/index.ts index eb8654f..81e5827 100644 --- a/assistant/src/routes/cnb-board/index.ts +++ b/assistant/src/routes/cnb-board/index.ts @@ -3,6 +3,20 @@ import { getLiveMdContent } from './live/live-content.ts'; import './cnb-dev-env.ts'; import z from 'zod'; import { execCommand } from '@/module/npm-install.ts'; +import { useKey } from '@kevisual/context'; + +app.route({ + path: 'cnb-board', + key: 'is-cnb-board', + description: '检查是否是 cnb-board 环境', + middleware: ['auth-admin'] +}).define(async (ctx) => { + const isCNB = useKey('CNB'); + ctx.body = { + isCNB: !!isCNB, + }; +}).addTo(app); + app.route({ path: 'cnb-board', key: 'live', diff --git a/assistant/src/routes/cnb-board/modules/index.ts b/assistant/src/routes/cnb-board/modules/index.ts new file mode 100644 index 0000000..75241e4 --- /dev/null +++ b/assistant/src/routes/cnb-board/modules/index.ts @@ -0,0 +1 @@ +export * from './is-cnb.ts'; \ No newline at end of file diff --git a/assistant/src/routes/cnb-board/modules/is-cnb.ts b/assistant/src/routes/cnb-board/modules/is-cnb.ts new file mode 100644 index 0000000..19b5d2f --- /dev/null +++ b/assistant/src/routes/cnb-board/modules/is-cnb.ts @@ -0,0 +1,6 @@ +import { useKey } from "@kevisual/context"; + +export const isCnb = () => { + const CNB = useKey('CNB'); + return !!CNB; +} \ No newline at end of file diff --git a/assistant/src/services/proxy/proxy-page-index.ts b/assistant/src/services/proxy/proxy-page-index.ts index ae866c6..4b14f25 100644 --- a/assistant/src/services/proxy/proxy-page-index.ts +++ b/assistant/src/services/proxy/proxy-page-index.ts @@ -9,11 +9,13 @@ import type { WebSocketListenerFun } from "@kevisual/router"; import WebSocket from 'ws'; import { renderNoAuthAndLogin } from '@/module/assistant/html/login.ts'; import { LiveCode } from '@/module/livecode/index.ts'; +import { isCnb } from '@/routes/cnb-board/modules/is-cnb.ts'; +import { is } from 'zod/v4/locales'; const localProxy = new LocalProxy({}); localProxy.initFromAssistantConfig(assistantConfig); const isOpenPath = (pathname: string): boolean => { - const openPaths = ['/root/home', '/root/cli', '/root/login']; + const openPaths = ['/root/home', '/root/cli', '/root/login', '/root/cli-center']; for (const openPath of openPaths) { if (pathname.startsWith(openPath)) { return true; @@ -81,12 +83,24 @@ const authFilter = async (req: http.IncomingMessage, res: http.ServerResponse) = } export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResponse) => { const _assistantConfig = assistantConfig.getCacheAssistantConfig(); - const home = _assistantConfig?.home || '/root/home'; + let home = _assistantConfig?.home const auth = _assistantConfig?.auth || {}; + // 没有管理员,需要去登陆 let noAdmin = !auth.username; + if (!home) { + if (isCnb()) { + home = '/root/cli-center/cnb-board' + } else { + home = '/root/cli-center/'; + } + } else { + if (!home.startsWith('/')) { + home = '/' + home; + } + } - const toSetting = () => { - res.writeHead(302, { Location: `/root/cli-center/` }); + const toLogin = (redirect?: string) => { + res.writeHead(302, { Location: `/root/login/` + (redirect ? `?redirect=${encodeURIComponent(redirect)}` : '') }); res.end(); return true; } @@ -94,10 +108,11 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp const pathname = decodeURIComponent(url.pathname); if (pathname === '/') { if (noAdmin) { - return toSetting(); + return toLogin(home + '/'); } - res.writeHead(302, { Location: `${home}/` }); - return res.end(); + res.writeHead(302, { Location: home }); + res.end(); + return } if (pathname.startsWith('/favicon.ico')) { res.statusCode = 404; @@ -162,8 +177,9 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp } const isOpen = isOpenPath(pathname) logger.debug('proxyRoute', { _user, _app, pathname, noAdmin, isOpen }); + // 没有管理员,且不是开放路径,去登录 if (noAdmin && !isOpen) { - return toSetting(); + return toLogin(); } if (_app && urls.length === 3) { // 重定向到 diff --git a/package.json b/package.json index 7b5d7a7..07a6fe1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kevisual/cli", - "version": "0.1.9", + "version": "0.1.10", "description": "envision 命令行工具", "type": "module", "basename": "/root/cli", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8eac3b5..b725045 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -185,8 +185,8 @@ importers: specifier: 0.0.49 version: 0.0.49 '@kevisual/router': - specifier: ^0.0.83 - version: 0.0.83 + specifier: ^0.0.84 + version: 0.0.84 '@kevisual/types': specifier: ^0.0.12 version: 0.0.12 @@ -1363,8 +1363,8 @@ packages: '@kevisual/router@0.0.80': resolution: {integrity: sha512-rVwi6Yf411bnNm2x94lMm+s4Csw0Yb7u/aj+VJJ59iouAYhjLuL7Rs1EcARhnQf47cegBJi6zozfGHgLsLHN2w==} - '@kevisual/router@0.0.83': - resolution: {integrity: sha512-CVazzM1rXVyvU7QcMQr0/EuqacRNEGalThDDLGQcvKEVHyduJ9yWddn6kezgWFCpNlPKhzSCKkIFuZVixNVxDQ==} + '@kevisual/router@0.0.84': + resolution: {integrity: sha512-l/TUFuqTJegB/S3FZQRBMUoz0Spvg8EzV3C/kBi/VO9KKCzjqZDVvhZJJbTQh9879CBY6vUy1ajo9WcLYnwbNA==} '@kevisual/types@0.0.12': resolution: {integrity: sha512-zJXH2dosir3jVrQ6QG4i0+iLQeT9gJ3H+cKXs8ReWboxBSYzUZO78XssVeVrFPsJ33iaAqo4q3DWbSS1dWGn7Q==} @@ -6800,7 +6800,7 @@ snapshots: dependencies: es-toolkit: 1.44.0 - '@kevisual/router@0.0.83': + '@kevisual/router@0.0.84': dependencies: es-toolkit: 1.44.0