@@ -150,6 +150,7 @@ func (s *SettingService) GetPublicSettings(ctx context.Context) (*PublicSettings
150150 SettingKeyPurchaseSubscriptionURL ,
151151 SettingKeySoraClientEnabled ,
152152 SettingKeyCustomMenuItems ,
153+ SettingKeyCustomEndpoints ,
153154 SettingKeyLinuxDoConnectEnabled ,
154155 SettingKeyBackendModeEnabled ,
155156 }
@@ -195,6 +196,7 @@ func (s *SettingService) GetPublicSettings(ctx context.Context) (*PublicSettings
195196 PurchaseSubscriptionURL : strings .TrimSpace (settings [SettingKeyPurchaseSubscriptionURL ]),
196197 SoraClientEnabled : settings [SettingKeySoraClientEnabled ] == "true" ,
197198 CustomMenuItems : settings [SettingKeyCustomMenuItems ],
199+ CustomEndpoints : settings [SettingKeyCustomEndpoints ],
198200 LinuxDoOAuthEnabled : linuxDoEnabled ,
199201 BackendModeEnabled : settings [SettingKeyBackendModeEnabled ] == "true" ,
200202 }, nil
@@ -247,6 +249,7 @@ func (s *SettingService) GetPublicSettingsForInjection(ctx context.Context) (any
247249 PurchaseSubscriptionURL string `json:"purchase_subscription_url,omitempty"`
248250 SoraClientEnabled bool `json:"sora_client_enabled"`
249251 CustomMenuItems json.RawMessage `json:"custom_menu_items"`
252+ CustomEndpoints json.RawMessage `json:"custom_endpoints"`
250253 LinuxDoOAuthEnabled bool `json:"linuxdo_oauth_enabled"`
251254 BackendModeEnabled bool `json:"backend_mode_enabled"`
252255 Version string `json:"version,omitempty"`
@@ -272,6 +275,7 @@ func (s *SettingService) GetPublicSettingsForInjection(ctx context.Context) (any
272275 PurchaseSubscriptionURL : settings .PurchaseSubscriptionURL ,
273276 SoraClientEnabled : settings .SoraClientEnabled ,
274277 CustomMenuItems : filterUserVisibleMenuItems (settings .CustomMenuItems ),
278+ CustomEndpoints : safeRawJSONArray (settings .CustomEndpoints ),
275279 LinuxDoOAuthEnabled : settings .LinuxDoOAuthEnabled ,
276280 BackendModeEnabled : settings .BackendModeEnabled ,
277281 Version : s .version ,
@@ -314,6 +318,18 @@ func filterUserVisibleMenuItems(raw string) json.RawMessage {
314318 return result
315319}
316320
321+ // safeRawJSONArray returns raw as json.RawMessage if it's valid JSON, otherwise "[]".
322+ func safeRawJSONArray (raw string ) json.RawMessage {
323+ raw = strings .TrimSpace (raw )
324+ if raw == "" {
325+ return json .RawMessage ("[]" )
326+ }
327+ if json .Valid ([]byte (raw )) {
328+ return json .RawMessage (raw )
329+ }
330+ return json .RawMessage ("[]" )
331+ }
332+
317333// GetFrameSrcOrigins returns deduplicated http(s) origins from purchase_subscription_url
318334// and all custom_menu_items URLs. Used by the router layer for CSP frame-src injection.
319335func (s * SettingService ) GetFrameSrcOrigins (ctx context.Context ) ([]string , error ) {
@@ -454,6 +470,7 @@ func (s *SettingService) UpdateSettings(ctx context.Context, settings *SystemSet
454470 updates [SettingKeyPurchaseSubscriptionURL ] = strings .TrimSpace (settings .PurchaseSubscriptionURL )
455471 updates [SettingKeySoraClientEnabled ] = strconv .FormatBool (settings .SoraClientEnabled )
456472 updates [SettingKeyCustomMenuItems ] = settings .CustomMenuItems
473+ updates [SettingKeyCustomEndpoints ] = settings .CustomEndpoints
457474
458475 // 默认配置
459476 updates [SettingKeyDefaultConcurrency ] = strconv .Itoa (settings .DefaultConcurrency )
@@ -740,6 +757,7 @@ func (s *SettingService) InitializeDefaultSettings(ctx context.Context) error {
740757 SettingKeyPurchaseSubscriptionURL : "" ,
741758 SettingKeySoraClientEnabled : "false" ,
742759 SettingKeyCustomMenuItems : "[]" ,
760+ SettingKeyCustomEndpoints : "[]" ,
743761 SettingKeyDefaultConcurrency : strconv .Itoa (s .cfg .Default .UserConcurrency ),
744762 SettingKeyDefaultBalance : strconv .FormatFloat (s .cfg .Default .UserBalance , 'f' , 8 , 64 ),
745763 SettingKeyDefaultSubscriptions : "[]" ,
@@ -805,6 +823,7 @@ func (s *SettingService) parseSettings(settings map[string]string) *SystemSettin
805823 PurchaseSubscriptionURL : strings .TrimSpace (settings [SettingKeyPurchaseSubscriptionURL ]),
806824 SoraClientEnabled : settings [SettingKeySoraClientEnabled ] == "true" ,
807825 CustomMenuItems : settings [SettingKeyCustomMenuItems ],
826+ CustomEndpoints : settings [SettingKeyCustomEndpoints ],
808827 BackendModeEnabled : settings [SettingKeyBackendModeEnabled ] == "true" ,
809828 }
810829
0 commit comments