forked from JointCloud/pcm-octopus
104 lines
2.4 KiB
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
|
|
}
|