chore: remove api token function
This commit is contained in:
@@ -42,7 +42,6 @@ const (
|
||||
KeyIcon = "icon"
|
||||
KeyPageSize = "page_size"
|
||||
KeyCookieDays = "cookie_days"
|
||||
KeyApiToken = "api_token"
|
||||
KeyOpenapiToken = "openapi_token"
|
||||
|
||||
// Security Settings Key 常量
|
||||
|
||||
@@ -89,15 +89,6 @@ func (sc *SettingsController) ChangePassword(c *gin.Context) {
|
||||
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 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
|
||||
@@ -135,8 +126,6 @@ func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
|
||||
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"`
|
||||
@@ -147,17 +136,6 @@ func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
apiTokenJson := ""
|
||||
if req.ApiToken != "" || req.ApiTokenExpire != "" {
|
||||
tokenConfig := vo.TokenConfig{
|
||||
Token: req.ApiToken,
|
||||
ExpireAt: req.ApiTokenExpire,
|
||||
}
|
||||
if b, err := json.Marshal(tokenConfig); err == nil {
|
||||
apiTokenJson = string(b)
|
||||
}
|
||||
}
|
||||
|
||||
openapiTokenJson := ""
|
||||
if req.OpenapiToken != "" || req.OpenapiTokenExpire != "" || req.OpenapiEnabled {
|
||||
tokenConfig := vo.TokenConfig{
|
||||
@@ -176,7 +154,6 @@ func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
|
||||
constant.KeyIcon: req.Icon,
|
||||
constant.KeyPageSize: req.PageSize,
|
||||
constant.KeyCookieDays: req.CookieDays,
|
||||
constant.KeyApiToken: apiTokenJson,
|
||||
constant.KeyOpenapiToken: openapiTokenJson,
|
||||
}
|
||||
|
||||
@@ -188,13 +165,6 @@ func (sc *SettingsController) UpdateSiteSettings(c *gin.Context) {
|
||||
utils.SuccessMsg(c, "保存成功")
|
||||
}
|
||||
|
||||
// GenerateApiToken 随机生成API Token
|
||||
func (sc *SettingsController) GenerateApiToken(c *gin.Context) {
|
||||
utils.Success(c, gin.H{
|
||||
"token": strings.ToLower(utils.RandomString(32)),
|
||||
})
|
||||
}
|
||||
|
||||
// GenerateOpenapiToken 随机生成OpenAPI Token
|
||||
func (sc *SettingsController) GenerateOpenapiToken(c *gin.Context) {
|
||||
utils.Success(c, gin.H{
|
||||
|
||||
@@ -17,13 +17,7 @@ import (
|
||||
|
||||
// AuthRequired 认证中间件
|
||||
func AuthRequired() gin.HandlerFunc {
|
||||
settingsSvc := services.NewSettingsService()
|
||||
return func(c *gin.Context) {
|
||||
// 校验 API Token (实验特性)
|
||||
if checkApiToken(c, settingsSvc) {
|
||||
return
|
||||
}
|
||||
|
||||
token, err := c.Cookie(constant.CookieName)
|
||||
if err != nil || token == "" {
|
||||
utils.Unauthorized(c, "请先登录")
|
||||
@@ -56,56 +50,6 @@ func AuthRequired() gin.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
// checkApiToken 校验 API Token (实验特性,后续可能移除或重构)
|
||||
// 返回 true 表示校验通过并已放行请求
|
||||
func checkApiToken(c *gin.Context, settingsSvc *services.SettingsService) bool {
|
||||
apiToken := c.GetHeader("X-API-Token")
|
||||
if apiToken == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
siteConfig := settingsSvc.GetSection(constant.SectionSite)
|
||||
tokenJson, ok := siteConfig[constant.KeyApiToken]
|
||||
if !ok || tokenJson == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
var tokenConfig vo.TokenConfig
|
||||
if err := json.Unmarshal([]byte(tokenJson), &tokenConfig); err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if tokenConfig.Token == "" || apiToken != tokenConfig.Token {
|
||||
return false
|
||||
}
|
||||
|
||||
// 检查过期时间
|
||||
if tokenConfig.ExpireAt != "" {
|
||||
// 前端传来的时间格式是 YYYY-MM-DD,使用 2006-01-02 解析
|
||||
expireDate, err := time.Parse("2006-01-02", tokenConfig.ExpireAt)
|
||||
if err == nil {
|
||||
// 将过期时间设为当天的 23:59:59
|
||||
expireDate = expireDate.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
|
||||
if time.Now().After(expireDate) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 模拟 Admin 角色,必须通过实际存在的 admin 用户 ID 来关联
|
||||
var adminUser models.User
|
||||
if err := database.DB.Where("role = ?", "admin").First(&adminUser).Error; err != nil {
|
||||
utils.Unauthorized(c, "未找到管理员账户,API Token 校验失败")
|
||||
c.Abort()
|
||||
return true // 返回 true 表示中间件已处理并截断了请求
|
||||
}
|
||||
|
||||
c.Set("userID", adminUser.ID)
|
||||
c.Set("username", adminUser.Username)
|
||||
c.Next()
|
||||
return true
|
||||
}
|
||||
|
||||
// OpenapiRequired OpenAPI 认证中间件
|
||||
func OpenapiRequired() gin.HandlerFunc {
|
||||
settingsSvc := services.NewSettingsService()
|
||||
|
||||
@@ -343,7 +343,6 @@ func registerSettingsRoutes(g *gin.RouterGroup, c *Controllers) {
|
||||
settings.POST("/password", c.Settings.ChangePassword)
|
||||
settings.GET("/site", c.Settings.GetSiteSettings)
|
||||
settings.PUT("/site", c.Settings.UpdateSiteSettings)
|
||||
settings.POST("/site/api-token/generate", c.Settings.GenerateApiToken)
|
||||
settings.POST("/site/openapi-token/generate", c.Settings.GenerateOpenapiToken)
|
||||
settings.GET("/paths", c.Settings.GetPaths)
|
||||
settings.GET("/scheduler", c.Settings.GetSchedulerSettings)
|
||||
|
||||
Reference in New Issue
Block a user