pcm-octopus/internal/common/tokenService.go

104 lines
2.4 KiB
Go

package common
import (
"bytes"
"encoding/json"
"gitlink.org.cn/JointCloud/pcm-octopus/internal/config"
"gitlink.org.cn/jcce-pcm/utils/tool"
"log"
"time"
)
const (
Hanwuji = "hanwuji"
Suiyuan = "suiyuan"
Sailingsi = "sailingsi"
)
type TokenTimePair struct {
Token string
ExpiredAt time.Time
}
var (
tokenMap = generateTokenMap()
OctopusUrls = getOctopusUrls()
)
func generateTokenMap() map[string]TokenTimePair {
var tokenMap = make(map[string]TokenTimePair)
octopusConfig := config.Cfg
login := Login{
Username: octopusConfig.OctopusConfig.Username,
Password: octopusConfig.OctopusConfig.Password,
}
jsonStr, _ := json.Marshal(login)
urlMap := map[string]string{
Hanwuji: octopusConfig.OctopusConfig.HanwujiUrl + octopusConfig.OctopusConfig.OctopusTokenUrl,
Suiyuan: octopusConfig.OctopusConfig.SuiyuanUrl + octopusConfig.OctopusConfig.OctopusTokenUrl,
Sailingsi: octopusConfig.OctopusConfig.SailingsiUrl + octopusConfig.OctopusConfig.OctopusTokenUrl,
}
for k, v := range urlMap {
token, expiredAt := generateToken(jsonStr, v)
if token == "" {
continue
}
tokenTimePair := TokenTimePair{
Token: token,
ExpiredAt: expiredAt,
}
tokenMap[k] = tokenTimePair
}
return tokenMap
}
func generateToken(jsonStr []byte, tokenUrl string) (string, time.Time) {
body, err := OctopusHttpClient(tool.POST, tokenUrl, bytes.NewBuffer(jsonStr), "")
var tokenResp TokenResp
err = json.Unmarshal(body, &tokenResp)
if err != nil {
log.Println("token json转换失败 : ", err)
return "", time.Time{}
}
var d time.Duration
d = time.Second * time.Duration(tokenResp.Payload.Expiration)
return tokenResp.Payload.Token, time.Now().Add(d)
}
func GetToken(kForToken string) string {
if tokenMap[kForToken].Token == "" {
tokenMap = generateTokenMap()
}
if tokenMap[kForToken].Token == "" {
return ""
}
tokenTimePair := tokenMap[kForToken]
if time.Now().After(tokenTimePair.ExpiredAt) {
tokenMap = generateTokenMap()
if tokenMap[kForToken].Token == "" {
return ""
} else {
return tokenMap[kForToken].Token
}
}
return tokenTimePair.Token
}
func getOctopusUrls() map[string]string {
octopusConfig := config.Cfg
urlMap := map[string]string{
Hanwuji: octopusConfig.OctopusConfig.HanwujiUrl,
Suiyuan: octopusConfig.OctopusConfig.SuiyuanUrl,
Sailingsi: octopusConfig.OctopusConfig.SailingsiUrl,
}
return urlMap
}