Ai
1 Star 2 Fork 0

falling-ts/gower

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
request.go 1.85 KB
一键复制 编辑 原始数据 按行查看 历史
falling-ts 提交于 2024-12-08 00:45 +08:00 . feat 完善高级数据处理
package app
import (
"crypto/subtle"
"errors"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"reflect"
)
var (
exc = Exception()
valid = Validator()
)
// RequestIFace 通用请求接口
type RequestIFace interface {
Validate(c *gin.Context, req RequestIFace) error
}
type Request struct {
*gin.Context `json:"-" xml:"-" form:"-" query:"-" protobuf:"-" msgpack:"-" yaml:"-" uri:"-" header:"-" toml:"-"`
CsrfToken string `form:"csrfToken" json:"csrfToken" xml:"csrfToken" uri:"csrfToken"`
}
type IndexRequest struct {
Request
Page uint `form:"page,default=1" json:"page,default=1" binding:"numeric"`
PageNum uint `form:"pageNum,default=10" json:"pageNum,default=10" binding:"numeric"`
}
type ModalRequest struct {
Request
IsModal bool `form:"isModal,default=false" json:"isModal,default=false" binding:"boolean"`
}
// Validate 执行验证
func (r *Request) Validate(c *gin.Context, req RequestIFace) error {
r.Context = c
var ok bool
if err := c.ShouldBind(req); err != nil {
var invalidValidationError *validator.InvalidValidationError
if ok = errors.As(err, &invalidValidationError); ok {
return exc.BadRequest("验证器错误")
}
var errs validator.ValidationErrors
ok := errors.As(err, &errs)
if !ok {
return exc.BadRequest(err)
}
return exc.UnprocessableEntity(errs, errs[0].Translate(valid.GetTrans()), valid.Translate(errs))
}
realToken := c.GetString("csrfToken")
if realToken == "" {
return nil
}
csrfField := reflect.Indirect(reflect.ValueOf(req)).FieldByName("CsrfToken")
if !csrfField.IsValid() {
return exc.BadRequest("CSRF 校验失败")
}
csrfToken, ok := csrfField.Interface().(string)
if !ok {
return exc.BadRequest("CSRF 校验失败")
}
if subtle.ConstantTimeCompare([]byte(realToken), []byte(csrfToken)) == 0 {
return exc.NotAcceptable("CSRF 校验失败")
}
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/falling-ts/gower.git
git@gitee.com:falling-ts/gower.git
falling-ts
gower
gower
v0.9.2

搜索帮助