mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-07 21:19:51 +00:00
79 lines
2.2 KiB
Go
79 lines
2.2 KiB
Go
package unicloud
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
func (c *Client) ensureServerlessJwtTokenExists() error {
|
|
c.serverlessJwtTokenMtx.Lock()
|
|
defer c.serverlessJwtTokenMtx.Unlock()
|
|
if c.serverlessJwtToken != "" && c.serverlessJwtTokenExp.After(time.Now()) {
|
|
return nil
|
|
}
|
|
|
|
params := &loginParams{
|
|
Password: c.password,
|
|
}
|
|
if regexp.MustCompile("^1\\d{10}$").MatchString(c.username) {
|
|
params.Mobile = c.username
|
|
} else if regexp.MustCompile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$").MatchString(c.username) {
|
|
params.Email = c.username
|
|
} else {
|
|
params.Username = c.username
|
|
}
|
|
|
|
resp := &loginResponse{}
|
|
if err := c.invokeServerlessWithResult(
|
|
uniIdentityEndpoint, uniIdentityClientSecret, uniIdentityAppId, uniIdentitySpaceId,
|
|
"uni-id-co", "login", "", params, nil,
|
|
resp); err != nil {
|
|
return err
|
|
} else if resp.Data == nil || resp.Data.NewToken == nil || resp.Data.NewToken.Token == "" {
|
|
return fmt.Errorf("unicloud api error: received empty token")
|
|
}
|
|
|
|
c.serverlessJwtToken = resp.Data.NewToken.Token
|
|
c.serverlessJwtTokenExp = time.UnixMilli(resp.Data.NewToken.TokenExpired)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Client) ensureApiUserTokenExists() error {
|
|
if err := c.ensureServerlessJwtTokenExists(); err != nil {
|
|
return err
|
|
}
|
|
|
|
c.apiUserTokenMtx.Lock()
|
|
defer c.apiUserTokenMtx.Unlock()
|
|
if c.apiUserToken != "" {
|
|
return nil
|
|
}
|
|
|
|
resp := &getUserTokenResponse{}
|
|
if err := c.invokeServerlessWithResult(
|
|
uniConsoleEndpoint, uniConsoleClientSecret, uniConsoleAppId, uniConsoleSpaceId,
|
|
"uni-cloud-kernel", "", "user/getUserToken", nil, map[string]any{"isLogin": true},
|
|
resp); err != nil {
|
|
return err
|
|
} else if resp.Data == nil || resp.Data.Data == nil || resp.Data.Data.Data == nil || resp.Data.Data.Data.Token == "" {
|
|
return fmt.Errorf("unicloud api error: received empty user token")
|
|
}
|
|
|
|
c.apiUserToken = resp.Data.Data.Data.Token
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Client) CreateDomainWithCert(req *CreateDomainWithCertRequest) (*CreateDomainWithCertResponse, error) {
|
|
if err := c.ensureApiUserTokenExists(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp := &CreateDomainWithCertResponse{}
|
|
err := c.sendRequestWithResult(http.MethodPost, "/host/create-domain-with-cert", req, resp)
|
|
return resp, err
|
|
}
|