Files
lone-services/pkg/utils/loginInfo.go
T

123 lines
3.3 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
SaleMobile string // 销售手机
SaleProvince int64 // 销售省份
GroupId int64 // 分组ID
GroupName string // 分组名称
Type uint8 // 用户类型
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")
groupName := md.Get("x-group-name")
Type := md.Get("x-user-type")
province := md.Get("x-sale-province")
mobile := md.Get("x-sale-mobile")
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(groupName) > NumberZero {
userInfo.GroupName = groupName[NumberZero]
}
if len(Type) > NumberZero {
TypeInt, _ := strconv.ParseInt(Type[NumberZero], NumberTen, NumberSixtyFourth)
userInfo.Type = uint8(TypeInt)
}
if len(storeId) > NumberZero {
userInfo.StoreId, _ = strconv.ParseInt(storeId[NumberZero], NumberTen, NumberSixtyFourth)
}
if len(saleName) > NumberZero {
userInfo.SaleName = saleName[NumberZero]
}
if len(province) > NumberZero {
userInfo.SaleProvince, _ = strconv.ParseInt(province[NumberZero], NumberTen, NumberSixtyFourth)
}
if len(mobile) > NumberZero {
userInfo.SaleMobile = mobile[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
}