pcm-openstack/internal/common/tokenService.go

111 lines
4.1 KiB
Go

package common
import (
"bytes"
"fmt"
"gitlink.org.cn/JointCloud/pcm-openstack/internal/config"
"io"
"k8s.io/apimachinery/pkg/util/json"
"log"
"net/http"
"time"
)
var FileName string
var C config.Config
var (
token string
expiredAt time.Time
platform string
)
func GetOpenstackConfWithPlatform(platform string) (*config.Conf, error) {
var conf config.Conf
switch platform {
case C.OpenstackConfig.Nudt_Openstack_T.Platform:
conf = C.OpenstackConfig.Nudt_Openstack_T
case C.OpenstackConfig.ZhiJiang_Openstack_T.Platform:
conf = C.OpenstackConfig.ZhiJiang_Openstack_T
case C.OpenstackConfig.Keylin_Openstack_T.Platform:
conf = C.OpenstackConfig.Keylin_Openstack_T
case C.OpenstackConfig.DianKe_Openstack_R.Platform:
conf = C.OpenstackConfig.DianKe_Openstack_R
default:
return nil, fmt.Errorf("platform not supported")
}
return &conf, nil
}
func GetToken(Platform string) (token string) {
a := Auth{}
var (
TokenUrl string
)
switch Platform {
case C.OpenstackConfig.ZhiJiang_Openstack_T.Platform:
a.Auth.Scope.Project.Name = C.OpenstackConfig.ZhiJiang_Openstack_T.USER
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.ZhiJiang_Openstack_T.Id
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.ZhiJiang_Openstack_T.AuthMethod)
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.ZhiJiang_Openstack_T.USER
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.ZhiJiang_Openstack_T.PASSWORD
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.ZhiJiang_Openstack_T.DOMAIN
TokenUrl = C.OpenstackConfig.ZhiJiang_Openstack_T.TokenUrl
case C.OpenstackConfig.Nudt_Openstack_T.Platform:
a.Auth.Scope.Project.Name = C.OpenstackConfig.Nudt_Openstack_T.USER
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Nudt_Openstack_T.Id
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Nudt_Openstack_T.AuthMethod)
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt_Openstack_T.USER
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt_Openstack_T.PASSWORD
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt_Openstack_T.DOMAIN
TokenUrl = C.OpenstackConfig.Nudt_Openstack_T.TokenUrl
case C.OpenstackConfig.Keylin_Openstack_T.Platform:
a.Auth.Scope.Project.Name = C.OpenstackConfig.Keylin_Openstack_T.USER
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Keylin_Openstack_T.Id
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Keylin_Openstack_T.AuthMethod)
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Keylin_Openstack_T.USER
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Keylin_Openstack_T.PASSWORD
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Keylin_Openstack_T.DOMAIN
TokenUrl = C.OpenstackConfig.Keylin_Openstack_T.TokenUrl
case C.OpenstackConfig.DianKe_Openstack_R.Platform:
a.Auth.Scope.Project.Name = C.OpenstackConfig.DianKe_Openstack_R.USER
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.DianKe_Openstack_R.Id
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.DianKe_Openstack_R.AuthMethod)
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.DianKe_Openstack_R.USER
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.DianKe_Openstack_R.PASSWORD
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.DianKe_Openstack_R.DOMAIN
TokenUrl = C.OpenstackConfig.DianKe_Openstack_R.TokenUrl
default:
}
jsonStr, _ := json.Marshal(a)
req_url, err := http.NewRequest("POST", TokenUrl, bytes.NewBuffer(jsonStr))
if err != nil {
log.Fatal(err)
}
c := http.Client{Timeout: time.Duration(3) * time.Second}
respUrl, err := c.Do(req_url)
if err != nil {
log.Fatal(err)
}
if respUrl.StatusCode != C.OpenstackConfig.Status_created {
panic("获取token失败")
}
defer respUrl.Body.Close()
var t Token
result, _ := io.ReadAll(respUrl.Body)
respUrl.Header.Get(C.OpenstackConfig.TokenHeader)
fmt.Println("Token###########:", respUrl.Header.Get(C.OpenstackConfig.TokenHeader))
json.Unmarshal(result, &t)
return respUrl.Header.Get(C.OpenstackConfig.TokenHeader)
}