Compare commits

...
1 Commits
Author SHA1 Message Date
SerinaNya d4250fce31 feat(settings): adopt externalEndpoints/denyExternalEndpoint* keys
- read externalEndpoints first, fall back to openConnections/LineTable
- deny toggles mirror new canonical keys plus legacy aliases on save so
  both updated and legacy backends keep working
2026-08-26 00:22:59 +08:00
2 changed files with 42 additions and 13 deletions
+39 -13
View File
@@ -96,11 +96,13 @@ interface ConnectionItem {
function parseConnectionsFromConfig(config: KLALBControllerConfig | null): ConnectionItem[] { function parseConnectionsFromConfig(config: KLALBControllerConfig | null): ConnectionItem[] {
if (!config) return [] if (!config) return []
const lineTable = ( const lineTable = (
Array.isArray(config.openConnections) Array.isArray(config.externalEndpoints)
? config.openConnections ? config.externalEndpoints
: Array.isArray(config.LineTable) : Array.isArray(config.openConnections)
? config.LineTable ? config.openConnections
: [] : Array.isArray(config.LineTable)
? config.LineTable
: []
).map(toAddrString) ).map(toAddrString)
const connectTable = ( const connectTable = (
Array.isArray(config.autoConnections) Array.isArray(config.autoConnections)
@@ -191,19 +193,29 @@ function SettingsForm({
e.preventDefault() e.preventDefault()
const cleanConnections = connections.filter((c) => c.address.trim() !== '') const cleanConnections = connections.filter((c) => c.address.trim() !== '')
// 互斥分离:选中自动连接的进 autoConnections,未选中的进 openConnections // 互斥分离:选中自动连接的进 autoConnections,未选中的进 externalEndpoints
const updatedOpenConnections = cleanConnections const updatedExternalEndpoints = cleanConnections
.filter((c) => !c.autoConnect) .filter((c) => !c.autoConnect)
.map((c) => c.address.trim()) .map((c) => c.address.trim())
const updatedAutoConnections = cleanConnections const updatedAutoConnections = cleanConnections
.filter((c) => c.autoConnect) .filter((c) => c.autoConnect)
.map((c) => c.address.trim()) .map((c) => c.address.trim())
// 保存时同时携带新键名与历史别名,兼容新旧后端
const denyQuery =
form.denyExternalEndpointQuery ?? form.denyConnectionQuery ?? form.denyLineTableQuery ?? false
const denyBroadcast =
form.denyExternalEndpointBroadcast ??
form.denyConnectionBroadcast ??
form.denyLineTableBroadcast ??
false
const updatedConfig: Record<string, unknown> = { const updatedConfig: Record<string, unknown> = {
...form, ...form,
openConnections: updatedOpenConnections, externalEndpoints: updatedExternalEndpoints,
openConnections: updatedExternalEndpoints,
autoConnections: updatedAutoConnections, autoConnections: updatedAutoConnections,
LineTable: updatedOpenConnections, LineTable: updatedExternalEndpoints,
ConnectLineTable: updatedAutoConnections, ConnectLineTable: updatedAutoConnections,
ntpServers: ntpServers.filter((s) => s.trim() !== ''), ntpServers: ntpServers.filter((s) => s.trim() !== ''),
ntpServerTable: ntpServers.filter((s) => s.trim() !== ''), ntpServerTable: ntpServers.filter((s) => s.trim() !== ''),
@@ -212,8 +224,10 @@ function SettingsForm({
NetworkInterfaceExcepts: interfaceExcepts.filter((s) => s.trim() !== ''), NetworkInterfaceExcepts: interfaceExcepts.filter((s) => s.trim() !== ''),
enableTUN: tunEnabled, enableTUN: tunEnabled,
TUNName: form.TUNName?.trim() || 'KLALB_SRv6', TUNName: form.TUNName?.trim() || 'KLALB_SRv6',
denyConnectionQuery: form.denyConnectionQuery ?? form.denyLineTableQuery ?? false, denyExternalEndpointQuery: denyQuery,
denyConnectionBroadcast: form.denyConnectionBroadcast ?? form.denyLineTableBroadcast ?? false, denyExternalEndpointBroadcast: denyBroadcast,
denyConnectionQuery: denyQuery,
denyConnectionBroadcast: denyBroadcast,
Type: 'KLALBController', Type: 'KLALBController',
} }
@@ -981,10 +995,16 @@ function SettingsForm({
</FieldContent> </FieldContent>
<Switch <Switch
id="switch-deny-query" id="switch-deny-query"
checked={form.denyConnectionQuery ?? form.denyLineTableQuery ?? false} checked={
form.denyExternalEndpointQuery ??
form.denyConnectionQuery ??
form.denyLineTableQuery ??
false
}
onCheckedChange={(checked) => onCheckedChange={(checked) =>
setForm((prev) => ({ setForm((prev) => ({
...prev, ...prev,
denyExternalEndpointQuery: checked,
denyConnectionQuery: checked, denyConnectionQuery: checked,
denyLineTableQuery: checked, denyLineTableQuery: checked,
})) }))
@@ -1004,10 +1024,16 @@ function SettingsForm({
</FieldContent> </FieldContent>
<Switch <Switch
id="switch-deny-broadcast" id="switch-deny-broadcast"
checked={form.denyConnectionBroadcast ?? form.denyLineTableBroadcast ?? false} checked={
form.denyExternalEndpointBroadcast ??
form.denyConnectionBroadcast ??
form.denyLineTableBroadcast ??
false
}
onCheckedChange={(checked) => onCheckedChange={(checked) =>
setForm((prev) => ({ setForm((prev) => ({
...prev, ...prev,
denyExternalEndpointBroadcast: checked,
denyConnectionBroadcast: checked, denyConnectionBroadcast: checked,
denyLineTableBroadcast: checked, denyLineTableBroadcast: checked,
})) }))
+3
View File
@@ -114,6 +114,7 @@ export interface KLALBControllerConfig {
TCPListen?: string TCPListen?: string
UDPListen?: string UDPListen?: string
VirtualSocketName?: string VirtualSocketName?: string
externalEndpoints?: string[]
openConnections?: string[] openConnections?: string[]
autoConnections?: string[] autoConnections?: string[]
ntpServers?: string[] ntpServers?: string[]
@@ -123,6 +124,8 @@ export interface KLALBControllerConfig {
DNS?: string[] DNS?: string[]
ExtraRoutes?: string[] ExtraRoutes?: string[]
NetworkInterfaceExcepts?: string[] NetworkInterfaceExcepts?: string[]
denyExternalEndpointQuery?: boolean
denyExternalEndpointBroadcast?: boolean
denyConnectionQuery?: boolean denyConnectionQuery?: boolean
denyConnectionBroadcast?: boolean denyConnectionBroadcast?: boolean
denyLineTableQuery?: boolean denyLineTableQuery?: boolean