From 2bc991685fa2520e108fdb87acd0c14c7ce84232 Mon Sep 17 00:00:00 2001 From: StageDog Date: Sat, 22 Nov 2025 19:06:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=92=88=E5=AF=B9=20discord=20?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=85=8D=E7=BD=AE=E4=BD=BF=E7=94=A8=E6=96=B0?= =?UTF-8?q?=E7=89=88=E8=AE=BE=E7=BD=AE=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constants.go | 3 -- controller/discord.go | 11 ++++---- controller/misc.go | 4 +-- controller/option.go | 4 +-- model/option.go | 9 ------ setting/system_setting/discord.go | 21 ++++++++++++++ web/src/components/settings/SystemSetting.jsx | 28 +++++++++---------- 7 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 setting/system_setting/discord.go diff --git a/common/constants.go b/common/constants.go index 077a3647b..120c1e9d2 100644 --- a/common/constants.go +++ b/common/constants.go @@ -44,7 +44,6 @@ var PasswordLoginEnabled = true var PasswordRegisterEnabled = true var EmailVerificationEnabled = false var GitHubOAuthEnabled = false -var DiscordOAuthEnabled = false var LinuxDOOAuthEnabled = false var WeChatAuthEnabled = false var TelegramOAuthEnabled = false @@ -83,8 +82,6 @@ var SMTPToken = "" var GitHubClientId = "" var GitHubClientSecret = "" -var DiscordClientId = "" -var DiscordClientSecret = "" var LinuxDOClientId = "" var LinuxDOClientSecret = "" var LinuxDOMinimumTrustLevel = 0 diff --git a/controller/discord.go b/controller/discord.go index 7e468570e..41dd59808 100644 --- a/controller/discord.go +++ b/controller/discord.go @@ -39,8 +39,8 @@ func getDiscordUserInfoByCode(code string) (*DiscordUser, error) { } values := url.Values{} - values.Set("client_id", common.DiscordClientId) - values.Set("client_secret", common.DiscordClientSecret) + values.Set("client_id", system_setting.GetDiscordSettings().ClientId) + values.Set("client_secret", system_setting.GetDiscordSettings().ClientSecret) values.Set("code", code) values.Set("grant_type", "authorization_code") values.Set("redirect_uri", fmt.Sprintf("%s/oauth/discord", system_setting.ServerAddress)) @@ -114,10 +114,10 @@ func DiscordOAuth(c *gin.Context) { DiscordBind(c) return } - if !common.DiscordOAuthEnabled { + if !system_setting.GetDiscordSettings().Enabled { c.JSON(http.StatusOK, gin.H{ "success": false, - "message": "管理员未开启通过 discord 登录以及注册", + "message": "管理员未开启通过 Discord 登录以及注册", }) return } @@ -179,7 +179,7 @@ func DiscordOAuth(c *gin.Context) { } func DiscordBind(c *gin.Context) { - if !common.DiscordOAuthEnabled { + if !system_setting.GetDiscordSettings().Enabled { c.JSON(http.StatusOK, gin.H{ "success": false, "message": "管理员未开启通过 Discord 登录以及注册", @@ -204,7 +204,6 @@ func DiscordBind(c *gin.Context) { } session := sessions.Default(c) id := session.Get("id") - // id := c.GetInt("id") // critical bug! user.Id = id.(int) err = user.FillUserById() if err != nil { diff --git a/controller/misc.go b/controller/misc.go index 6895c435d..70415137a 100644 --- a/controller/misc.go +++ b/controller/misc.go @@ -52,8 +52,8 @@ func GetStatus(c *gin.Context) { "email_verification": common.EmailVerificationEnabled, "github_oauth": common.GitHubOAuthEnabled, "github_client_id": common.GitHubClientId, - "discord_oauth": common.DiscordOAuthEnabled, - "discord_client_id": common.DiscordClientId, + "discord_oauth": system_setting.GetDiscordSettings().Enabled, + "discord_client_id": system_setting.GetDiscordSettings().ClientId, "linuxdo_oauth": common.LinuxDOOAuthEnabled, "linuxdo_client_id": common.LinuxDOClientId, "linuxdo_minimum_trust_level": common.LinuxDOMinimumTrustLevel, diff --git a/controller/option.go b/controller/option.go index 14036b25f..89b2fc4d5 100644 --- a/controller/option.go +++ b/controller/option.go @@ -71,8 +71,8 @@ func UpdateOption(c *gin.Context) { }) return } - case "DiscordOAuthEnabled": - if option.Value == "true" && common.DiscordClientId == "" { + case "discord.enabled": + if option.Value == "true" && system_setting.GetDiscordSettings().ClientId == "" { c.JSON(http.StatusOK, gin.H{ "success": false, "message": "无法启用 Discord OAuth,请先填入 Discord Client Id 以及 Discord Client Secret!", diff --git a/model/option.go b/model/option.go index 135811408..e9fd50d7f 100644 --- a/model/option.go +++ b/model/option.go @@ -38,7 +38,6 @@ func InitOptionMap() { common.OptionMap["PasswordRegisterEnabled"] = strconv.FormatBool(common.PasswordRegisterEnabled) common.OptionMap["EmailVerificationEnabled"] = strconv.FormatBool(common.EmailVerificationEnabled) common.OptionMap["GitHubOAuthEnabled"] = strconv.FormatBool(common.GitHubOAuthEnabled) - common.OptionMap["DiscordOAuthEnabled"] = strconv.FormatBool(common.DiscordOAuthEnabled) common.OptionMap["LinuxDOOAuthEnabled"] = strconv.FormatBool(common.LinuxDOOAuthEnabled) common.OptionMap["TelegramOAuthEnabled"] = strconv.FormatBool(common.TelegramOAuthEnabled) common.OptionMap["WeChatAuthEnabled"] = strconv.FormatBool(common.WeChatAuthEnabled) @@ -96,8 +95,6 @@ func InitOptionMap() { common.OptionMap["PayMethods"] = operation_setting.PayMethods2JsonString() common.OptionMap["GitHubClientId"] = "" common.OptionMap["GitHubClientSecret"] = "" - common.OptionMap["DiscordClientId"] = "" - common.OptionMap["DiscordClientSecret"] = "" common.OptionMap["TelegramBotToken"] = "" common.OptionMap["TelegramBotName"] = "" common.OptionMap["WeChatServerAddress"] = "" @@ -227,8 +224,6 @@ func updateOptionMap(key string, value string) (err error) { common.EmailVerificationEnabled = boolValue case "GitHubOAuthEnabled": common.GitHubOAuthEnabled = boolValue - case "DiscordOAuthEnabled": - common.DiscordOAuthEnabled = boolValue case "LinuxDOOAuthEnabled": common.LinuxDOOAuthEnabled = boolValue case "WeChatAuthEnabled": @@ -365,10 +360,6 @@ func updateOptionMap(key string, value string) (err error) { common.GitHubClientId = value case "GitHubClientSecret": common.GitHubClientSecret = value - case "DiscordClientId": - common.DiscordClientId = value - case "DiscordClientSecret": - common.DiscordClientSecret = value case "LinuxDOClientId": common.LinuxDOClientId = value case "LinuxDOClientSecret": diff --git a/setting/system_setting/discord.go b/setting/system_setting/discord.go new file mode 100644 index 000000000..f4e763ffa --- /dev/null +++ b/setting/system_setting/discord.go @@ -0,0 +1,21 @@ +package system_setting + +import "github.com/QuantumNous/new-api/setting/config" + +type DiscordSettings struct { + Enabled bool `json:"enabled"` + ClientId string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// 默认配置 +var defaultDiscordSettings = DiscordSettings{} + +func init() { + // 注册到全局配置管理器 + config.GlobalConfig.Register("discord", &defaultDiscordSettings) +} + +func GetDiscordSettings() *DiscordSettings { + return &defaultDiscordSettings +} diff --git a/web/src/components/settings/SystemSetting.jsx b/web/src/components/settings/SystemSetting.jsx index d6b96594c..6b356468e 100644 --- a/web/src/components/settings/SystemSetting.jsx +++ b/web/src/components/settings/SystemSetting.jsx @@ -52,9 +52,9 @@ const SystemSetting = () => { GitHubOAuthEnabled: '', GitHubClientId: '', GitHubClientSecret: '', - DiscordOAuthEnabled: '', - DiscordClientId: '', - DiscordClientSecret: '', + 'discord.enabled': '', + 'discord.client_id': '', + 'discord.client_secret': '', 'oidc.enabled': '', 'oidc.client_id': '', 'oidc.client_secret': '', @@ -182,7 +182,7 @@ const SystemSetting = () => { case 'EmailAliasRestrictionEnabled': case 'SMTPSSLEnabled': case 'LinuxDOOAuthEnabled': - case 'DiscordOAuthEnabled': + case 'discord.enabled': case 'oidc.enabled': case 'passkey.enabled': case 'passkey.allow_insecure_origin': @@ -480,16 +480,16 @@ const SystemSetting = () => { const submitDiscordOAuth = async () => { const options = []; - if (originInputs['DiscordClientId'] !== inputs.DiscordClientId) { - options.push({ key: 'DiscordClientId', value: inputs.DiscordClientId }); + if (originInputs['discord.client_id'] !== inputs['discord.client_id']) { + options.push({ key: 'discord.client_id', value: inputs['discord.client_id'] }); } if ( - originInputs['DiscordClientSecret'] !== inputs.DiscordClientSecret && - inputs.DiscordClientSecret !== '' + originInputs['discord.client_secret'] !== inputs['discord.client_secret'] && + inputs['discord.client_secret'] !== '' ) { options.push({ - key: 'DiscordClientSecret', - value: inputs.DiscordClientSecret, + key: 'discord.client_secret', + value: inputs['discord.client_secret'], }); } @@ -1040,10 +1040,10 @@ const SystemSetting = () => { {t('允许通过 GitHub 账户登录 & 注册')} - handleCheckboxChange('DiscordOAuthEnabled', e) + handleCheckboxChange('discord.enabled', e) } > {t('允许通过 Discord 账户登录 & 注册')} @@ -1457,13 +1457,13 @@ const SystemSetting = () => { >