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,
}),
}
)