优化结构

This commit is contained in:
Yvan
2026-08-27 22:33:43 +08:00
parent 5052835fcb
commit e407d3ac10
86 changed files with 3151 additions and 726 deletions
+12 -2
View File
@@ -15,12 +15,17 @@ func NewAnnouncement(service *service.AnnouncementService) *Announcement {
}
func (h *Announcement) Create(c *gin.Context) {
claims := Claims(c)
if claims == nil || claims.ID == 0 {
NoAuth(c, "未登录或非法访问")
return
}
var req dto.AnnouncementRequest
if err := c.ShouldBindJSON(&req); err != nil {
Fail(c, err.Error())
return
}
if err := h.service.Create(c.Request.Context(), &req); err != nil {
if err := h.service.Create(c.Request.Context(), claims.ID, &req); err != nil {
Fail(c, "创建失败")
return
}
@@ -44,12 +49,17 @@ func (h *Announcement) DeleteByIDs(c *gin.Context) {
}
func (h *Announcement) Update(c *gin.Context) {
claims := Claims(c)
if claims == nil || claims.ID == 0 {
NoAuth(c, "未登录或非法访问")
return
}
var req dto.AnnouncementRequest
if err := c.ShouldBindJSON(&req); err != nil {
Fail(c, err.Error())
return
}
if err := h.service.Update(c.Request.Context(), &req); err != nil {
if err := h.service.Update(c.Request.Context(), claims.ID, &req); err != nil {
Fail(c, "更新失败")
return
}
+6 -1
View File
@@ -139,12 +139,17 @@ func (h *Media) Rename(c *gin.Context) {
Write(c, CodeSuccess, gin.H{}, "编辑成功")
}
func (h *Media) ImportURLs(c *gin.Context) {
claims := Claims(c)
if claims == nil || claims.ID == 0 {
NoAuth(c, "未登录或非法访问")
return
}
var req []dto.ImportMediaRequest
if err := c.ShouldBindJSON(&req); err != nil {
Fail(c, err.Error())
return
}
if err := h.service.ImportURLRequests(c.Request.Context(), req); err != nil {
if err := h.service.ImportURLRequests(c.Request.Context(), claims.ID, req); err != nil {
Fail(c, "导入URL失败")
return
}
+26 -36
View File
@@ -1,6 +1,7 @@
package handler
import (
"errors"
"kra/internal/service"
"kra/internal/service/dto"
@@ -11,6 +12,27 @@ type Menu struct{ service *service.MenuService }
func NewMenu(service *service.MenuService) *Menu { return &Menu{service: service} }
func validateMenuRequest(req *dto.MenuRequest) error {
if req == nil {
return errors.New("菜单参数不能为空")
}
checks := []struct {
value string
field string
}{
{req.Path, "Path"}, {req.Name, "Name"}, {req.Component, "Component"}, {req.Meta.Title, "Title"},
}
for _, check := range checks {
if check.value == "" {
return errors.New(check.field + "值不能为空")
}
}
if req.Sort < 0 {
return errors.New("Sort长度或值不在合法范围,ge=0")
}
return nil
}
func (h *Menu) List(c *gin.Context) {
items, err := h.service.Tree(c.Request.Context())
if err != nil {
@@ -35,24 +57,8 @@ func (h *Menu) Create(c *gin.Context) {
Fail(c, err.Error())
return
}
if req.Path == "" {
Fail(c, "Path值不能为空")
return
}
if req.Name == "" {
Fail(c, "Name值不能为空")
return
}
if req.Component == "" {
Fail(c, "Component值不能为空")
return
}
if req.Sort < 0 {
Fail(c, "Sort长度或值不在合法范围,ge=0")
return
}
if req.Meta.Title == "" {
Fail(c, "Title值不能为空")
if err := validateMenuRequest(&req); err != nil {
Fail(c, err.Error())
return
}
if err := h.service.Create(c.Request.Context(), &req); err != nil {
@@ -68,24 +74,8 @@ func (h *Menu) Update(c *gin.Context) {
Fail(c, err.Error())
return
}
if req.Path == "" {
Fail(c, "Path值不能为空")
return
}
if req.Name == "" {
Fail(c, "Name值不能为空")
return
}
if req.Component == "" {
Fail(c, "Component值不能为空")
return
}
if req.Sort < 0 {
Fail(c, "Sort长度或值不在合法范围,ge=0")
return
}
if req.Meta.Title == "" {
Fail(c, "Title值不能为空")
if err := validateMenuRequest(&req); err != nil {
Fail(c, err.Error())
return
}
if err := h.service.Update(c.Request.Context(), &req); err != nil {
+3 -1
View File
@@ -165,7 +165,9 @@ func (h *Payment) Callback(c *gin.Context) {
}
ack, err := h.service.Callback(c.Request.Context(), &dto.PaymentCallbackRequest{Provider: c.Param("provider"), Headers: headers, Body: raw, Query: query})
writePaymentCallbackAck(c, ack)
_ = err
if err != nil {
_ = c.Error(err)
}
}
func writePaymentCallbackAck(c *gin.Context, ack dto.PaymentCallbackAck) {
-3
View File
@@ -8,7 +8,6 @@ import (
"io"
"net/http"
"net/url"
"strconv"
"strings"
"time"
@@ -75,8 +74,6 @@ func OperationAudit(runtime *config.Store, recorder *service.AuditRecorder) gin.
userID := uint(0)
if claims := Claims(c); claims != nil {
userID = claims.ID
} else if value, err := strconv.ParseUint(c.GetHeader("x-user-id"), 10, 64); err == nil {
userID = uint(value)
}
requestID, _ := c.Get("request_id")
status := c.Writer.Status()
+1 -1
View File
@@ -10,7 +10,7 @@ import (
)
const (
defaultCORSHeaders = "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,X-Token,X-User-Id"
defaultCORSHeaders = "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,X-Token"
defaultCORSMethods = "POST, GET, OPTIONS,DELETE,PUT"
defaultCORSExpose = "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type, New-Token, New-Expires-At"
)
@@ -0,0 +1,12 @@
package middleware
import (
"strings"
"testing"
)
func TestDefaultCORSHeadersDoNotAllowUserIdentityHeader(t *testing.T) {
if strings.Contains(strings.ToLower(defaultCORSHeaders), "x-user-id") {
t.Fatal("default CORS headers still allow the forgeable x-user-id header")
}
}
+1 -1
View File
@@ -68,7 +68,7 @@ func failureLogModule(path string) string {
}
func expectedClientFailure(message string) bool {
for _, value := range []string{"参数错误", "请输入用户名和密码", "验证码错误", "用户名不存在或者密码错误", "用户被禁止登录", "账号已锁定", "权限不足", "密码已过期", "未登录", "token", "令牌失效"} {
for _, value := range []string{"参数错误", "请输入用户名和密码", "验证码错误", "用户名不存在或者密码错误", "用户被禁止登录", "账号已锁定", "请求太过频繁", "权限不足", "密码已过期", "未登录", "token", "令牌失效"} {
if strings.Contains(message, value) {
return true
}