@@ -0,0 +1,101 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user