diff --git a/common/constants.go b/common/constants.go index 077a3647..120c1e9d 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 7e468570..41dd5980 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 6895c435..70415137 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 14036b25..89b2fc4d 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 13581140..e9fd50d7 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 00000000..f4e763ff --- /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 d6b96594..6b356468 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 = () => { >