forked from jcce-pcm/pcm-openstack
189 lines
5.2 KiB
Go
189 lines
5.2 KiB
Go
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/tls"
|
|
"fmt"
|
|
"gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config"
|
|
"io"
|
|
"k8s.io/apimachinery/pkg/util/json"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
var FileName string
|
|
var C config.Config
|
|
|
|
//var (
|
|
// token, expiredAt = GenerateToken()
|
|
//)
|
|
|
|
var (
|
|
token string
|
|
expiredAt time.Time
|
|
// Platform string
|
|
)
|
|
|
|
/*func GenerateToken() (string, string, time.Time) {
|
|
a := Auth{}
|
|
var (
|
|
TokenUrl string
|
|
)
|
|
switch Platform {
|
|
case C.OpenstackConfig.ZhiJiang.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.ZhiJiang.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.ZhiJiang.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.ZhiJiang.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.ZhiJiang.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.ZhiJiang.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.ZhiJiang.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.ZhiJiang.TokenUrl
|
|
case C.OpenstackConfig.Nudt.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.Nudt.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Nudt.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Nudt.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.Nudt.TokenUrl
|
|
default:
|
|
//return nil, fmt.Errorf("platform %s not supported", Platform)
|
|
}
|
|
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)
|
|
json.Unmarshal(result, &t)
|
|
|
|
return Platform, respUrl.Header.Get(C.OpenstackConfig.TokenHeader), t.Token.ExpiresAt
|
|
}*/
|
|
|
|
func SignClient(r *http.Request, Platform string) (*http.Client, error) {
|
|
a := Auth{}
|
|
var (
|
|
TokenUrl string
|
|
)
|
|
switch Platform {
|
|
case C.OpenstackConfig.ZhiJiang.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.ZhiJiang.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.ZhiJiang.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.ZhiJiang.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.ZhiJiang.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.ZhiJiang.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.ZhiJiang.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.ZhiJiang.TokenUrl
|
|
case C.OpenstackConfig.Nudt.Platform:
|
|
a.Auth.Scope.Project.Name = C.OpenstackConfig.Nudt.USER
|
|
a.Auth.Scope.Project.Domain.Id = C.OpenstackConfig.Nudt.Id
|
|
a.Auth.Identity.Methods = append(a.Auth.Identity.Methods, C.OpenstackConfig.Nudt.AuthMethod)
|
|
a.Auth.Identity.Password.User.Name = C.OpenstackConfig.Nudt.USER
|
|
a.Auth.Identity.Password.User.Password = C.OpenstackConfig.Nudt.PASSWORD
|
|
a.Auth.Identity.Password.User.Domain.Name = C.OpenstackConfig.Nudt.DOMAIN
|
|
TokenUrl = C.OpenstackConfig.Nudt.TokenUrl
|
|
default:
|
|
return nil, fmt.Errorf("platform %s not supported", Platform)
|
|
}
|
|
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)
|
|
json.Unmarshal(result, &t)
|
|
|
|
//设置client信任所有证书
|
|
tr := &http.Transport{
|
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
|
}
|
|
client := &http.Client{
|
|
Transport: tr,
|
|
}
|
|
return client, nil
|
|
|
|
//return Platform, respUrl.Header.Get(C.OpenstackConfig.TokenHeader), t.Token.ExpiresAt
|
|
}
|
|
|
|
/*func GetToken() string {
|
|
if time.Now().After(expiredAt) {
|
|
Platform, token, expiredAt = GenerateToken()
|
|
}
|
|
return token
|
|
}*/
|
|
|
|
func SendRequest(method, url string, in io.Reader, Platform string) (*[]byte, error) {
|
|
r, err := http.NewRequest(method, url, in)
|
|
if err != nil {
|
|
fmt.Println("Error creating new request:", err)
|
|
return nil, err
|
|
}
|
|
signedR, err := SignClient(r, Platform)
|
|
if err != nil {
|
|
fmt.Println("Error signing request:", err)
|
|
return nil, err
|
|
}
|
|
|
|
res, err := signedR.Do(r)
|
|
if err != nil {
|
|
fmt.Println("Error sending request:", err)
|
|
return nil, err
|
|
}
|
|
defer res.Body.Close()
|
|
|
|
body, err := io.ReadAll(res.Body)
|
|
if err != nil {
|
|
fmt.Println("Error reading response body:", err)
|
|
return nil, err
|
|
}
|
|
return &body, nil
|
|
}
|
|
|
|
func GetOpenstackConfWithPlatform(platform string) (*config.Conf, error) {
|
|
var conf config.Conf
|
|
switch platform {
|
|
case C.OpenstackConfig.Nudt.Platform:
|
|
conf = C.OpenstackConfig.Nudt
|
|
case C.OpenstackConfig.ZhiJiang.Platform:
|
|
conf = C.OpenstackConfig.ZhiJiang
|
|
default:
|
|
return nil, fmt.Errorf("platform not supported")
|
|
}
|
|
return &conf, nil
|
|
}
|