@@ -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)))
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
package requestEncrypt
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAMD+4d71tbi9jlB1
|
||||
kfEtibr3M/phrmzIHtVPoiLlcOmhX1Z29WsHpZDEA/B48p09ksQ3EQrVJfo3Xe1J
|
||||
V8KM0UiI8RcoA/nQUdJBnFNCt2xH1LXKYFYH0hIl5nhewUsnr8tdCV0aHzPO1Q3d
|
||||
SF1mQ6YrJvTVWuz5BBz3NisU14kNAgMBAAECgYBAIHDMtLf8+n8fHPGxQYBSL3GF
|
||||
8I8UdipIln05OyOZfZVAFabWOWQ6BeeJL6btuFfb+rAe+VP1IBCFl6kha8jdzQjr
|
||||
48mujwFKSwtFUHJukTbG/pgQWjnblSPcK9XStu5caiwGG9ehBdPgKurMvr/5w0NL
|
||||
VtYr22fVlfpUjHTDwQJBAO71ziG1Goz2dy1lZvb6m1MHx2vsBbWnoFzGL6LQ+Mis
|
||||
FB6/DkFS5ayyGkubqC9HLCzvUzl/uO/F9F9J704WIDsCQQDOwf+0m8a1WGzNnN4N
|
||||
ApyfV3ZMyMgcoFAgyS4HJ3ODrkfKIp3BUAKMWo7DZDNQy0h8RuIx8J1aFMP8vmb1
|
||||
e29XAkBOE2gvYUH0js7vuTMEPWuknGUPIQXYjZV62pJT611uC7NjPF+G/nPmkia/
|
||||
T3OLRwDrCaMypUWiqhYnUDvtUpNjAkAoTLvwkiRrGG8srJTDaGzqyftu//uxSLYV
|
||||
jeEA1/m2AvRPO+wPz+6PON92ykMOTnE0eASCw2mIM1/4FYyv8H1FAkAWhNRdcXbB
|
||||
yuvFbO7xSsstrTlyq6AqHXfCwT+NYRsa7eAQucOMQUY+6zKXsZ2WzvoiN+y7MbqJ
|
||||
VheW/ortGjBA
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,15 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIICWwIBAAKBgQDA/uHe9bW4vY5QdZHxLYm69zP6Ya5syB7VT6Ii5XDpoV9WdvVr
|
||||
B6WQxAPwePKdPZLENxEK1SX6N13tSVfCjNFIiPEXKAP50FHSQZxTQrdsR9S1ymBW
|
||||
B9ISJeZ4XsFLJ6/LXQldGh8zztUN3UhdZkOmKyb01Vrs+QQc9zYrFNeJDQIDAQAB
|
||||
AoGAQCBwzLS3/Pp/HxzxsUGAUi9xhfCPFHYqSJZ9OTsjmX2VQBWm1jlkOgXniS+m
|
||||
7bhX2/qwHvlT9SAQhZepIWvI3c0I6+PJro8BSksLRVBybpE2xv6YEFo525Uj3CvV
|
||||
0rbuXGosBhvXoQXT4CrqzL6/+cNDS1bWK9tn1ZX6VIx0w8ECQQDu9c4htRqM9nct
|
||||
ZWb2+ptTB8dr7AW1p6Bcxi+i0PjIrBQevw5BUuWsshpLm6gvRyws71M5f7jvxfRf
|
||||
Se9OFiA7AkEAzsH/tJvGtVhszZzeDQKcn1d2TMjIHKBQIMkuBydzg65HyiKdwVAC
|
||||
jFqOw2QzUMtIfEbiMfCdWhTD/L5m9XtvVwJAThNoL2FB9I7O77kzBD1rpJxlDyEF
|
||||
2I2VetqSU+tdbguzYzxfhv5z5pImv09zi0cA6wmjMqVFoqoWJ1A77VKTYwJAKEy7
|
||||
8JIkaxhvLKyUw2hs6sn7bv/7sUi2FY3hANf5tgL0TzvsD8/ujzjfdspDDk5xNHgE
|
||||
gsNpiDNf+BWMr/B9RQJAFoTUXXF2wcrrxWzu8UrLLa05cqugKh13wsE/jWEbGu3g
|
||||
ELnDjEFGPusyl7Gdls76IjfsuzG6iVYXlv6K7RowQA==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -0,0 +1,6 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA/uHe9bW4vY5QdZHxLYm69zP6
|
||||
Ya5syB7VT6Ii5XDpoV9WdvVrB6WQxAPwePKdPZLENxEK1SX6N13tSVfCjNFIiPEX
|
||||
KAP50FHSQZxTQrdsR9S1ymBWB9ISJeZ4XsFLJ6/LXQldGh8zztUN3UhdZkOmKyb0
|
||||
1Vrs+QQc9zYrFNeJDQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
Reference in New Issue
Block a user