feat: openapi supoort

This commit is contained in:
engigu
2026-03-05 22:22:46 +08:00
parent 9fec4ecdb5
commit 863a298609
22 changed files with 1266 additions and 227 deletions
+66 -29
View File
@@ -88,16 +88,30 @@ func (sc *SettingsController) ChangePassword(c *gin.Context) {
// GetSiteSettings 获取站点设置
func (sc *SettingsController) GetSiteSettings(c *gin.Context) {
settings := sc.settingsService.GetSection(constant.SectionSite)
// 解析 JSON 格式的 API Token
if tokenJson, ok := settings[constant.KeyApiToken]; ok && tokenJson != "" {
var tokenData map[string]string
if err := json.Unmarshal([]byte(tokenJson), &tokenData); err == nil {
settings["api_token"] = tokenData["token"]
settings["api_token_expire"] = tokenData["expire_at"]
var tokenConfig vo.TokenConfig
if err := json.Unmarshal([]byte(tokenJson), &tokenConfig); err == nil {
settings["api_token"] = tokenConfig.Token
settings["api_token_expire"] = tokenConfig.ExpireAt
}
}
// 解析 JSON 格式的 OpenAPI Token
if tokenJson, ok := settings[constant.KeyOpenapiToken]; ok && tokenJson != "" {
var tokenConfig vo.TokenConfig
if err := json.Unmarshal([]byte(tokenJson), &tokenConfig); err == nil {
settings["openapi_token"] = tokenConfig.Token
settings["openapi_token_expire"] = tokenConfig.ExpireAt
if tokenConfig.Enabled {
settings["openapi_enabled"] = "true"
} else {
settings["openapi_enabled"] = "false"
}
}
}
utils.Success(c, settings)
}
@@ -116,13 +130,16 @@ func (sc *SettingsController) GetPublicSiteSettings(c *gin.Context) {
// UpdateSiteSettings 更新站点设置
func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
var req struct {
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Icon string `json:"icon"`
PageSize string `json:"page_size"`
CookieDays string `json:"cookie_days"`
ApiToken string `json:"api_token"`
ApiTokenExpire string `json:"api_token_expire"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Icon string `json:"icon"`
PageSize string `json:"page_size"`
CookieDays string `json:"cookie_days"`
ApiToken string `json:"api_token"`
ApiTokenExpire string `json:"api_token_expire"`
OpenapiEnabled bool `json:"openapi_enabled"`
OpenapiToken string `json:"openapi_token"`
OpenapiTokenExpire string `json:"openapi_token_expire"`
}
if err := c.ShouldBindJSON(&req); err != nil {
@@ -132,22 +149,35 @@ func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
apiTokenJson := ""
if req.ApiToken != "" || req.ApiTokenExpire != "" {
tokenData := map[string]string{
"token": req.ApiToken,
"expire_at": req.ApiTokenExpire,
tokenConfig := vo.TokenConfig{
Token: req.ApiToken,
ExpireAt: req.ApiTokenExpire,
}
if b, err := json.Marshal(tokenData); err == nil {
if b, err := json.Marshal(tokenConfig); err == nil {
apiTokenJson = string(b)
}
}
openapiTokenJson := ""
if req.OpenapiToken != "" || req.OpenapiTokenExpire != "" || req.OpenapiEnabled {
tokenConfig := vo.TokenConfig{
Enabled: req.OpenapiEnabled,
Token: req.OpenapiToken,
ExpireAt: req.OpenapiTokenExpire,
}
if b, err := json.Marshal(tokenConfig); err == nil {
openapiTokenJson = string(b)
}
}
values := map[string]string{
constant.KeyTitle: req.Title,
constant.KeySubtitle: req.Subtitle,
constant.KeyIcon: req.Icon,
constant.KeyPageSize: req.PageSize,
constant.KeyCookieDays: req.CookieDays,
constant.KeyApiToken: apiTokenJson,
constant.KeyTitle: req.Title,
constant.KeySubtitle: req.Subtitle,
constant.KeyIcon: req.Icon,
constant.KeyPageSize: req.PageSize,
constant.KeyCookieDays: req.CookieDays,
constant.KeyApiToken: apiTokenJson,
constant.KeyOpenapiToken: openapiTokenJson,
}
if err := sc.settingsService.SetSection(constant.SectionSite, values); err != nil {
@@ -165,6 +195,13 @@ func (sc *SettingsController) GenerateApiToken(c *gin.Context) {
})
}
// GenerateOpenapiToken 随机生成OpenAPI Token
func (sc *SettingsController) GenerateOpenapiToken(c *gin.Context) {
utils.Success(c, gin.H{
"token": strings.ToLower(utils.RandomString(32)),
})
}
// GetSchedulerSettings 获取调度设置
func (sc *SettingsController) GetSchedulerSettings(c *gin.Context) {
settings := sc.settingsService.GetSection(constant.SectionScheduler)
@@ -382,12 +419,12 @@ func (sc *SettingsController) RestoreBackup(c *gin.Context) {
func (sc *SettingsController) GetSetting(c *gin.Context) {
section := c.Param("section")
key := c.Param("key")
if section == "" || key == "" {
utils.BadRequest(c, "参数错误")
return
}
value := sc.settingsService.Get(section, key)
utils.Success(c, value)
}
@@ -396,20 +433,20 @@ func (sc *SettingsController) GetSetting(c *gin.Context) {
func (sc *SettingsController) GenerateSettingToken(c *gin.Context) {
section := c.Param("section")
key := c.Param("key")
if section == "" || key == "" {
utils.BadRequest(c, "参数错误")
return
}
// 生成32位随机token
token := strings.ToLower(utils.RandomString(32))
// 保存到数据库
if err := sc.settingsService.Set(section, key, token); err != nil {
utils.ServerError(c, "保存失败")
return
}
utils.Success(c, token)
}