mirror of
https://github.com/gmsec/gmsec.git
synced 2025-10-06 08:16:51 +08:00
94 lines
2.0 KiB
Go
94 lines
2.0 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) {
|
|
cache := mycache.NewCache("oauth2")
|
|
if tp, ok := cache.Value(token); ok {
|
|
value = tp.(*UserInfo)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func strToInt(src string) int {
|
|
i, _ := strconv.Atoi(src)
|
|
return i
|
|
}
|