100 lines
2.5 KiB
Go
100 lines
2.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"context"
|
|
"net/url"
|
|
"strconv"
|
|
|
|
"github.com/mssola/user_agent"
|
|
"google.golang.org/grpc/metadata"
|
|
)
|
|
|
|
type UserInfo struct {
|
|
ID int64
|
|
Name string
|
|
RawUID string
|
|
Refresh string
|
|
ClientIP string // 客户端ip
|
|
UserAgent string // 完整原始ua
|
|
BrowserName string // 浏览器名称
|
|
BrowserVer string // 浏览器版本
|
|
StoreName string // 店铺名称
|
|
StoreId int64 // 店铺id
|
|
SaleName string // 销售名称
|
|
SaleId int64 // 销售id
|
|
GroupId int64 // 分组ID
|
|
Valid bool
|
|
}
|
|
|
|
func GetUserFromCtx(ctx context.Context) UserInfo {
|
|
md, ok := metadata.FromIncomingContext(ctx)
|
|
if !ok {
|
|
return UserInfo{Valid: false}
|
|
}
|
|
uidList := md.Get("x-user-id")
|
|
nameList := md.Get("x-user-name")
|
|
refreshList := md.Get("x-refresh")
|
|
ipList := md.Get("x-client-ip")
|
|
userAgentList := md.Get("x-user-agent")
|
|
|
|
storeName := md.Get("x-store-name")
|
|
storeId := md.Get("x-store-id")
|
|
saleName := md.Get("x-sale-name")
|
|
saleId := md.Get("x-sale-id")
|
|
groupId := md.Get("x-group-id")
|
|
|
|
if len(refreshList) == NumberZero {
|
|
refreshList = md.Get("X-Refresh")
|
|
}
|
|
var userInfo UserInfo
|
|
if len(uidList) > NumberZero {
|
|
userInfo.RawUID = uidList[NumberZero]
|
|
}
|
|
if len(nameList) > NumberZero {
|
|
userInfo.Name = nameList[NumberZero]
|
|
}
|
|
if len(storeName) > NumberZero {
|
|
userInfo.StoreName = storeName[NumberZero]
|
|
}
|
|
if len(storeId) > NumberZero {
|
|
userInfo.StoreId, _ = strconv.ParseInt(storeId[NumberZero], NumberTen, NumberSixtyFourth)
|
|
}
|
|
if len(saleName) > NumberZero {
|
|
userInfo.SaleName = saleName[NumberZero]
|
|
}
|
|
if len(saleId) > NumberZero {
|
|
userInfo.SaleId, _ = strconv.ParseInt(saleId[NumberZero], NumberTen, NumberSixtyFourth)
|
|
}
|
|
if len(groupId) > NumberZero {
|
|
userInfo.GroupId, _ = strconv.ParseInt(groupId[NumberZero], NumberTen, NumberSixtyFourth)
|
|
}
|
|
if len(refreshList) > NumberZero {
|
|
userInfo.Refresh = refreshList[NumberZero]
|
|
}
|
|
if len(ipList) > NumberZero {
|
|
userInfo.ClientIP = ipList[NumberZero]
|
|
}
|
|
if len(userAgentList) > NumberZero {
|
|
userInfo.UserAgent = userAgentList[NumberZero]
|
|
userInfo.UserAgent, _ = url.QueryUnescape(userInfo.UserAgent)
|
|
ua := user_agent.New(userInfo.UserAgent)
|
|
userInfo.BrowserName, userInfo.BrowserVer = ua.Browser()
|
|
}
|
|
userInfo.Valid = false
|
|
if userInfo.RawUID == StringEmpty {
|
|
return userInfo
|
|
}
|
|
|
|
uid, err := strconv.ParseInt(userInfo.RawUID, NumberTen, NumberSixtyFourth)
|
|
if err != nil {
|
|
return userInfo
|
|
}
|
|
|
|
userName, _ := url.QueryUnescape(userInfo.Name)
|
|
userInfo.ID = uid
|
|
userInfo.Name = userName
|
|
userInfo.Valid = true
|
|
|
|
return userInfo
|
|
}
|