|
|
|
|
@@ -43,6 +43,15 @@ func scopesContainOpenID(scopes string) bool {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func firstNonEmpty(values ...string) string {
|
|
|
|
|
for _, value := range values {
|
|
|
|
|
if trimmed := strings.TrimSpace(value); trimmed != "" {
|
|
|
|
|
return trimmed
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SettingHandler 系统设置处理器
|
|
|
|
|
type SettingHandler struct {
|
|
|
|
|
settingService *service.SettingService
|
|
|
|
|
@@ -99,126 +108,133 @@ func (h *SettingHandler) GetSettings(c *gin.Context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
payload := dto.SystemSettings{
|
|
|
|
|
RegistrationEnabled: settings.RegistrationEnabled,
|
|
|
|
|
EmailVerifyEnabled: settings.EmailVerifyEnabled,
|
|
|
|
|
RegistrationEmailSuffixWhitelist: settings.RegistrationEmailSuffixWhitelist,
|
|
|
|
|
PromoCodeEnabled: settings.PromoCodeEnabled,
|
|
|
|
|
PasswordResetEnabled: settings.PasswordResetEnabled,
|
|
|
|
|
FrontendURL: settings.FrontendURL,
|
|
|
|
|
InvitationCodeEnabled: settings.InvitationCodeEnabled,
|
|
|
|
|
TotpEnabled: settings.TotpEnabled,
|
|
|
|
|
TotpEncryptionKeyConfigured: h.settingService.IsTotpEncryptionKeyConfigured(),
|
|
|
|
|
SMTPHost: settings.SMTPHost,
|
|
|
|
|
SMTPPort: settings.SMTPPort,
|
|
|
|
|
SMTPUsername: settings.SMTPUsername,
|
|
|
|
|
SMTPPasswordConfigured: settings.SMTPPasswordConfigured,
|
|
|
|
|
SMTPFrom: settings.SMTPFrom,
|
|
|
|
|
SMTPFromName: settings.SMTPFromName,
|
|
|
|
|
SMTPUseTLS: settings.SMTPUseTLS,
|
|
|
|
|
TurnstileEnabled: settings.TurnstileEnabled,
|
|
|
|
|
TurnstileSiteKey: settings.TurnstileSiteKey,
|
|
|
|
|
TurnstileSecretKeyConfigured: settings.TurnstileSecretKeyConfigured,
|
|
|
|
|
LinuxDoConnectEnabled: settings.LinuxDoConnectEnabled,
|
|
|
|
|
LinuxDoConnectClientID: settings.LinuxDoConnectClientID,
|
|
|
|
|
LinuxDoConnectClientSecretConfigured: settings.LinuxDoConnectClientSecretConfigured,
|
|
|
|
|
LinuxDoConnectRedirectURL: settings.LinuxDoConnectRedirectURL,
|
|
|
|
|
WeChatConnectEnabled: settings.WeChatConnectEnabled,
|
|
|
|
|
WeChatConnectAppID: settings.WeChatConnectAppID,
|
|
|
|
|
WeChatConnectAppSecretConfigured: settings.WeChatConnectAppSecretConfigured,
|
|
|
|
|
WeChatConnectOpenEnabled: settings.WeChatConnectOpenEnabled,
|
|
|
|
|
WeChatConnectMPEnabled: settings.WeChatConnectMPEnabled,
|
|
|
|
|
WeChatConnectMode: settings.WeChatConnectMode,
|
|
|
|
|
WeChatConnectScopes: settings.WeChatConnectScopes,
|
|
|
|
|
WeChatConnectRedirectURL: settings.WeChatConnectRedirectURL,
|
|
|
|
|
WeChatConnectFrontendRedirectURL: settings.WeChatConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectEnabled: settings.OIDCConnectEnabled,
|
|
|
|
|
OIDCConnectProviderName: settings.OIDCConnectProviderName,
|
|
|
|
|
OIDCConnectClientID: settings.OIDCConnectClientID,
|
|
|
|
|
OIDCConnectClientSecretConfigured: settings.OIDCConnectClientSecretConfigured,
|
|
|
|
|
OIDCConnectIssuerURL: settings.OIDCConnectIssuerURL,
|
|
|
|
|
OIDCConnectDiscoveryURL: settings.OIDCConnectDiscoveryURL,
|
|
|
|
|
OIDCConnectAuthorizeURL: settings.OIDCConnectAuthorizeURL,
|
|
|
|
|
OIDCConnectTokenURL: settings.OIDCConnectTokenURL,
|
|
|
|
|
OIDCConnectUserInfoURL: settings.OIDCConnectUserInfoURL,
|
|
|
|
|
OIDCConnectJWKSURL: settings.OIDCConnectJWKSURL,
|
|
|
|
|
OIDCConnectScopes: settings.OIDCConnectScopes,
|
|
|
|
|
OIDCConnectRedirectURL: settings.OIDCConnectRedirectURL,
|
|
|
|
|
OIDCConnectFrontendRedirectURL: settings.OIDCConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectTokenAuthMethod: settings.OIDCConnectTokenAuthMethod,
|
|
|
|
|
OIDCConnectUsePKCE: settings.OIDCConnectUsePKCE,
|
|
|
|
|
OIDCConnectValidateIDToken: settings.OIDCConnectValidateIDToken,
|
|
|
|
|
OIDCConnectAllowedSigningAlgs: settings.OIDCConnectAllowedSigningAlgs,
|
|
|
|
|
OIDCConnectClockSkewSeconds: settings.OIDCConnectClockSkewSeconds,
|
|
|
|
|
OIDCConnectRequireEmailVerified: settings.OIDCConnectRequireEmailVerified,
|
|
|
|
|
OIDCConnectUserInfoEmailPath: settings.OIDCConnectUserInfoEmailPath,
|
|
|
|
|
OIDCConnectUserInfoIDPath: settings.OIDCConnectUserInfoIDPath,
|
|
|
|
|
OIDCConnectUserInfoUsernamePath: settings.OIDCConnectUserInfoUsernamePath,
|
|
|
|
|
SiteName: settings.SiteName,
|
|
|
|
|
SiteLogo: settings.SiteLogo,
|
|
|
|
|
SiteSubtitle: settings.SiteSubtitle,
|
|
|
|
|
APIBaseURL: settings.APIBaseURL,
|
|
|
|
|
ContactInfo: settings.ContactInfo,
|
|
|
|
|
DocURL: settings.DocURL,
|
|
|
|
|
HomeContent: settings.HomeContent,
|
|
|
|
|
HideCcsImportButton: settings.HideCcsImportButton,
|
|
|
|
|
PurchaseSubscriptionEnabled: settings.PurchaseSubscriptionEnabled,
|
|
|
|
|
PurchaseSubscriptionURL: settings.PurchaseSubscriptionURL,
|
|
|
|
|
TableDefaultPageSize: settings.TableDefaultPageSize,
|
|
|
|
|
TablePageSizeOptions: settings.TablePageSizeOptions,
|
|
|
|
|
CustomMenuItems: dto.ParseCustomMenuItems(settings.CustomMenuItems),
|
|
|
|
|
CustomEndpoints: dto.ParseCustomEndpoints(settings.CustomEndpoints),
|
|
|
|
|
DefaultConcurrency: settings.DefaultConcurrency,
|
|
|
|
|
DefaultBalance: settings.DefaultBalance,
|
|
|
|
|
DefaultSubscriptions: defaultSubscriptions,
|
|
|
|
|
EnableModelFallback: settings.EnableModelFallback,
|
|
|
|
|
FallbackModelAnthropic: settings.FallbackModelAnthropic,
|
|
|
|
|
FallbackModelOpenAI: settings.FallbackModelOpenAI,
|
|
|
|
|
FallbackModelGemini: settings.FallbackModelGemini,
|
|
|
|
|
FallbackModelAntigravity: settings.FallbackModelAntigravity,
|
|
|
|
|
EnableIdentityPatch: settings.EnableIdentityPatch,
|
|
|
|
|
IdentityPatchPrompt: settings.IdentityPatchPrompt,
|
|
|
|
|
OpsMonitoringEnabled: opsEnabled && settings.OpsMonitoringEnabled,
|
|
|
|
|
OpsRealtimeMonitoringEnabled: settings.OpsRealtimeMonitoringEnabled,
|
|
|
|
|
OpsQueryModeDefault: settings.OpsQueryModeDefault,
|
|
|
|
|
OpsMetricsIntervalSeconds: settings.OpsMetricsIntervalSeconds,
|
|
|
|
|
MinClaudeCodeVersion: settings.MinClaudeCodeVersion,
|
|
|
|
|
MaxClaudeCodeVersion: settings.MaxClaudeCodeVersion,
|
|
|
|
|
AllowUngroupedKeyScheduling: settings.AllowUngroupedKeyScheduling,
|
|
|
|
|
BackendModeEnabled: settings.BackendModeEnabled,
|
|
|
|
|
EnableFingerprintUnification: settings.EnableFingerprintUnification,
|
|
|
|
|
EnableMetadataPassthrough: settings.EnableMetadataPassthrough,
|
|
|
|
|
EnableCCHSigning: settings.EnableCCHSigning,
|
|
|
|
|
WebSearchEmulationEnabled: settings.WebSearchEmulationEnabled,
|
|
|
|
|
PaymentVisibleMethodAlipaySource: settings.PaymentVisibleMethodAlipaySource,
|
|
|
|
|
PaymentVisibleMethodWxpaySource: settings.PaymentVisibleMethodWxpaySource,
|
|
|
|
|
PaymentVisibleMethodAlipayEnabled: settings.PaymentVisibleMethodAlipayEnabled,
|
|
|
|
|
PaymentVisibleMethodWxpayEnabled: settings.PaymentVisibleMethodWxpayEnabled,
|
|
|
|
|
OpenAIAdvancedSchedulerEnabled: settings.OpenAIAdvancedSchedulerEnabled,
|
|
|
|
|
BalanceLowNotifyEnabled: settings.BalanceLowNotifyEnabled,
|
|
|
|
|
BalanceLowNotifyThreshold: settings.BalanceLowNotifyThreshold,
|
|
|
|
|
BalanceLowNotifyRechargeURL: settings.BalanceLowNotifyRechargeURL,
|
|
|
|
|
AccountQuotaNotifyEnabled: settings.AccountQuotaNotifyEnabled,
|
|
|
|
|
AccountQuotaNotifyEmails: dto.NotifyEmailEntriesFromService(settings.AccountQuotaNotifyEmails),
|
|
|
|
|
PaymentEnabled: paymentCfg.Enabled,
|
|
|
|
|
PaymentMinAmount: paymentCfg.MinAmount,
|
|
|
|
|
PaymentMaxAmount: paymentCfg.MaxAmount,
|
|
|
|
|
PaymentDailyLimit: paymentCfg.DailyLimit,
|
|
|
|
|
PaymentOrderTimeoutMin: paymentCfg.OrderTimeoutMin,
|
|
|
|
|
PaymentMaxPendingOrders: paymentCfg.MaxPendingOrders,
|
|
|
|
|
PaymentEnabledTypes: paymentCfg.EnabledTypes,
|
|
|
|
|
PaymentBalanceDisabled: paymentCfg.BalanceDisabled,
|
|
|
|
|
PaymentBalanceRechargeMultiplier: paymentCfg.BalanceRechargeMultiplier,
|
|
|
|
|
PaymentRechargeFeeRate: paymentCfg.RechargeFeeRate,
|
|
|
|
|
PaymentLoadBalanceStrat: paymentCfg.LoadBalanceStrategy,
|
|
|
|
|
PaymentProductNamePrefix: paymentCfg.ProductNamePrefix,
|
|
|
|
|
PaymentProductNameSuffix: paymentCfg.ProductNameSuffix,
|
|
|
|
|
PaymentHelpImageURL: paymentCfg.HelpImageURL,
|
|
|
|
|
PaymentHelpText: paymentCfg.HelpText,
|
|
|
|
|
PaymentCancelRateLimitEnabled: paymentCfg.CancelRateLimitEnabled,
|
|
|
|
|
PaymentCancelRateLimitMax: paymentCfg.CancelRateLimitMax,
|
|
|
|
|
PaymentCancelRateLimitWindow: paymentCfg.CancelRateLimitWindow,
|
|
|
|
|
PaymentCancelRateLimitUnit: paymentCfg.CancelRateLimitUnit,
|
|
|
|
|
PaymentCancelRateLimitMode: paymentCfg.CancelRateLimitMode,
|
|
|
|
|
RegistrationEnabled: settings.RegistrationEnabled,
|
|
|
|
|
EmailVerifyEnabled: settings.EmailVerifyEnabled,
|
|
|
|
|
RegistrationEmailSuffixWhitelist: settings.RegistrationEmailSuffixWhitelist,
|
|
|
|
|
PromoCodeEnabled: settings.PromoCodeEnabled,
|
|
|
|
|
PasswordResetEnabled: settings.PasswordResetEnabled,
|
|
|
|
|
FrontendURL: settings.FrontendURL,
|
|
|
|
|
InvitationCodeEnabled: settings.InvitationCodeEnabled,
|
|
|
|
|
TotpEnabled: settings.TotpEnabled,
|
|
|
|
|
TotpEncryptionKeyConfigured: h.settingService.IsTotpEncryptionKeyConfigured(),
|
|
|
|
|
SMTPHost: settings.SMTPHost,
|
|
|
|
|
SMTPPort: settings.SMTPPort,
|
|
|
|
|
SMTPUsername: settings.SMTPUsername,
|
|
|
|
|
SMTPPasswordConfigured: settings.SMTPPasswordConfigured,
|
|
|
|
|
SMTPFrom: settings.SMTPFrom,
|
|
|
|
|
SMTPFromName: settings.SMTPFromName,
|
|
|
|
|
SMTPUseTLS: settings.SMTPUseTLS,
|
|
|
|
|
TurnstileEnabled: settings.TurnstileEnabled,
|
|
|
|
|
TurnstileSiteKey: settings.TurnstileSiteKey,
|
|
|
|
|
TurnstileSecretKeyConfigured: settings.TurnstileSecretKeyConfigured,
|
|
|
|
|
LinuxDoConnectEnabled: settings.LinuxDoConnectEnabled,
|
|
|
|
|
LinuxDoConnectClientID: settings.LinuxDoConnectClientID,
|
|
|
|
|
LinuxDoConnectClientSecretConfigured: settings.LinuxDoConnectClientSecretConfigured,
|
|
|
|
|
LinuxDoConnectRedirectURL: settings.LinuxDoConnectRedirectURL,
|
|
|
|
|
WeChatConnectEnabled: settings.WeChatConnectEnabled,
|
|
|
|
|
WeChatConnectAppID: settings.WeChatConnectAppID,
|
|
|
|
|
WeChatConnectAppSecretConfigured: settings.WeChatConnectAppSecretConfigured,
|
|
|
|
|
WeChatConnectOpenAppID: settings.WeChatConnectOpenAppID,
|
|
|
|
|
WeChatConnectOpenAppSecretConfigured: settings.WeChatConnectOpenAppSecretConfigured,
|
|
|
|
|
WeChatConnectMPAppID: settings.WeChatConnectMPAppID,
|
|
|
|
|
WeChatConnectMPAppSecretConfigured: settings.WeChatConnectMPAppSecretConfigured,
|
|
|
|
|
WeChatConnectMobileAppID: settings.WeChatConnectMobileAppID,
|
|
|
|
|
WeChatConnectMobileAppSecretConfigured: settings.WeChatConnectMobileAppSecretConfigured,
|
|
|
|
|
WeChatConnectOpenEnabled: settings.WeChatConnectOpenEnabled,
|
|
|
|
|
WeChatConnectMPEnabled: settings.WeChatConnectMPEnabled,
|
|
|
|
|
WeChatConnectMobileEnabled: settings.WeChatConnectMobileEnabled,
|
|
|
|
|
WeChatConnectMode: settings.WeChatConnectMode,
|
|
|
|
|
WeChatConnectScopes: settings.WeChatConnectScopes,
|
|
|
|
|
WeChatConnectRedirectURL: settings.WeChatConnectRedirectURL,
|
|
|
|
|
WeChatConnectFrontendRedirectURL: settings.WeChatConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectEnabled: settings.OIDCConnectEnabled,
|
|
|
|
|
OIDCConnectProviderName: settings.OIDCConnectProviderName,
|
|
|
|
|
OIDCConnectClientID: settings.OIDCConnectClientID,
|
|
|
|
|
OIDCConnectClientSecretConfigured: settings.OIDCConnectClientSecretConfigured,
|
|
|
|
|
OIDCConnectIssuerURL: settings.OIDCConnectIssuerURL,
|
|
|
|
|
OIDCConnectDiscoveryURL: settings.OIDCConnectDiscoveryURL,
|
|
|
|
|
OIDCConnectAuthorizeURL: settings.OIDCConnectAuthorizeURL,
|
|
|
|
|
OIDCConnectTokenURL: settings.OIDCConnectTokenURL,
|
|
|
|
|
OIDCConnectUserInfoURL: settings.OIDCConnectUserInfoURL,
|
|
|
|
|
OIDCConnectJWKSURL: settings.OIDCConnectJWKSURL,
|
|
|
|
|
OIDCConnectScopes: settings.OIDCConnectScopes,
|
|
|
|
|
OIDCConnectRedirectURL: settings.OIDCConnectRedirectURL,
|
|
|
|
|
OIDCConnectFrontendRedirectURL: settings.OIDCConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectTokenAuthMethod: settings.OIDCConnectTokenAuthMethod,
|
|
|
|
|
OIDCConnectUsePKCE: settings.OIDCConnectUsePKCE,
|
|
|
|
|
OIDCConnectValidateIDToken: settings.OIDCConnectValidateIDToken,
|
|
|
|
|
OIDCConnectAllowedSigningAlgs: settings.OIDCConnectAllowedSigningAlgs,
|
|
|
|
|
OIDCConnectClockSkewSeconds: settings.OIDCConnectClockSkewSeconds,
|
|
|
|
|
OIDCConnectRequireEmailVerified: settings.OIDCConnectRequireEmailVerified,
|
|
|
|
|
OIDCConnectUserInfoEmailPath: settings.OIDCConnectUserInfoEmailPath,
|
|
|
|
|
OIDCConnectUserInfoIDPath: settings.OIDCConnectUserInfoIDPath,
|
|
|
|
|
OIDCConnectUserInfoUsernamePath: settings.OIDCConnectUserInfoUsernamePath,
|
|
|
|
|
SiteName: settings.SiteName,
|
|
|
|
|
SiteLogo: settings.SiteLogo,
|
|
|
|
|
SiteSubtitle: settings.SiteSubtitle,
|
|
|
|
|
APIBaseURL: settings.APIBaseURL,
|
|
|
|
|
ContactInfo: settings.ContactInfo,
|
|
|
|
|
DocURL: settings.DocURL,
|
|
|
|
|
HomeContent: settings.HomeContent,
|
|
|
|
|
HideCcsImportButton: settings.HideCcsImportButton,
|
|
|
|
|
PurchaseSubscriptionEnabled: settings.PurchaseSubscriptionEnabled,
|
|
|
|
|
PurchaseSubscriptionURL: settings.PurchaseSubscriptionURL,
|
|
|
|
|
TableDefaultPageSize: settings.TableDefaultPageSize,
|
|
|
|
|
TablePageSizeOptions: settings.TablePageSizeOptions,
|
|
|
|
|
CustomMenuItems: dto.ParseCustomMenuItems(settings.CustomMenuItems),
|
|
|
|
|
CustomEndpoints: dto.ParseCustomEndpoints(settings.CustomEndpoints),
|
|
|
|
|
DefaultConcurrency: settings.DefaultConcurrency,
|
|
|
|
|
DefaultBalance: settings.DefaultBalance,
|
|
|
|
|
DefaultSubscriptions: defaultSubscriptions,
|
|
|
|
|
EnableModelFallback: settings.EnableModelFallback,
|
|
|
|
|
FallbackModelAnthropic: settings.FallbackModelAnthropic,
|
|
|
|
|
FallbackModelOpenAI: settings.FallbackModelOpenAI,
|
|
|
|
|
FallbackModelGemini: settings.FallbackModelGemini,
|
|
|
|
|
FallbackModelAntigravity: settings.FallbackModelAntigravity,
|
|
|
|
|
EnableIdentityPatch: settings.EnableIdentityPatch,
|
|
|
|
|
IdentityPatchPrompt: settings.IdentityPatchPrompt,
|
|
|
|
|
OpsMonitoringEnabled: opsEnabled && settings.OpsMonitoringEnabled,
|
|
|
|
|
OpsRealtimeMonitoringEnabled: settings.OpsRealtimeMonitoringEnabled,
|
|
|
|
|
OpsQueryModeDefault: settings.OpsQueryModeDefault,
|
|
|
|
|
OpsMetricsIntervalSeconds: settings.OpsMetricsIntervalSeconds,
|
|
|
|
|
MinClaudeCodeVersion: settings.MinClaudeCodeVersion,
|
|
|
|
|
MaxClaudeCodeVersion: settings.MaxClaudeCodeVersion,
|
|
|
|
|
AllowUngroupedKeyScheduling: settings.AllowUngroupedKeyScheduling,
|
|
|
|
|
BackendModeEnabled: settings.BackendModeEnabled,
|
|
|
|
|
EnableFingerprintUnification: settings.EnableFingerprintUnification,
|
|
|
|
|
EnableMetadataPassthrough: settings.EnableMetadataPassthrough,
|
|
|
|
|
EnableCCHSigning: settings.EnableCCHSigning,
|
|
|
|
|
WebSearchEmulationEnabled: settings.WebSearchEmulationEnabled,
|
|
|
|
|
PaymentVisibleMethodAlipaySource: settings.PaymentVisibleMethodAlipaySource,
|
|
|
|
|
PaymentVisibleMethodWxpaySource: settings.PaymentVisibleMethodWxpaySource,
|
|
|
|
|
PaymentVisibleMethodAlipayEnabled: settings.PaymentVisibleMethodAlipayEnabled,
|
|
|
|
|
PaymentVisibleMethodWxpayEnabled: settings.PaymentVisibleMethodWxpayEnabled,
|
|
|
|
|
OpenAIAdvancedSchedulerEnabled: settings.OpenAIAdvancedSchedulerEnabled,
|
|
|
|
|
BalanceLowNotifyEnabled: settings.BalanceLowNotifyEnabled,
|
|
|
|
|
BalanceLowNotifyThreshold: settings.BalanceLowNotifyThreshold,
|
|
|
|
|
BalanceLowNotifyRechargeURL: settings.BalanceLowNotifyRechargeURL,
|
|
|
|
|
AccountQuotaNotifyEnabled: settings.AccountQuotaNotifyEnabled,
|
|
|
|
|
AccountQuotaNotifyEmails: dto.NotifyEmailEntriesFromService(settings.AccountQuotaNotifyEmails),
|
|
|
|
|
PaymentEnabled: paymentCfg.Enabled,
|
|
|
|
|
PaymentMinAmount: paymentCfg.MinAmount,
|
|
|
|
|
PaymentMaxAmount: paymentCfg.MaxAmount,
|
|
|
|
|
PaymentDailyLimit: paymentCfg.DailyLimit,
|
|
|
|
|
PaymentOrderTimeoutMin: paymentCfg.OrderTimeoutMin,
|
|
|
|
|
PaymentMaxPendingOrders: paymentCfg.MaxPendingOrders,
|
|
|
|
|
PaymentEnabledTypes: paymentCfg.EnabledTypes,
|
|
|
|
|
PaymentBalanceDisabled: paymentCfg.BalanceDisabled,
|
|
|
|
|
PaymentBalanceRechargeMultiplier: paymentCfg.BalanceRechargeMultiplier,
|
|
|
|
|
PaymentRechargeFeeRate: paymentCfg.RechargeFeeRate,
|
|
|
|
|
PaymentLoadBalanceStrat: paymentCfg.LoadBalanceStrategy,
|
|
|
|
|
PaymentProductNamePrefix: paymentCfg.ProductNamePrefix,
|
|
|
|
|
PaymentProductNameSuffix: paymentCfg.ProductNameSuffix,
|
|
|
|
|
PaymentHelpImageURL: paymentCfg.HelpImageURL,
|
|
|
|
|
PaymentHelpText: paymentCfg.HelpText,
|
|
|
|
|
PaymentCancelRateLimitEnabled: paymentCfg.CancelRateLimitEnabled,
|
|
|
|
|
PaymentCancelRateLimitMax: paymentCfg.CancelRateLimitMax,
|
|
|
|
|
PaymentCancelRateLimitWindow: paymentCfg.CancelRateLimitWindow,
|
|
|
|
|
PaymentCancelRateLimitUnit: paymentCfg.CancelRateLimitUnit,
|
|
|
|
|
PaymentCancelRateLimitMode: paymentCfg.CancelRateLimitMode,
|
|
|
|
|
}
|
|
|
|
|
response.Success(c, systemSettingsResponseData(payload, authSourceDefaults))
|
|
|
|
|
}
|
|
|
|
|
@@ -259,8 +275,15 @@ type UpdateSettingsRequest struct {
|
|
|
|
|
WeChatConnectEnabled bool `json:"wechat_connect_enabled"`
|
|
|
|
|
WeChatConnectAppID string `json:"wechat_connect_app_id"`
|
|
|
|
|
WeChatConnectAppSecret string `json:"wechat_connect_app_secret"`
|
|
|
|
|
WeChatConnectOpenAppID string `json:"wechat_connect_open_app_id"`
|
|
|
|
|
WeChatConnectOpenAppSecret string `json:"wechat_connect_open_app_secret"`
|
|
|
|
|
WeChatConnectMPAppID string `json:"wechat_connect_mp_app_id"`
|
|
|
|
|
WeChatConnectMPAppSecret string `json:"wechat_connect_mp_app_secret"`
|
|
|
|
|
WeChatConnectMobileAppID string `json:"wechat_connect_mobile_app_id"`
|
|
|
|
|
WeChatConnectMobileAppSecret string `json:"wechat_connect_mobile_app_secret"`
|
|
|
|
|
WeChatConnectOpenEnabled bool `json:"wechat_connect_open_enabled"`
|
|
|
|
|
WeChatConnectMPEnabled bool `json:"wechat_connect_mp_enabled"`
|
|
|
|
|
WeChatConnectMobileEnabled bool `json:"wechat_connect_mobile_enabled"`
|
|
|
|
|
WeChatConnectMode string `json:"wechat_connect_mode"`
|
|
|
|
|
WeChatConnectScopes string `json:"wechat_connect_scopes"`
|
|
|
|
|
WeChatConnectRedirectURL string `json:"wechat_connect_redirect_url"`
|
|
|
|
|
@@ -532,34 +555,35 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|
|
|
|
if req.WeChatConnectEnabled {
|
|
|
|
|
req.WeChatConnectAppID = strings.TrimSpace(req.WeChatConnectAppID)
|
|
|
|
|
req.WeChatConnectAppSecret = strings.TrimSpace(req.WeChatConnectAppSecret)
|
|
|
|
|
req.WeChatConnectOpenAppID = strings.TrimSpace(req.WeChatConnectOpenAppID)
|
|
|
|
|
req.WeChatConnectOpenAppSecret = strings.TrimSpace(req.WeChatConnectOpenAppSecret)
|
|
|
|
|
req.WeChatConnectMPAppID = strings.TrimSpace(req.WeChatConnectMPAppID)
|
|
|
|
|
req.WeChatConnectMPAppSecret = strings.TrimSpace(req.WeChatConnectMPAppSecret)
|
|
|
|
|
req.WeChatConnectMobileAppID = strings.TrimSpace(req.WeChatConnectMobileAppID)
|
|
|
|
|
req.WeChatConnectMobileAppSecret = strings.TrimSpace(req.WeChatConnectMobileAppSecret)
|
|
|
|
|
req.WeChatConnectMode = strings.ToLower(strings.TrimSpace(req.WeChatConnectMode))
|
|
|
|
|
req.WeChatConnectScopes = strings.TrimSpace(req.WeChatConnectScopes)
|
|
|
|
|
req.WeChatConnectRedirectURL = strings.TrimSpace(req.WeChatConnectRedirectURL)
|
|
|
|
|
req.WeChatConnectFrontendRedirectURL = strings.TrimSpace(req.WeChatConnectFrontendRedirectURL)
|
|
|
|
|
|
|
|
|
|
if req.WeChatConnectAppID == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat App ID is required when enabled")
|
|
|
|
|
if req.WeChatConnectMPEnabled && req.WeChatConnectMobileEnabled {
|
|
|
|
|
response.BadRequest(c, "WeChat Official Account and Mobile App cannot be enabled at the same time")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectAppSecret == "" {
|
|
|
|
|
if previousSettings.WeChatConnectAppSecret == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat App Secret is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
req.WeChatConnectAppSecret = previousSettings.WeChatConnectAppSecret
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMode != "" {
|
|
|
|
|
switch req.WeChatConnectMode {
|
|
|
|
|
case "open", "mp":
|
|
|
|
|
case "open", "mp", "mobile":
|
|
|
|
|
default:
|
|
|
|
|
response.BadRequest(c, "WeChat mode must be open or mp")
|
|
|
|
|
response.BadRequest(c, "WeChat mode must be open, mp, or mobile")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if !req.WeChatConnectOpenEnabled && !req.WeChatConnectMPEnabled {
|
|
|
|
|
if !req.WeChatConnectOpenEnabled && !req.WeChatConnectMPEnabled && !req.WeChatConnectMobileEnabled {
|
|
|
|
|
switch req.WeChatConnectMode {
|
|
|
|
|
case "mp":
|
|
|
|
|
req.WeChatConnectMPEnabled = true
|
|
|
|
|
case "mobile":
|
|
|
|
|
req.WeChatConnectMobileEnabled = true
|
|
|
|
|
default:
|
|
|
|
|
req.WeChatConnectOpenEnabled = true
|
|
|
|
|
}
|
|
|
|
|
@@ -567,10 +591,61 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|
|
|
|
if req.WeChatConnectMode == "" {
|
|
|
|
|
if req.WeChatConnectMPEnabled {
|
|
|
|
|
req.WeChatConnectMode = "mp"
|
|
|
|
|
} else if req.WeChatConnectMobileEnabled {
|
|
|
|
|
req.WeChatConnectMode = "mobile"
|
|
|
|
|
} else {
|
|
|
|
|
req.WeChatConnectMode = "open"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
req.WeChatConnectOpenAppID = strings.TrimSpace(firstNonEmpty(req.WeChatConnectOpenAppID, req.WeChatConnectAppID))
|
|
|
|
|
req.WeChatConnectMPAppID = strings.TrimSpace(firstNonEmpty(req.WeChatConnectMPAppID, req.WeChatConnectAppID))
|
|
|
|
|
req.WeChatConnectMobileAppID = strings.TrimSpace(firstNonEmpty(req.WeChatConnectMobileAppID, req.WeChatConnectAppID))
|
|
|
|
|
|
|
|
|
|
if req.WeChatConnectOpenAppSecret == "" {
|
|
|
|
|
req.WeChatConnectOpenAppSecret = strings.TrimSpace(firstNonEmpty(previousSettings.WeChatConnectOpenAppSecret, previousSettings.WeChatConnectAppSecret, req.WeChatConnectAppSecret))
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMPAppSecret == "" {
|
|
|
|
|
req.WeChatConnectMPAppSecret = strings.TrimSpace(firstNonEmpty(previousSettings.WeChatConnectMPAppSecret, previousSettings.WeChatConnectAppSecret, req.WeChatConnectAppSecret))
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMobileAppSecret == "" {
|
|
|
|
|
req.WeChatConnectMobileAppSecret = strings.TrimSpace(firstNonEmpty(previousSettings.WeChatConnectMobileAppSecret, previousSettings.WeChatConnectAppSecret, req.WeChatConnectAppSecret))
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectAppSecret == "" {
|
|
|
|
|
req.WeChatConnectAppSecret = strings.TrimSpace(firstNonEmpty(req.WeChatConnectOpenAppSecret, req.WeChatConnectMPAppSecret, req.WeChatConnectMobileAppSecret, previousSettings.WeChatConnectAppSecret))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if req.WeChatConnectOpenEnabled {
|
|
|
|
|
if req.WeChatConnectOpenAppID == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat PC App ID is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectOpenAppSecret == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat PC App Secret is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMPEnabled {
|
|
|
|
|
if req.WeChatConnectMPAppID == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat Official Account App ID is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMPAppSecret == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat Official Account App Secret is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMobileEnabled {
|
|
|
|
|
if req.WeChatConnectMobileAppID == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat Mobile App ID is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMobileAppSecret == "" {
|
|
|
|
|
response.BadRequest(c, "WeChat Mobile App Secret is required when enabled")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if req.WeChatConnectScopes == "" {
|
|
|
|
|
if req.WeChatConnectMPEnabled {
|
|
|
|
|
req.WeChatConnectScopes = service.DefaultWeChatConnectScopesForMode("mp")
|
|
|
|
|
@@ -946,8 +1021,15 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|
|
|
|
WeChatConnectEnabled: req.WeChatConnectEnabled,
|
|
|
|
|
WeChatConnectAppID: req.WeChatConnectAppID,
|
|
|
|
|
WeChatConnectAppSecret: req.WeChatConnectAppSecret,
|
|
|
|
|
WeChatConnectOpenAppID: req.WeChatConnectOpenAppID,
|
|
|
|
|
WeChatConnectOpenAppSecret: req.WeChatConnectOpenAppSecret,
|
|
|
|
|
WeChatConnectMPAppID: req.WeChatConnectMPAppID,
|
|
|
|
|
WeChatConnectMPAppSecret: req.WeChatConnectMPAppSecret,
|
|
|
|
|
WeChatConnectMobileAppID: req.WeChatConnectMobileAppID,
|
|
|
|
|
WeChatConnectMobileAppSecret: req.WeChatConnectMobileAppSecret,
|
|
|
|
|
WeChatConnectOpenEnabled: req.WeChatConnectOpenEnabled,
|
|
|
|
|
WeChatConnectMPEnabled: req.WeChatConnectMPEnabled,
|
|
|
|
|
WeChatConnectMobileEnabled: req.WeChatConnectMobileEnabled,
|
|
|
|
|
WeChatConnectMode: req.WeChatConnectMode,
|
|
|
|
|
WeChatConnectScopes: req.WeChatConnectScopes,
|
|
|
|
|
WeChatConnectRedirectURL: req.WeChatConnectRedirectURL,
|
|
|
|
|
@@ -1208,125 +1290,132 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
payload := dto.SystemSettings{
|
|
|
|
|
RegistrationEnabled: updatedSettings.RegistrationEnabled,
|
|
|
|
|
EmailVerifyEnabled: updatedSettings.EmailVerifyEnabled,
|
|
|
|
|
RegistrationEmailSuffixWhitelist: updatedSettings.RegistrationEmailSuffixWhitelist,
|
|
|
|
|
PromoCodeEnabled: updatedSettings.PromoCodeEnabled,
|
|
|
|
|
PasswordResetEnabled: updatedSettings.PasswordResetEnabled,
|
|
|
|
|
FrontendURL: updatedSettings.FrontendURL,
|
|
|
|
|
InvitationCodeEnabled: updatedSettings.InvitationCodeEnabled,
|
|
|
|
|
TotpEnabled: updatedSettings.TotpEnabled,
|
|
|
|
|
TotpEncryptionKeyConfigured: h.settingService.IsTotpEncryptionKeyConfigured(),
|
|
|
|
|
SMTPHost: updatedSettings.SMTPHost,
|
|
|
|
|
SMTPPort: updatedSettings.SMTPPort,
|
|
|
|
|
SMTPUsername: updatedSettings.SMTPUsername,
|
|
|
|
|
SMTPPasswordConfigured: updatedSettings.SMTPPasswordConfigured,
|
|
|
|
|
SMTPFrom: updatedSettings.SMTPFrom,
|
|
|
|
|
SMTPFromName: updatedSettings.SMTPFromName,
|
|
|
|
|
SMTPUseTLS: updatedSettings.SMTPUseTLS,
|
|
|
|
|
TurnstileEnabled: updatedSettings.TurnstileEnabled,
|
|
|
|
|
TurnstileSiteKey: updatedSettings.TurnstileSiteKey,
|
|
|
|
|
TurnstileSecretKeyConfigured: updatedSettings.TurnstileSecretKeyConfigured,
|
|
|
|
|
LinuxDoConnectEnabled: updatedSettings.LinuxDoConnectEnabled,
|
|
|
|
|
LinuxDoConnectClientID: updatedSettings.LinuxDoConnectClientID,
|
|
|
|
|
LinuxDoConnectClientSecretConfigured: updatedSettings.LinuxDoConnectClientSecretConfigured,
|
|
|
|
|
LinuxDoConnectRedirectURL: updatedSettings.LinuxDoConnectRedirectURL,
|
|
|
|
|
WeChatConnectEnabled: updatedSettings.WeChatConnectEnabled,
|
|
|
|
|
WeChatConnectAppID: updatedSettings.WeChatConnectAppID,
|
|
|
|
|
WeChatConnectAppSecretConfigured: updatedSettings.WeChatConnectAppSecretConfigured,
|
|
|
|
|
WeChatConnectOpenEnabled: updatedSettings.WeChatConnectOpenEnabled,
|
|
|
|
|
WeChatConnectMPEnabled: updatedSettings.WeChatConnectMPEnabled,
|
|
|
|
|
WeChatConnectMode: updatedSettings.WeChatConnectMode,
|
|
|
|
|
WeChatConnectScopes: updatedSettings.WeChatConnectScopes,
|
|
|
|
|
WeChatConnectRedirectURL: updatedSettings.WeChatConnectRedirectURL,
|
|
|
|
|
WeChatConnectFrontendRedirectURL: updatedSettings.WeChatConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectEnabled: updatedSettings.OIDCConnectEnabled,
|
|
|
|
|
OIDCConnectProviderName: updatedSettings.OIDCConnectProviderName,
|
|
|
|
|
OIDCConnectClientID: updatedSettings.OIDCConnectClientID,
|
|
|
|
|
OIDCConnectClientSecretConfigured: updatedSettings.OIDCConnectClientSecretConfigured,
|
|
|
|
|
OIDCConnectIssuerURL: updatedSettings.OIDCConnectIssuerURL,
|
|
|
|
|
OIDCConnectDiscoveryURL: updatedSettings.OIDCConnectDiscoveryURL,
|
|
|
|
|
OIDCConnectAuthorizeURL: updatedSettings.OIDCConnectAuthorizeURL,
|
|
|
|
|
OIDCConnectTokenURL: updatedSettings.OIDCConnectTokenURL,
|
|
|
|
|
OIDCConnectUserInfoURL: updatedSettings.OIDCConnectUserInfoURL,
|
|
|
|
|
OIDCConnectJWKSURL: updatedSettings.OIDCConnectJWKSURL,
|
|
|
|
|
OIDCConnectScopes: updatedSettings.OIDCConnectScopes,
|
|
|
|
|
OIDCConnectRedirectURL: updatedSettings.OIDCConnectRedirectURL,
|
|
|
|
|
OIDCConnectFrontendRedirectURL: updatedSettings.OIDCConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectTokenAuthMethod: updatedSettings.OIDCConnectTokenAuthMethod,
|
|
|
|
|
OIDCConnectUsePKCE: updatedSettings.OIDCConnectUsePKCE,
|
|
|
|
|
OIDCConnectValidateIDToken: updatedSettings.OIDCConnectValidateIDToken,
|
|
|
|
|
OIDCConnectAllowedSigningAlgs: updatedSettings.OIDCConnectAllowedSigningAlgs,
|
|
|
|
|
OIDCConnectClockSkewSeconds: updatedSettings.OIDCConnectClockSkewSeconds,
|
|
|
|
|
OIDCConnectRequireEmailVerified: updatedSettings.OIDCConnectRequireEmailVerified,
|
|
|
|
|
OIDCConnectUserInfoEmailPath: updatedSettings.OIDCConnectUserInfoEmailPath,
|
|
|
|
|
OIDCConnectUserInfoIDPath: updatedSettings.OIDCConnectUserInfoIDPath,
|
|
|
|
|
OIDCConnectUserInfoUsernamePath: updatedSettings.OIDCConnectUserInfoUsernamePath,
|
|
|
|
|
SiteName: updatedSettings.SiteName,
|
|
|
|
|
SiteLogo: updatedSettings.SiteLogo,
|
|
|
|
|
SiteSubtitle: updatedSettings.SiteSubtitle,
|
|
|
|
|
APIBaseURL: updatedSettings.APIBaseURL,
|
|
|
|
|
ContactInfo: updatedSettings.ContactInfo,
|
|
|
|
|
DocURL: updatedSettings.DocURL,
|
|
|
|
|
HomeContent: updatedSettings.HomeContent,
|
|
|
|
|
HideCcsImportButton: updatedSettings.HideCcsImportButton,
|
|
|
|
|
PurchaseSubscriptionEnabled: updatedSettings.PurchaseSubscriptionEnabled,
|
|
|
|
|
PurchaseSubscriptionURL: updatedSettings.PurchaseSubscriptionURL,
|
|
|
|
|
TableDefaultPageSize: updatedSettings.TableDefaultPageSize,
|
|
|
|
|
TablePageSizeOptions: updatedSettings.TablePageSizeOptions,
|
|
|
|
|
CustomMenuItems: dto.ParseCustomMenuItems(updatedSettings.CustomMenuItems),
|
|
|
|
|
CustomEndpoints: dto.ParseCustomEndpoints(updatedSettings.CustomEndpoints),
|
|
|
|
|
DefaultConcurrency: updatedSettings.DefaultConcurrency,
|
|
|
|
|
DefaultBalance: updatedSettings.DefaultBalance,
|
|
|
|
|
DefaultSubscriptions: updatedDefaultSubscriptions,
|
|
|
|
|
EnableModelFallback: updatedSettings.EnableModelFallback,
|
|
|
|
|
FallbackModelAnthropic: updatedSettings.FallbackModelAnthropic,
|
|
|
|
|
FallbackModelOpenAI: updatedSettings.FallbackModelOpenAI,
|
|
|
|
|
FallbackModelGemini: updatedSettings.FallbackModelGemini,
|
|
|
|
|
FallbackModelAntigravity: updatedSettings.FallbackModelAntigravity,
|
|
|
|
|
EnableIdentityPatch: updatedSettings.EnableIdentityPatch,
|
|
|
|
|
IdentityPatchPrompt: updatedSettings.IdentityPatchPrompt,
|
|
|
|
|
OpsMonitoringEnabled: updatedSettings.OpsMonitoringEnabled,
|
|
|
|
|
OpsRealtimeMonitoringEnabled: updatedSettings.OpsRealtimeMonitoringEnabled,
|
|
|
|
|
OpsQueryModeDefault: updatedSettings.OpsQueryModeDefault,
|
|
|
|
|
OpsMetricsIntervalSeconds: updatedSettings.OpsMetricsIntervalSeconds,
|
|
|
|
|
MinClaudeCodeVersion: updatedSettings.MinClaudeCodeVersion,
|
|
|
|
|
MaxClaudeCodeVersion: updatedSettings.MaxClaudeCodeVersion,
|
|
|
|
|
AllowUngroupedKeyScheduling: updatedSettings.AllowUngroupedKeyScheduling,
|
|
|
|
|
BackendModeEnabled: updatedSettings.BackendModeEnabled,
|
|
|
|
|
EnableFingerprintUnification: updatedSettings.EnableFingerprintUnification,
|
|
|
|
|
EnableMetadataPassthrough: updatedSettings.EnableMetadataPassthrough,
|
|
|
|
|
EnableCCHSigning: updatedSettings.EnableCCHSigning,
|
|
|
|
|
PaymentVisibleMethodAlipaySource: updatedSettings.PaymentVisibleMethodAlipaySource,
|
|
|
|
|
PaymentVisibleMethodWxpaySource: updatedSettings.PaymentVisibleMethodWxpaySource,
|
|
|
|
|
PaymentVisibleMethodAlipayEnabled: updatedSettings.PaymentVisibleMethodAlipayEnabled,
|
|
|
|
|
PaymentVisibleMethodWxpayEnabled: updatedSettings.PaymentVisibleMethodWxpayEnabled,
|
|
|
|
|
OpenAIAdvancedSchedulerEnabled: updatedSettings.OpenAIAdvancedSchedulerEnabled,
|
|
|
|
|
BalanceLowNotifyEnabled: updatedSettings.BalanceLowNotifyEnabled,
|
|
|
|
|
BalanceLowNotifyThreshold: updatedSettings.BalanceLowNotifyThreshold,
|
|
|
|
|
BalanceLowNotifyRechargeURL: updatedSettings.BalanceLowNotifyRechargeURL,
|
|
|
|
|
AccountQuotaNotifyEnabled: updatedSettings.AccountQuotaNotifyEnabled,
|
|
|
|
|
AccountQuotaNotifyEmails: dto.NotifyEmailEntriesFromService(updatedSettings.AccountQuotaNotifyEmails),
|
|
|
|
|
PaymentEnabled: updatedPaymentCfg.Enabled,
|
|
|
|
|
PaymentMinAmount: updatedPaymentCfg.MinAmount,
|
|
|
|
|
PaymentMaxAmount: updatedPaymentCfg.MaxAmount,
|
|
|
|
|
PaymentDailyLimit: updatedPaymentCfg.DailyLimit,
|
|
|
|
|
PaymentOrderTimeoutMin: updatedPaymentCfg.OrderTimeoutMin,
|
|
|
|
|
PaymentMaxPendingOrders: updatedPaymentCfg.MaxPendingOrders,
|
|
|
|
|
PaymentEnabledTypes: updatedPaymentCfg.EnabledTypes,
|
|
|
|
|
PaymentBalanceDisabled: updatedPaymentCfg.BalanceDisabled,
|
|
|
|
|
PaymentBalanceRechargeMultiplier: updatedPaymentCfg.BalanceRechargeMultiplier,
|
|
|
|
|
PaymentRechargeFeeRate: updatedPaymentCfg.RechargeFeeRate,
|
|
|
|
|
PaymentLoadBalanceStrat: updatedPaymentCfg.LoadBalanceStrategy,
|
|
|
|
|
PaymentProductNamePrefix: updatedPaymentCfg.ProductNamePrefix,
|
|
|
|
|
PaymentProductNameSuffix: updatedPaymentCfg.ProductNameSuffix,
|
|
|
|
|
PaymentHelpImageURL: updatedPaymentCfg.HelpImageURL,
|
|
|
|
|
PaymentHelpText: updatedPaymentCfg.HelpText,
|
|
|
|
|
PaymentCancelRateLimitEnabled: updatedPaymentCfg.CancelRateLimitEnabled,
|
|
|
|
|
PaymentCancelRateLimitMax: updatedPaymentCfg.CancelRateLimitMax,
|
|
|
|
|
PaymentCancelRateLimitWindow: updatedPaymentCfg.CancelRateLimitWindow,
|
|
|
|
|
PaymentCancelRateLimitUnit: updatedPaymentCfg.CancelRateLimitUnit,
|
|
|
|
|
PaymentCancelRateLimitMode: updatedPaymentCfg.CancelRateLimitMode,
|
|
|
|
|
RegistrationEnabled: updatedSettings.RegistrationEnabled,
|
|
|
|
|
EmailVerifyEnabled: updatedSettings.EmailVerifyEnabled,
|
|
|
|
|
RegistrationEmailSuffixWhitelist: updatedSettings.RegistrationEmailSuffixWhitelist,
|
|
|
|
|
PromoCodeEnabled: updatedSettings.PromoCodeEnabled,
|
|
|
|
|
PasswordResetEnabled: updatedSettings.PasswordResetEnabled,
|
|
|
|
|
FrontendURL: updatedSettings.FrontendURL,
|
|
|
|
|
InvitationCodeEnabled: updatedSettings.InvitationCodeEnabled,
|
|
|
|
|
TotpEnabled: updatedSettings.TotpEnabled,
|
|
|
|
|
TotpEncryptionKeyConfigured: h.settingService.IsTotpEncryptionKeyConfigured(),
|
|
|
|
|
SMTPHost: updatedSettings.SMTPHost,
|
|
|
|
|
SMTPPort: updatedSettings.SMTPPort,
|
|
|
|
|
SMTPUsername: updatedSettings.SMTPUsername,
|
|
|
|
|
SMTPPasswordConfigured: updatedSettings.SMTPPasswordConfigured,
|
|
|
|
|
SMTPFrom: updatedSettings.SMTPFrom,
|
|
|
|
|
SMTPFromName: updatedSettings.SMTPFromName,
|
|
|
|
|
SMTPUseTLS: updatedSettings.SMTPUseTLS,
|
|
|
|
|
TurnstileEnabled: updatedSettings.TurnstileEnabled,
|
|
|
|
|
TurnstileSiteKey: updatedSettings.TurnstileSiteKey,
|
|
|
|
|
TurnstileSecretKeyConfigured: updatedSettings.TurnstileSecretKeyConfigured,
|
|
|
|
|
LinuxDoConnectEnabled: updatedSettings.LinuxDoConnectEnabled,
|
|
|
|
|
LinuxDoConnectClientID: updatedSettings.LinuxDoConnectClientID,
|
|
|
|
|
LinuxDoConnectClientSecretConfigured: updatedSettings.LinuxDoConnectClientSecretConfigured,
|
|
|
|
|
LinuxDoConnectRedirectURL: updatedSettings.LinuxDoConnectRedirectURL,
|
|
|
|
|
WeChatConnectEnabled: updatedSettings.WeChatConnectEnabled,
|
|
|
|
|
WeChatConnectAppID: updatedSettings.WeChatConnectAppID,
|
|
|
|
|
WeChatConnectAppSecretConfigured: updatedSettings.WeChatConnectAppSecretConfigured,
|
|
|
|
|
WeChatConnectOpenAppID: updatedSettings.WeChatConnectOpenAppID,
|
|
|
|
|
WeChatConnectOpenAppSecretConfigured: updatedSettings.WeChatConnectOpenAppSecretConfigured,
|
|
|
|
|
WeChatConnectMPAppID: updatedSettings.WeChatConnectMPAppID,
|
|
|
|
|
WeChatConnectMPAppSecretConfigured: updatedSettings.WeChatConnectMPAppSecretConfigured,
|
|
|
|
|
WeChatConnectMobileAppID: updatedSettings.WeChatConnectMobileAppID,
|
|
|
|
|
WeChatConnectMobileAppSecretConfigured: updatedSettings.WeChatConnectMobileAppSecretConfigured,
|
|
|
|
|
WeChatConnectOpenEnabled: updatedSettings.WeChatConnectOpenEnabled,
|
|
|
|
|
WeChatConnectMPEnabled: updatedSettings.WeChatConnectMPEnabled,
|
|
|
|
|
WeChatConnectMobileEnabled: updatedSettings.WeChatConnectMobileEnabled,
|
|
|
|
|
WeChatConnectMode: updatedSettings.WeChatConnectMode,
|
|
|
|
|
WeChatConnectScopes: updatedSettings.WeChatConnectScopes,
|
|
|
|
|
WeChatConnectRedirectURL: updatedSettings.WeChatConnectRedirectURL,
|
|
|
|
|
WeChatConnectFrontendRedirectURL: updatedSettings.WeChatConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectEnabled: updatedSettings.OIDCConnectEnabled,
|
|
|
|
|
OIDCConnectProviderName: updatedSettings.OIDCConnectProviderName,
|
|
|
|
|
OIDCConnectClientID: updatedSettings.OIDCConnectClientID,
|
|
|
|
|
OIDCConnectClientSecretConfigured: updatedSettings.OIDCConnectClientSecretConfigured,
|
|
|
|
|
OIDCConnectIssuerURL: updatedSettings.OIDCConnectIssuerURL,
|
|
|
|
|
OIDCConnectDiscoveryURL: updatedSettings.OIDCConnectDiscoveryURL,
|
|
|
|
|
OIDCConnectAuthorizeURL: updatedSettings.OIDCConnectAuthorizeURL,
|
|
|
|
|
OIDCConnectTokenURL: updatedSettings.OIDCConnectTokenURL,
|
|
|
|
|
OIDCConnectUserInfoURL: updatedSettings.OIDCConnectUserInfoURL,
|
|
|
|
|
OIDCConnectJWKSURL: updatedSettings.OIDCConnectJWKSURL,
|
|
|
|
|
OIDCConnectScopes: updatedSettings.OIDCConnectScopes,
|
|
|
|
|
OIDCConnectRedirectURL: updatedSettings.OIDCConnectRedirectURL,
|
|
|
|
|
OIDCConnectFrontendRedirectURL: updatedSettings.OIDCConnectFrontendRedirectURL,
|
|
|
|
|
OIDCConnectTokenAuthMethod: updatedSettings.OIDCConnectTokenAuthMethod,
|
|
|
|
|
OIDCConnectUsePKCE: updatedSettings.OIDCConnectUsePKCE,
|
|
|
|
|
OIDCConnectValidateIDToken: updatedSettings.OIDCConnectValidateIDToken,
|
|
|
|
|
OIDCConnectAllowedSigningAlgs: updatedSettings.OIDCConnectAllowedSigningAlgs,
|
|
|
|
|
OIDCConnectClockSkewSeconds: updatedSettings.OIDCConnectClockSkewSeconds,
|
|
|
|
|
OIDCConnectRequireEmailVerified: updatedSettings.OIDCConnectRequireEmailVerified,
|
|
|
|
|
OIDCConnectUserInfoEmailPath: updatedSettings.OIDCConnectUserInfoEmailPath,
|
|
|
|
|
OIDCConnectUserInfoIDPath: updatedSettings.OIDCConnectUserInfoIDPath,
|
|
|
|
|
OIDCConnectUserInfoUsernamePath: updatedSettings.OIDCConnectUserInfoUsernamePath,
|
|
|
|
|
SiteName: updatedSettings.SiteName,
|
|
|
|
|
SiteLogo: updatedSettings.SiteLogo,
|
|
|
|
|
SiteSubtitle: updatedSettings.SiteSubtitle,
|
|
|
|
|
APIBaseURL: updatedSettings.APIBaseURL,
|
|
|
|
|
ContactInfo: updatedSettings.ContactInfo,
|
|
|
|
|
DocURL: updatedSettings.DocURL,
|
|
|
|
|
HomeContent: updatedSettings.HomeContent,
|
|
|
|
|
HideCcsImportButton: updatedSettings.HideCcsImportButton,
|
|
|
|
|
PurchaseSubscriptionEnabled: updatedSettings.PurchaseSubscriptionEnabled,
|
|
|
|
|
PurchaseSubscriptionURL: updatedSettings.PurchaseSubscriptionURL,
|
|
|
|
|
TableDefaultPageSize: updatedSettings.TableDefaultPageSize,
|
|
|
|
|
TablePageSizeOptions: updatedSettings.TablePageSizeOptions,
|
|
|
|
|
CustomMenuItems: dto.ParseCustomMenuItems(updatedSettings.CustomMenuItems),
|
|
|
|
|
CustomEndpoints: dto.ParseCustomEndpoints(updatedSettings.CustomEndpoints),
|
|
|
|
|
DefaultConcurrency: updatedSettings.DefaultConcurrency,
|
|
|
|
|
DefaultBalance: updatedSettings.DefaultBalance,
|
|
|
|
|
DefaultSubscriptions: updatedDefaultSubscriptions,
|
|
|
|
|
EnableModelFallback: updatedSettings.EnableModelFallback,
|
|
|
|
|
FallbackModelAnthropic: updatedSettings.FallbackModelAnthropic,
|
|
|
|
|
FallbackModelOpenAI: updatedSettings.FallbackModelOpenAI,
|
|
|
|
|
FallbackModelGemini: updatedSettings.FallbackModelGemini,
|
|
|
|
|
FallbackModelAntigravity: updatedSettings.FallbackModelAntigravity,
|
|
|
|
|
EnableIdentityPatch: updatedSettings.EnableIdentityPatch,
|
|
|
|
|
IdentityPatchPrompt: updatedSettings.IdentityPatchPrompt,
|
|
|
|
|
OpsMonitoringEnabled: updatedSettings.OpsMonitoringEnabled,
|
|
|
|
|
OpsRealtimeMonitoringEnabled: updatedSettings.OpsRealtimeMonitoringEnabled,
|
|
|
|
|
OpsQueryModeDefault: updatedSettings.OpsQueryModeDefault,
|
|
|
|
|
OpsMetricsIntervalSeconds: updatedSettings.OpsMetricsIntervalSeconds,
|
|
|
|
|
MinClaudeCodeVersion: updatedSettings.MinClaudeCodeVersion,
|
|
|
|
|
MaxClaudeCodeVersion: updatedSettings.MaxClaudeCodeVersion,
|
|
|
|
|
AllowUngroupedKeyScheduling: updatedSettings.AllowUngroupedKeyScheduling,
|
|
|
|
|
BackendModeEnabled: updatedSettings.BackendModeEnabled,
|
|
|
|
|
EnableFingerprintUnification: updatedSettings.EnableFingerprintUnification,
|
|
|
|
|
EnableMetadataPassthrough: updatedSettings.EnableMetadataPassthrough,
|
|
|
|
|
EnableCCHSigning: updatedSettings.EnableCCHSigning,
|
|
|
|
|
PaymentVisibleMethodAlipaySource: updatedSettings.PaymentVisibleMethodAlipaySource,
|
|
|
|
|
PaymentVisibleMethodWxpaySource: updatedSettings.PaymentVisibleMethodWxpaySource,
|
|
|
|
|
PaymentVisibleMethodAlipayEnabled: updatedSettings.PaymentVisibleMethodAlipayEnabled,
|
|
|
|
|
PaymentVisibleMethodWxpayEnabled: updatedSettings.PaymentVisibleMethodWxpayEnabled,
|
|
|
|
|
OpenAIAdvancedSchedulerEnabled: updatedSettings.OpenAIAdvancedSchedulerEnabled,
|
|
|
|
|
BalanceLowNotifyEnabled: updatedSettings.BalanceLowNotifyEnabled,
|
|
|
|
|
BalanceLowNotifyThreshold: updatedSettings.BalanceLowNotifyThreshold,
|
|
|
|
|
BalanceLowNotifyRechargeURL: updatedSettings.BalanceLowNotifyRechargeURL,
|
|
|
|
|
AccountQuotaNotifyEnabled: updatedSettings.AccountQuotaNotifyEnabled,
|
|
|
|
|
AccountQuotaNotifyEmails: dto.NotifyEmailEntriesFromService(updatedSettings.AccountQuotaNotifyEmails),
|
|
|
|
|
PaymentEnabled: updatedPaymentCfg.Enabled,
|
|
|
|
|
PaymentMinAmount: updatedPaymentCfg.MinAmount,
|
|
|
|
|
PaymentMaxAmount: updatedPaymentCfg.MaxAmount,
|
|
|
|
|
PaymentDailyLimit: updatedPaymentCfg.DailyLimit,
|
|
|
|
|
PaymentOrderTimeoutMin: updatedPaymentCfg.OrderTimeoutMin,
|
|
|
|
|
PaymentMaxPendingOrders: updatedPaymentCfg.MaxPendingOrders,
|
|
|
|
|
PaymentEnabledTypes: updatedPaymentCfg.EnabledTypes,
|
|
|
|
|
PaymentBalanceDisabled: updatedPaymentCfg.BalanceDisabled,
|
|
|
|
|
PaymentBalanceRechargeMultiplier: updatedPaymentCfg.BalanceRechargeMultiplier,
|
|
|
|
|
PaymentRechargeFeeRate: updatedPaymentCfg.RechargeFeeRate,
|
|
|
|
|
PaymentLoadBalanceStrat: updatedPaymentCfg.LoadBalanceStrategy,
|
|
|
|
|
PaymentProductNamePrefix: updatedPaymentCfg.ProductNamePrefix,
|
|
|
|
|
PaymentProductNameSuffix: updatedPaymentCfg.ProductNameSuffix,
|
|
|
|
|
PaymentHelpImageURL: updatedPaymentCfg.HelpImageURL,
|
|
|
|
|
PaymentHelpText: updatedPaymentCfg.HelpText,
|
|
|
|
|
PaymentCancelRateLimitEnabled: updatedPaymentCfg.CancelRateLimitEnabled,
|
|
|
|
|
PaymentCancelRateLimitMax: updatedPaymentCfg.CancelRateLimitMax,
|
|
|
|
|
PaymentCancelRateLimitWindow: updatedPaymentCfg.CancelRateLimitWindow,
|
|
|
|
|
PaymentCancelRateLimitUnit: updatedPaymentCfg.CancelRateLimitUnit,
|
|
|
|
|
PaymentCancelRateLimitMode: updatedPaymentCfg.CancelRateLimitMode,
|
|
|
|
|
}
|
|
|
|
|
response.Success(c, systemSettingsResponseData(payload, updatedAuthSourceDefaults))
|
|
|
|
|
}
|
|
|
|
|
@@ -1442,12 +1531,33 @@ func diffSettings(before *service.SystemSettings, after *service.SystemSettings,
|
|
|
|
|
if req.WeChatConnectAppSecret != "" {
|
|
|
|
|
changed = append(changed, "wechat_connect_app_secret")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectOpenAppID != after.WeChatConnectOpenAppID {
|
|
|
|
|
changed = append(changed, "wechat_connect_open_app_id")
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectOpenAppSecret != "" {
|
|
|
|
|
changed = append(changed, "wechat_connect_open_app_secret")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectMPAppID != after.WeChatConnectMPAppID {
|
|
|
|
|
changed = append(changed, "wechat_connect_mp_app_id")
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMPAppSecret != "" {
|
|
|
|
|
changed = append(changed, "wechat_connect_mp_app_secret")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectMobileAppID != after.WeChatConnectMobileAppID {
|
|
|
|
|
changed = append(changed, "wechat_connect_mobile_app_id")
|
|
|
|
|
}
|
|
|
|
|
if req.WeChatConnectMobileAppSecret != "" {
|
|
|
|
|
changed = append(changed, "wechat_connect_mobile_app_secret")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectOpenEnabled != after.WeChatConnectOpenEnabled {
|
|
|
|
|
changed = append(changed, "wechat_connect_open_enabled")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectMPEnabled != after.WeChatConnectMPEnabled {
|
|
|
|
|
changed = append(changed, "wechat_connect_mp_enabled")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectMobileEnabled != after.WeChatConnectMobileEnabled {
|
|
|
|
|
changed = append(changed, "wechat_connect_mobile_enabled")
|
|
|
|
|
}
|
|
|
|
|
if before.WeChatConnectMode != after.WeChatConnectMode {
|
|
|
|
|
changed = append(changed, "wechat_connect_mode")
|
|
|
|
|
}
|
|
|
|
|
|