Files
huangguo_server/middleware/ua/ua.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

102 lines
2.2 KiB
Go

package ua
import (
"net/url"
"strings"
"91porn-server/common/constant"
"91porn-server/common/log"
"github.com/gin-gonic/gin"
)
type UA struct {
UserAgent string
DevID string //设备id 唯一标识
DevType string //设备类型 华为nova7
SysType string //pc
Ver string //1.0
BuildID string //
Mac string //
GlobalDevID string //全局唯一表示
Terminal string //终端 0-客户端;1-h5(ios)端;2-web端
IsH5 string
SystemVersion string
SystemName string
DeviceBrand string
DeviceModel string
SID string
}
func UAer(c *gin.Context) {
userAgent := c.GetHeader("X-User-Agent") //兼容H5 UserAgent
if userAgent == "" {
userAgent = c.Request.UserAgent()
}
if userAgent == "" {
log.Warn("user-agent empty")
return
}
ua := Parse(userAgent)
if sid := strings.TrimSpace(c.GetHeader("sid")); sid != "" {
ua.SID = sid
}
c.Set(constant.CtxUA, ua)
}
func Parse(userAgent string) UA {
var uastr string
ua := UA{}
decodeUa, err := url.QueryUnescape(userAgent)
if err != nil {
log.Warn("URLDecode user-agent error", log.Any("ua", userAgent))
uastr = userAgent
} else {
uastr = decodeUa
}
uas := strings.Split(uastr, ";")
for _, v := range uas {
vss := strings.SplitN(strings.TrimSpace(v), "=", 2)
if len(vss) < 2 {
log.Warn("user-agent miss", log.Any("ua", userAgent))
continue
}
key := strings.TrimSpace(vss[0])
value := strings.TrimSpace(vss[1])
switch key {
case "DevID":
ua.DevID = value
case "DevType":
ua.DevType = value
case "SysType":
ua.SysType = value
case "Ver":
ua.Ver = value
case "BuildID":
ua.BuildID = value
case "Mac":
ua.Mac = value
case "GlobalDevID":
ua.GlobalDevID = value
case "Terminal":
ua.Terminal = value
case "IsH5":
ua.IsH5 = value
case "SystemVersion":
ua.SystemVersion = value
case "SystemName":
ua.SystemName = value
case "DeviceBrand":
ua.DeviceBrand = value
case "DeviceModel", "device_model":
ua.DeviceModel = value
case "SID", "Sid", "sid":
ua.SID = value
default:
log.Warn("user-agent unknown", log.Any("key", key), log.Any("ua", userAgent))
}
}
ua.UserAgent = uastr
return ua
}