diff --git a/internal/common/tokenService.go b/internal/common/tokenService.go index 1ff72cc..9b99dee 100644 --- a/internal/common/tokenService.go +++ b/internal/common/tokenService.go @@ -2,6 +2,7 @@ package common import ( "bytes" + "crypto/tls" "fmt" "gitlink.org.cn/jcce-pcm/pcm-participant-openstack/internal/config" "io" @@ -21,10 +22,10 @@ var C config.Config var ( token string expiredAt time.Time - Platform string + // Platform string ) -func GenerateToken() (string, string, time.Time) { +/*func GenerateToken() (string, string, time.Time) { a := Auth{} var ( TokenUrl string @@ -45,7 +46,7 @@ func GenerateToken() (string, string, time.Time) { 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.ZhiJiang.TokenUrl + TokenUrl = C.OpenstackConfig.Nudt.TokenUrl default: //return nil, fmt.Errorf("platform %s not supported", Platform) } @@ -75,13 +76,102 @@ func GenerateToken() (string, string, time.Time) { 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 { +/*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) {