Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
package requestEncrypt
import (
"bytes"
_ "embed"
"encoding/base64"
"encoding/json"
"fmt"
"io"
"net/url"
"strings"
"91porn-server/common/constant"
"91porn-server/common/crypt"
"91porn-server/common/log"
"91porn-server/middleware/ua"
"github.com/gin-gonic/gin"
)
var (
// 白名单,不需要验证token的api
// 在新的Auth中间件逻辑下,配置了白名单后,用户未登录,context中的uid会被设为0;否则,会绑定用户真实uid。
// 需要白名单中API的handler自己对用户登录状态进行判断。
whitelist = map[string]bool{
"/swagger": true,
"/api/app/vid/m3u8": true, //前端测试 下载m3u8 添加到白名单 ,生产环境中需要从白名单中剔除
}
)
//go:embed public.pem
var PubKey []byte
type Req struct {
Data string `json:"data" form:"data"`
Sign string `json:"sign" form:"sign"`
}
// ReqDecode 解密
func ReqDecode(ctx *gin.Context) {
var err error
val, exists := ctx.Get(constant.CtxUA)
if !exists {
return
}
for url, ok := range whitelist {
if ok && (strings.HasPrefix(ctx.Request.URL.Path, url) || strings.HasPrefix(ctx.FullPath(), url)) {
return
}
}
u, ok := val.(ua.UA)
if !ok {
return
}
if u.Terminal != constant.TerminalH5 && u.Terminal != constant.TerminalWeb { //h5 和纯web都加密
return
}
var data Req
if err = ctx.ShouldBind(&data); err != nil {
return
}
if data.Data == "" {
return
}
dataBaseBytes, _ := base64.StdEncoding.DecodeString(data.Data)
dataBytes, err := crypt.AesDecrypt(string(dataBaseBytes), "BxJand%xf5h3sycH")
if err != nil {
log.Warn("ReqDecode is error", log.Any("data", data.Data), log.Any("ua", u))
}
if ctx.Request.Method == "GET" {
m := make(map[string]interface{})
dec := json.NewDecoder(strings.NewReader(dataBytes))
dec.UseNumber() // 保留数字原始表示,避免 float64 精度丢失/科学计数法
_ = dec.Decode(&m)
values := url.Values{}
for k, v := range m {
// 解密后的 JSON 值可能是数字、布尔等非字符串类型,不能直接断言为 string,否则会 panic
switch val := v.(type) {
case string:
values.Add(k, val)
case nil:
values.Add(k, "")
default:
values.Add(k, fmt.Sprintf("%v", val))
}
}
ctx.Request.URL.RawQuery = values.Encode()
ctx.Request.Form = values
return
}
ctx.Request.Body = io.NopCloser(bytes.NewBuffer([]byte(dataBytes)))
}