From d8461f8f714756a4bd5c60781008de1f594dd3c2 Mon Sep 17 00:00:00 2001 From: "val.istar.guo" Date: Tue, 13 Aug 2024 23:29:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8F=92=E4=BB=B6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=B0=86=E8=87=AA=E5=AE=9A=E4=B9=89Host=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E4=B8=BA=E9=9D=9E=E6=B3=95=E5=9C=B0=E5=9D=80=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/young-roses-yell.md | 6 ++++++ .../src/modules/plugin/web-socket.service.ts | 14 ++++++++++---- .../pages/administration/plugin-management.vue | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 .changeset/young-roses-yell.md diff --git a/.changeset/young-roses-yell.md b/.changeset/young-roses-yell.md new file mode 100644 index 0000000..050f737 --- /dev/null +++ b/.changeset/young-roses-yell.md @@ -0,0 +1,6 @@ +--- +"@opendoc/frontend": patch +"@opendoc/backend": patch +--- + +修复插件配置将自定义 Host 识别为非法地址的问题 diff --git a/app/backend/src/modules/plugin/web-socket.service.ts b/app/backend/src/modules/plugin/web-socket.service.ts index 7b7d09a..ae7b995 100644 --- a/app/backend/src/modules/plugin/web-socket.service.ts +++ b/app/backend/src/modules/plugin/web-socket.service.ts @@ -19,12 +19,11 @@ export class WebSocketService { ) {} async connect(url: string): Promise<[WebSocket, PluginMetadata]> { - if (!isURL(url, { require_host: true, require_protocol: true, protocols: ['ws'] })) { + if (!isURL(url, { require_host: true, require_tld: false, require_protocol: true, protocols: ['ws'] })) { throw new BadRequestException('Invalid URL') } const ttl = this.appConfig.ttl - console.log('🚀 ~ WebSocketService ~ connect ~ ttl:', ttl) const appName = this.appConfig.appName const logger = this.logger @@ -52,7 +51,7 @@ export class WebSocketService { ws.off('message', onMessage) ws.off('error', onError) - reject(new BadRequestException('Invalid Websocket message')) + reject(new BadRequestException('编译器回应了无法识别的数据格式,请检查 OpenDoc 与 Plugin 版本是否兼容')) } } @@ -60,7 +59,14 @@ export class WebSocketService { logger.error(`Plugin ${url} is breakdown`) clearTimeout(ttlHandler) ws.close() - reject(err) + + if ('code' in err && err['code'] === 'ENOTFOUND') { + reject(new BadRequestException(`无法连接至 Plugin(${url})`)) + } else if ('code' in err && err['code'] === 'ECONNREFUSED') { + reject(new BadRequestException(`Plugin(${url}) 拒绝连接`)) + } else { + reject(err) + } } const ws = new WebSocket(url, { diff --git a/app/frontend/pages/administration/plugin-management.vue b/app/frontend/pages/administration/plugin-management.vue index cccebb6..aa3d3c8 100644 --- a/app/frontend/pages/administration/plugin-management.vue +++ b/app/frontend/pages/administration/plugin-management.vue @@ -15,7 +15,7 @@ const { status, data: plugins, execute: reload } = useAsyncData(async () => { const urlInput = ref('') const pluginUrl = computed(() => `ws://${urlInput.value}`) -const isValidUrl = computed(() => isURL(pluginUrl.value, { require_host: true, require_protocol: true, protocols: ['ws'] })) +const isValidUrl = computed(() => isURL(pluginUrl.value, { require_host: true, require_tld: false, require_protocol: false, protocols: ['ws'] })) const { pending: appending, execute: create } = useAsyncFn(async () => { if (!pluginUrl.value) return