From 7bf59aa259271691b86ef76c2f54d23f682fe8d1 Mon Sep 17 00:00:00 2001 From: ayangweb <75017711+ayangweb@users.noreply.github.com> Date: Wed, 14 May 2025 16:00:40 +0800 Subject: [PATCH] feat: add option to allow self-signed certificates (#509) * feat: add option to allow self-signed certificates * docs: update changelog --- docs/content.en/docs/release-notes/_index.md | 1 + src/components/Settings/Advanced/index.tsx | 31 +++++++++++++++++++- src/hooks/useSyncStore.ts | 7 ++++- src/locales/en/translation.json | 4 +++ src/locales/zh/translation.json | 4 +++ src/stores/connectStore.ts | 7 +++++ 6 files changed, 52 insertions(+), 2 deletions(-) diff --git a/docs/content.en/docs/release-notes/_index.md b/docs/content.en/docs/release-notes/_index.md index ae5fc082..436c53f5 100644 --- a/docs/content.en/docs/release-notes/_index.md +++ b/docs/content.en/docs/release-notes/_index.md @@ -23,6 +23,7 @@ Information about release notes of Coco Server is provided here. - feat: the chat content has added a button to return to the bottom #495 - feat: the search input box supports multi-line input #501 - feat: websocket support self-signed TLS #504 +- feat: add option to allow self-signed certificates #509 ### 🐛 Bug fix diff --git a/src/components/Settings/Advanced/index.tsx b/src/components/Settings/Advanced/index.tsx index 58ee7c7a..c704afcc 100644 --- a/src/components/Settings/Advanced/index.tsx +++ b/src/components/Settings/Advanced/index.tsx @@ -1,7 +1,13 @@ import { useTranslation } from "react-i18next"; import Shortcuts from "./components/Shortcuts"; import SettingsItem from "../SettingsItem"; -import { AppWindowMac, MessageSquareMore, Search, Unplug } from "lucide-react"; +import { + AppWindowMac, + MessageSquareMore, + Search, + ShieldCheck, + Unplug, +} from "lucide-react"; import { useStartupStore } from "@/stores/startupStore"; import { useEffect } from "react"; import { useConnectStore } from "@/stores/connectStore"; @@ -9,6 +15,7 @@ import Appearance from "./components/Appearance"; import SettingsInput from "../SettingsInput"; import platformAdapter from "@/utils/platformAdapter"; import UpdateSettings from "./components/UpdateSettings"; +import SettingsToggle from "../SettingsToggle"; const Advanced = () => { const { t } = useTranslation(); @@ -42,6 +49,12 @@ const Advanced = () => { const setQueryTimeout = useConnectStore((state) => { return state.setQuerySourceTimeout; }); + const allowSelfSignature = useConnectStore((state) => { + return state.allowSelfSignature; + }); + const setAllowSelfSignature = useConnectStore((state) => { + return state.setAllowSelfSignature; + }); useEffect(() => { const unsubscribeStartup = useStartupStore.subscribe((state) => { @@ -192,6 +205,22 @@ const Advanced = () => { }} /> + + + { + setAllowSelfSignature(value); + }} + /> + diff --git a/src/hooks/useSyncStore.ts b/src/hooks/useSyncStore.ts index 0dfdfadb..aaad45af 100644 --- a/src/hooks/useSyncStore.ts +++ b/src/hooks/useSyncStore.ts @@ -83,6 +83,9 @@ export const useSyncStore = () => { const setSnapshotUpdate = useAppearanceStore((state) => { return state.setSnapshotUpdate; }); + const setAllowSelfSignature = useConnectStore((state) => { + return state.setAllowSelfSignature; + }); useEffect(() => { if (!resetFixedWindow) { @@ -143,13 +146,15 @@ export const useSyncStore = () => { }), platformAdapter.listenEvent("change-connect-store", ({ payload }) => { - const { connectionTimeout, querySourceTimeout } = payload; + const { connectionTimeout, querySourceTimeout, allowSelfSignature } = + payload; if (isNumber(connectionTimeout)) { setConnectionTimeout(connectionTimeout); } if (isNumber(querySourceTimeout)) { setQueryTimeout(querySourceTimeout); } + setAllowSelfSignature(allowSelfSignature); }), platformAdapter.listenEvent("change-appearance-store", ({ payload }) => { diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 5d0e57bc..3e9f0fc2 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -161,6 +161,10 @@ "queryTimeout": { "title": "Query Timeout", "description": "Terminates the query if no search results are returned within this time. Default: 500ms." + }, + "allowSelfSignature": { + "title": "Allow Self-Signed Certificates", + "description": "Allow connections to servers using self-signed certificates. Enable only if you trust the source." } }, "appearance": { diff --git a/src/locales/zh/translation.json b/src/locales/zh/translation.json index f805d784..9d040071 100644 --- a/src/locales/zh/translation.json +++ b/src/locales/zh/translation.json @@ -161,6 +161,10 @@ "queryTimeout": { "title": "查询超时", "description": "在此时间内未返回搜索结果,则终止查询。默认值:500 毫秒。" + }, + "allowSelfSignature": { + "title": "允许自签名证书", + "description": "允许连接使用自签名证书的服务器。仅在信任来源的情况下启用。" } }, "appearance": { diff --git a/src/stores/connectStore.ts b/src/stores/connectStore.ts index 707d2112..57debf1e 100644 --- a/src/stores/connectStore.ts +++ b/src/stores/connectStore.ts @@ -32,6 +32,8 @@ export type IConnectStore = { setQuerySourceTimeout: (queryTimeout?: number) => void; visibleStartPage: boolean; setVisibleStartPage: (visibleStartPage: boolean) => void; + allowSelfSignature: boolean; + setAllowSelfSignature: (allowSelfSignature: boolean) => void; }; export const useConnectStore = create()( @@ -119,6 +121,10 @@ export const useConnectStore = create()( setVisibleStartPage: (visibleStartPage: boolean) => { return set(() => ({ visibleStartPage })); }, + allowSelfSignature: false, + setAllowSelfSignature: (allowSelfSignature: boolean) => { + return set(() => ({ allowSelfSignature })); + }, }), { name: "connect-store", @@ -129,6 +135,7 @@ export const useConnectStore = create()( connectionTimeout: state.connectionTimeout, currentAssistant: state.currentAssistant, querySourceTimeout: state.querySourceTimeout, + allowSelfSignature: state.allowSelfSignature, }), } )