102 lines
2.2 KiB
Go
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
|
|
}
|