Files
2026-05-20 16:13:58 +08:00

77 lines
1.7 KiB
Go

package inner
import (
"bytes"
"fmt"
"io"
"net/http"
"stat/common/crypt"
"stat/common/stdLog"
"github.com/gin-gonic/gin"
)
type cWriter struct {
gin.ResponseWriter
body *bytes.Buffer
}
func (w *cWriter) Write(b []byte) (int, error) {
return w.body.Write(b)
}
func (w *cWriter) WriteString(s string) (int, error) {
return w.body.WriteString(s)
}
func Crypt(key string) gin.HandlerFunc {
return func(c *gin.Context) {
// decrypt
raw, err := c.GetRawData()
if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
"code": stdLog.Failure,
"msg": fmt.Sprintf("读取Body数据出错: %s", err.Error()),
})
return
}
de, err := crypt.CoreAesDecryptEx(raw, 12, key)
if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
"code": stdLog.Failure,
"msg": fmt.Sprintf("解密Body数据出错: %s", err.Error()),
})
return
}
c.Request.Body = io.NopCloser(bytes.NewBuffer(de))
c.Request.ContentLength = int64(len(de))
c.Request.Header.Set("Content-Type", "application/json")
oWriter := c.Writer
blw := &cWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
c.Writer = blw
c.Next()
// encrypt
c.Writer = oWriter
en, err := crypt.CoreAesEncryptEx(blw.body.Bytes(), 12, key)
if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
"code": stdLog.Failure,
"msg": fmt.Sprintf("加密Body数据出错: %s", err.Error()),
})
return
}
_, err = c.Writer.Write(en)
if err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{
"code": stdLog.Failure,
"msg": fmt.Sprintf("写入Body数据出错: %s", err.Error()),
})
return
}
}
}