From cd7d5ed6650c1cb82e35fe57154ef02d9e185a46 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Mon, 1 Apr 2024 22:44:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BC=80=E5=8F=91API?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=B1=80=E5=9F=9F=E7=BD=91=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E9=80=89=E9=A1=B9=EF=BC=88#1828=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/defaultSetting.ts | 1 + src/common/types/app_setting.d.ts | 9 +++++++-- src/common/types/open_api.d.ts | 1 + src/lang/en-us.json | 1 + src/lang/zh-cn.json | 1 + src/lang/zh-tw.json | 1 + src/main/modules/openApi/index.ts | 6 +++--- src/main/modules/winMain/rendererEvent/openAPI.ts | 2 +- src/renderer/core/useApp/useOpenAPI.ts | 15 +++++++++++---- .../views/Setting/components/SettingOpenAPI.vue | 5 ++++- 10 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/common/defaultSetting.ts b/src/common/defaultSetting.ts index 121c4684..448dab89 100644 --- a/src/common/defaultSetting.ts +++ b/src/common/defaultSetting.ts @@ -138,6 +138,7 @@ const defaultSetting: LX.AppSetting = { 'openAPI.enable': false, 'openAPI.port': '23330', + 'openAPI.bindLan': false, // 'theme.id': 'blue_plus', 'theme.id': 'green', diff --git a/src/common/types/app_setting.d.ts b/src/common/types/app_setting.d.ts index edc826c7..04521787 100644 --- a/src/common/types/app_setting.d.ts +++ b/src/common/types/app_setting.d.ts @@ -626,9 +626,14 @@ declare global { 'openAPI.enable': boolean /** - * 同步服务端口号 + * API服务端口号 */ - 'openAPI.port': '23333' | string + 'openAPI.port': '23330' | string + + /** + * 是否绑定到局域网 + */ + 'openAPI.bindLan': boolean /** * 是否在离开搜索界面时自动清空搜索框 diff --git a/src/common/types/open_api.d.ts b/src/common/types/open_api.d.ts index 9b16dfd2..1fb00c69 100644 --- a/src/common/types/open_api.d.ts +++ b/src/common/types/open_api.d.ts @@ -8,6 +8,7 @@ declare namespace LX { interface EnableServer { enable: boolean port: string + bindLan: boolean } interface ActionBase { diff --git a/src/lang/en-us.json b/src/lang/en-us.json index 6326065b..feb8e92e 100644 --- a/src/lang/en-us.json +++ b/src/lang/en-us.json @@ -462,6 +462,7 @@ "setting__odc_clear_search_list": "Clear the search list when you are not searching", "setting__open_api": "Open API", "setting__open_api_address": "Service address: {address}", + "setting__open_api_bind_lan": "Allow access from LAN", "setting__open_api_enable": "Enable open API service", "setting__open_api_port": "Service port", "setting__open_api_port_tip": "Please enter the open API service port", diff --git a/src/lang/zh-cn.json b/src/lang/zh-cn.json index a394e3d6..2ecb6829 100644 --- a/src/lang/zh-cn.json +++ b/src/lang/zh-cn.json @@ -462,6 +462,7 @@ "setting__odc_clear_search_list": "离开搜索界面时清空搜索列表", "setting__open_api": "开放API", "setting__open_api_address": "服务地址:{address}", + "setting__open_api_bind_lan": "允许来自局域网的访问", "setting__open_api_enable": "启用开放API服务", "setting__open_api_port": "服务端口", "setting__open_api_port_tip": "请输入开放API服务端口", diff --git a/src/lang/zh-tw.json b/src/lang/zh-tw.json index 3f842cca..ffbebc41 100644 --- a/src/lang/zh-tw.json +++ b/src/lang/zh-tw.json @@ -462,6 +462,7 @@ "setting__odc_clear_search_list": "離開搜尋介面時清空搜尋列表", "setting__open_api": "開放API", "setting__open_api_address": "服務地址:{address}", + "setting__open_api_bind_lan": "允許來自區域網路的訪問", "setting__open_api_enable": "啟用開放API服務", "setting__open_api_port": "服務連接埠", "setting__open_api_port_tip": "請輸入開放API服務端口", diff --git a/src/main/modules/openApi/index.ts b/src/main/modules/openApi/index.ts index 4c4da444..1e78ffca 100644 --- a/src/main/modules/openApi/index.ts +++ b/src/main/modules/openApi/index.ts @@ -41,7 +41,7 @@ const handleSubscribePlayerStatus = (req: http.IncomingMessage, res: http.Server } } -const handleStartServer = async(port = 9000, ip = '127.0.0.1') => new Promise((resolve, reject) => { +const handleStartServer = async(port: number, ip: string) => new Promise((resolve, reject) => { httpServer = http.createServer((req, res): void => { const [endUrl, query] = `/${req.url?.split('/').at(-1) ?? ''}`.split('?') let code @@ -197,9 +197,9 @@ export const stopServer = async() => { }) return status } -export const startServer = async(port: number) => { +export const startServer = async(port: number, bindLan: boolean) => { if (status.status) await handleStopServer() - await handleStartServer(port).then(() => { + await handleStartServer(port, bindLan ? '0.0.0.0' : '127.0.0.1').then(() => { status.status = true status.message = '' status.address = `http://localhost${port == 80 ? '' : ':' + port}` diff --git a/src/main/modules/winMain/rendererEvent/openAPI.ts b/src/main/modules/winMain/rendererEvent/openAPI.ts index 8731af97..1a1ad4fa 100644 --- a/src/main/modules/winMain/rendererEvent/openAPI.ts +++ b/src/main/modules/winMain/rendererEvent/openAPI.ts @@ -11,7 +11,7 @@ export default () => { mainHandle(WIN_MAIN_RENDERER_EVENT_NAME.open_api_action, async({ params: data }) => { switch (data.action) { case 'enable': - return data.data.enable ? await startServer(parseInt(data.data.port)) : await stopServer() + return data.data.enable ? await startServer(parseInt(data.data.port), data.data.bindLan) : await stopServer() case 'status': return getStatus() } }) diff --git a/src/renderer/core/useApp/useOpenAPI.ts b/src/renderer/core/useApp/useOpenAPI.ts index defb2309..12f4c93d 100644 --- a/src/renderer/core/useApp/useOpenAPI.ts +++ b/src/renderer/core/useApp/useOpenAPI.ts @@ -5,12 +5,13 @@ import { openAPI } from '@renderer/store' import { setAutoPause } from '@renderer/core/lyric' export default () => { - const handleEnable = async(enable: boolean, port: string) => { + const handleEnable = async(enable: boolean, port: string, bindLan: boolean) => { await sendOpenAPIAction({ action: 'enable', data: { enable, port, + bindLan, }, }).then((status) => { openAPI.address = status.address @@ -27,16 +28,22 @@ export default () => { }) } watch(() => appSetting['openAPI.enable'], enable => { - void handleEnable(enable, appSetting['openAPI.port']) + void handleEnable(enable, appSetting['openAPI.port'], appSetting['openAPI.bindLan']) }) watch(() => appSetting['openAPI.port'], port => { - void handleEnable(appSetting['openAPI.enable'], port) + if (!appSetting['openAPI.enable']) return + void handleEnable(appSetting['openAPI.enable'], port, appSetting['openAPI.bindLan']) + }) + + watch(() => appSetting['openAPI.bindLan'], bindLan => { + if (!appSetting['openAPI.enable']) return + void handleEnable(appSetting['openAPI.enable'], appSetting['openAPI.port'], bindLan) }) return async() => { if (appSetting['openAPI.enable']) { - void handleEnable(true, appSetting['openAPI.port']) + void handleEnable(true, appSetting['openAPI.port'], appSetting['openAPI.bindLan']) } } } diff --git a/src/renderer/views/Setting/components/SettingOpenAPI.vue b/src/renderer/views/Setting/components/SettingOpenAPI.vue index e8a43aec..eafbc5fe 100644 --- a/src/renderer/views/Setting/components/SettingOpenAPI.vue +++ b/src/renderer/views/Setting/components/SettingOpenAPI.vue @@ -2,7 +2,10 @@ dt#sync {{ $t('setting__open_api') }} dd.gap-top div - base-checkbox.gap-top(id="setting_open_api_enable" :model-value="appSetting['openAPI.enable']" :label="$t('setting__open_api_enable')" @update:model-value="updateSetting({ 'openAPI.enable': $event })") + .p + base-checkbox(id="setting_open_api_enable" :model-value="appSetting['openAPI.enable']" :label="$t('setting__open_api_enable')" @update:model-value="updateSetting({ 'openAPI.enable': $event })") + .p.gap-top + base-checkbox(id="setting_open_api_bind_lan" :model-value="appSetting['openAPI.bindLan']" :label="$t('setting__open_api_bind_lan')" @update:model-value="updateSetting({ 'openAPI.bindLan': $event })") .p.gap-top.small {{ $t('setting__open_api_address', { address: openAPI.address || '' }) }} .p.small(v-if="openAPI.message") {{ openAPI.message }} .p