Files
gmsec/example/internal/api/user.go
2021-05-23 16:36:10 +08:00

95 lines
2.1 KiB
Go

package api
import (
"encoding/json"
"example/internal/config"
"strconv"
"time"
"github.com/xxjwxc/public/dev"
"github.com/xxjwxc/public/message"
"github.com/xxjwxc/public/mycache"
"github.com/xxjwxc/public/myhttp"
)
// UserInfo 用户信息
type UserInfo struct {
AccessToken string // token
UserName string // 用户名
ExpireTime int // 超时时间
}
// MapMessageBody req message body
type MapMessageBody struct {
message.MessageBody
Data map[string]string `json:"data,omitempty"`
}
// GetUserFromToken 通过token获取用户信息
func GetUserFromToken(token string) (userInfo *UserInfo, b bool) {
if len(token) == 0 {
if dev.IsDev() {
return &UserInfo{
UserName: "admin",
}, true
}
return
}
// 先从缓存中获取
if tmp, ok := GetCacheBody(token); ok {
return &UserInfo{
AccessToken: token,
UserName: tmp.UserName,
ExpireTime: tmp.ExpireTime}, true
}
parm := make(map[string]string)
parm["token"] = token
bod, _ := json.Marshal(parm)
rBody, _ := myhttp.OnPostJSON(config.GetCheckTokenURL(), string(bod))
if len(rBody) > 0 {
var msg MapMessageBody
json.Unmarshal([]byte(rBody), &msg)
if msg.State {
SaveCacheBody(token, msg.Data["username"], msg.Data["expire_time"]) // 保存缓存
return &UserInfo{
AccessToken: token,
UserName: msg.Data["username"],
ExpireTime: strToInt(msg.Data["expire_time"])}, true // 返回结果
}
}
return
}
// SaveCacheBody 保存缓存
func SaveCacheBody(accessToken, username, expireTime string) {
tmp := UserInfo{
AccessToken: accessToken,
UserName: username,
ExpireTime: strToInt(expireTime),
}
// 保存缓存
cache := mycache.NewCache("oauth2")
cache.Add(accessToken, &tmp, time.Duration(tmp.ExpireTime)*time.Second)
//------------------end
}
// GetCacheBody 获取缓存
func GetCacheBody(token string) (value *UserInfo, b bool) {
value = new(UserInfo)
cache := mycache.NewCache("oauth2")
err := cache.Value(token, &value)
if err != nil {
return nil, false
}
return value, true
}
func strToInt(src string) int {
i, _ := strconv.Atoi(src)
return i
}