diff --git a/README.md b/README.md index 5d11c865..10987477 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ make local.run | [Name.com](https://www.name.com/) | | | [NameSilo](https://www.namesilo.com/) | | | [IBM NS1 Connect](https://www.ibm.com/cn-zh/products/ns1-connect/) | | +| [移动云](https://ecloud.10086.cn/) | | | [雨云](https://www.rainyun.com/) | | | [西部数码](https://www.west.cn/) | | | [PowerDNS](https://www.powerdns.com/) | | diff --git a/README_EN.md b/README_EN.md index b8f2e2dc..bd58f8bb 100644 --- a/README_EN.md +++ b/README_EN.md @@ -103,6 +103,7 @@ The following DNS providers are supported: | [Name.com](https://www.name.com/) | | | [NameSilo](https://www.namesilo.com/) | | | [IBM NS1 Connect](https://www.ibm.com/products/ns1-connect/) | | +| [CMCC Cloud](https://ecloud.10086.cn/) | | | [Rain Yun](https://www.rainyun.com/) | | | [West.cn](https://www.west.cn/) | | | [PowerDNS](https://www.powerdns.com/) | | diff --git a/go.mod b/go.mod index 78549ec1..5694ec54 100644 --- a/go.mod +++ b/go.mod @@ -105,6 +105,8 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.1102 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1099 // indirect github.com/x448/float16 v0.8.4 // indirect + gitlab.ecloud.com/ecloud/ecloudsdkclouddns v1.0.1 // indirect + gitlab.ecloud.com/ecloud/ecloudsdkcore v1.0.0 // indirect go.mongodb.org/mongo-driver v1.17.2 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -211,3 +213,6 @@ require ( modernc.org/memory v1.8.2 // indirect modernc.org/sqlite v1.34.5 // indirect ) + +replace gitlab.ecloud.com/ecloud/ecloudsdkcore v1.0.0 => ./internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0 +replace gitlab.ecloud.com/ecloud/ecloudsdkclouddns v1.0.1 => ./internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1 diff --git a/internal/applicant/providers.go b/internal/applicant/providers.go index d1e80083..9989da8f 100644 --- a/internal/applicant/providers.go +++ b/internal/applicant/providers.go @@ -13,6 +13,7 @@ import ( pBaiduCloud "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/baiducloud" pCloudflare "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/cloudflare" pClouDNS "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/cloudns" + pCMCCCloud "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud" pGcore "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/gcore" pGname "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/gname" pGoDaddy "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/godaddy" @@ -151,6 +152,22 @@ func createApplicant(options *applicantOptions) (challenge.Provider, error) { return applicant, err } + case domain.ApplyDNSProviderTypeCMCCCloud: + { + access := domain.AccessConfigForCMCCCloud{} + if err := maps.Populate(options.ProviderAccessConfig, &access); err != nil { + return nil, fmt.Errorf("failed to populate provider access config: %w", err) + } + + applicant, err := pCMCCCloud.NewChallengeProvider(&pCMCCCloud.ChallengeProviderConfig{ + AccessKeyId: access.AccessKeyId, + AccessKeySecret: access.AccessKeySecret, + DnsPropagationTimeout: options.DnsPropagationTimeout, + DnsTTL: options.DnsTTL, + }) + return applicant, err + } + case domain.ApplyDNSProviderTypeGcore: { access := domain.AccessConfigForGcore{} diff --git a/internal/domain/access.go b/internal/domain/access.go index ddd00b1c..fd01af3b 100644 --- a/internal/domain/access.go +++ b/internal/domain/access.go @@ -86,6 +86,11 @@ type AccessConfigForClouDNS struct { AuthPassword string `json:"authPassword"` } +type AccessConfigForCMCCCloud struct { + AccessKeyId string `json:"accessKeyId"` + AccessKeySecret string `json:"accessKeySecret"` +} + type AccessConfigForDogeCloud struct { AccessKey string `json:"accessKey"` SecretKey string `json:"secretKey"` diff --git a/internal/domain/provider.go b/internal/domain/provider.go index 7402cadf..375176ce 100644 --- a/internal/domain/provider.go +++ b/internal/domain/provider.go @@ -23,7 +23,7 @@ const ( AccessProviderTypeCdnfly = AccessProviderType("cdnfly") AccessProviderTypeCloudflare = AccessProviderType("cloudflare") AccessProviderTypeClouDNS = AccessProviderType("cloudns") - AccessProviderTypeCMCCCloud = AccessProviderType("cmcccloud") // 移动云(预留) + AccessProviderTypeCMCCCloud = AccessProviderType("cmcccloud") AccessProviderTypeCTCCCloud = AccessProviderType("ctcccloud") // 联通云(预留) AccessProviderTypeCUCCCloud = AccessProviderType("cucccloud") // 天翼云(预留) AccessProviderTypeDogeCloud = AccessProviderType("dogecloud") @@ -74,6 +74,7 @@ const ( ApplyDNSProviderTypeBaiduCloudDNS = ApplyDNSProviderType("baiducloud-dns") ApplyDNSProviderTypeCloudflare = ApplyDNSProviderType("cloudflare") ApplyDNSProviderTypeClouDNS = ApplyDNSProviderType("cloudns") + ApplyDNSProviderTypeCMCCCloud = ApplyDNSProviderType("cmcccloud") ApplyDNSProviderTypeGcore = ApplyDNSProviderType("gcore") ApplyDNSProviderTypeGname = ApplyDNSProviderType("gname") ApplyDNSProviderTypeGoDaddy = ApplyDNSProviderType("godaddy") diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/cmcccloud.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/cmcccloud.go new file mode 100644 index 00000000..ba0721fd --- /dev/null +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/cmcccloud.go @@ -0,0 +1,40 @@ +package cmcccloud + +import ( + "errors" + "time" + + "github.com/go-acme/lego/v4/challenge" + + "github.com/usual2970/certimate/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal" +) + +type ChallengeProviderConfig struct { + AccessKeyId string `json:"accessKeyId"` + AccessKeySecret string `json:"accessKeySecret"` + DnsPropagationTimeout int32 `json:"dnsPropagationTimeout,omitempty"` + DnsTTL int32 `json:"dnsTTL,omitempty"` +} + +func NewChallengeProvider(config *ChallengeProviderConfig) (challenge.Provider, error) { + if config == nil { + return nil, errors.New("config is nil") + } + + providerConfig := internal.NewDefaultConfig() + providerConfig.AccessKey = config.AccessKeyId + providerConfig.SecretKey = config.AccessKeySecret + if config.DnsTTL != 0 { + providerConfig.TTL = config.DnsTTL + } + if config.DnsPropagationTimeout != 0 { + providerConfig.PropagationTimeout = time.Duration(config.DnsPropagationTimeout) * time.Second + } + + provider, err := internal.NewDNSProviderConfig(providerConfig) + if err != nil { + return nil, err + } + + return provider, nil +} diff --git a/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go b/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go new file mode 100644 index 00000000..92ef6dfe --- /dev/null +++ b/internal/pkg/core/applicant/acme-dns-01/lego-providers/cmcccloud/internal/lego.go @@ -0,0 +1,221 @@ +package internal + +import ( + "encoding/json" + "errors" + "fmt" + "strings" + "time" + + "github.com/go-acme/lego/v4/challenge" + "github.com/go-acme/lego/v4/challenge/dns01" + "github.com/go-acme/lego/v4/platform/config/env" + "gitlab.ecloud.com/ecloud/ecloudsdkclouddns" + "gitlab.ecloud.com/ecloud/ecloudsdkclouddns/model" + "gitlab.ecloud.com/ecloud/ecloudsdkcore/config" +) + +const ( + envNamespace = "CMCCCLOUD_" + + EnvAccessKey = envNamespace + "ACCESS_KEY" + EnvSecretKey = envNamespace + "SECRET_KEY" + EnvTTL = envNamespace + "TTL" + EnvPropagationTimeout = envNamespace + "PROPAGATION_TIMEOUT" + EnvPollingInterval = envNamespace + "POLLING_INTERVAL" + EnvReadTimeOut = envNamespace + "READ_TIMEOUT" + EnvConnectTimeout = envNamespace + "CONNECT_TIMEOUT" +) + +var _ challenge.ProviderTimeout = (*DNSProvider)(nil) + +type Config struct { + AccessKey string + SecretKey string + ReadTimeOut int + ConnectTimeout int + PropagationTimeout time.Duration + PollingInterval time.Duration + TTL int32 +} + +type DNSProvider struct { + client *ecloudsdkclouddns.Client + config *Config +} + +func NewDefaultConfig() *Config { + return &Config{ + ReadTimeOut: env.GetOrDefaultInt(EnvReadTimeOut, 30), + ConnectTimeout: env.GetOrDefaultInt(EnvConnectTimeout, 30), + TTL: int32(env.GetOrDefaultInt(EnvTTL, 600)), + PropagationTimeout: env.GetOrDefaultSecond(EnvPropagationTimeout, 2*time.Minute), + PollingInterval: env.GetOrDefaultSecond(EnvPollingInterval, dns01.DefaultPollingInterval), + } +} + +func NewDNSProvider() (*DNSProvider, error) { + values, err := env.Get(EnvAccessKey, EnvSecretKey) + if err != nil { + return nil, fmt.Errorf("cmccecloud: %w", err) + } + + cfg := NewDefaultConfig() + cfg.AccessKey = values[EnvAccessKey] + cfg.SecretKey = values[EnvSecretKey] + + return NewDNSProviderConfig(cfg) +} + +func NewDNSProviderConfig(cfg *Config) (*DNSProvider, error) { + if cfg == nil { + return nil, errors.New("cmccecloud: the configuration of the DNS provider is nil") + } + + client := ecloudsdkclouddns.NewClient(&config.Config{ + AccessKey: cfg.AccessKey, + SecretKey: cfg.SecretKey, + // 资源池常量见: https://ecloud.10086.cn/op-help-center/doc/article/54462 + // 默认全局 + PoolId: "CIDC-CORE-00", + ReadTimeOut: cfg.ReadTimeOut, + ConnectTimeout: cfg.ConnectTimeout, + }) + + return &DNSProvider{ + client: client, + config: cfg, + }, nil +} + +func (d *DNSProvider) Present(domain, token, keyAuth string) error { + info := dns01.GetChallengeInfo(domain, keyAuth) + + zoneName, err := dns01.FindZoneByFqdn(info.EffectiveFQDN) + if err != nil { + return fmt.Errorf("cmccecloud: %w", err) + } + + subDomain, err := dns01.ExtractSubDomain(info.EffectiveFQDN, zoneName) + if err != nil { + return fmt.Errorf("cmccecloud: %w", err) + } + + readDomain := strings.Trim(zoneName, ".") + record, err := d.getDomainRecord(readDomain, subDomain) + if err != nil { + return err + } + if record == nil { + // add new record + resp, err := d.client.CreateRecordOpenapi(&model.CreateRecordOpenapiRequest{ + CreateRecordOpenapiBody: &model.CreateRecordOpenapiBody{ + LineId: "0", // 默认线路 + Rr: subDomain, + DomainName: readDomain, + Description: "from certimate", + Type: model.CreateRecordOpenapiBodyTypeEnumTxt, + Value: info.Value, + Ttl: &d.config.TTL, + }, + }) + if err != nil { + return fmt.Errorf("lego: %w", err) + } + if resp.State != model.CreateRecordOpenapiResponseStateEnumOk { + return fmt.Errorf("lego: create record failed, response state: %s, message: %s, code: %s", resp.State, resp.ErrorMessage, resp.ErrorCode) + } + return nil + } else { + // update record + resp, err := d.client.ModifyRecordOpenapi(&model.ModifyRecordOpenapiRequest{ + ModifyRecordOpenapiBody: &model.ModifyRecordOpenapiBody{ + RecordId: record.RecordId, + Rr: subDomain, + DomainName: readDomain, + Description: "from certmate", + LineId: "0", + Type: model.ModifyRecordOpenapiBodyTypeEnumTxt, + Value: info.Value, + Ttl: &d.config.TTL, + }, + }) + if err != nil { + return fmt.Errorf("lego: %w", err) + } + if resp.State != model.ModifyRecordOpenapiResponseStateEnumOk { + return fmt.Errorf("lego: create record failed, response state: %s", resp.State) + } + return nil + } +} + +func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error { + challengeInfo := dns01.GetChallengeInfo(domain, keyAuth) + zoneName, err := dns01.FindZoneByFqdn(challengeInfo.FQDN) + if err != nil { + return fmt.Errorf("cmccecloud: %w", err) + } + subDomain, err := dns01.ExtractSubDomain(challengeInfo.FQDN, zoneName) + if err != nil { + return fmt.Errorf("cmccecloud: %w", err) + } + readDomain := strings.Trim(zoneName, ".") + record, err := d.getDomainRecord(readDomain, subDomain) + if err != nil { + return err + } + if record == nil { + return nil + } + resp, err := d.client.DeleteRecordOpenapi(&model.DeleteRecordOpenapiRequest{ + DeleteRecordOpenapiBody: &model.DeleteRecordOpenapiBody{ + RecordIdList: []string{record.RecordId}, + }, + }) + if err != nil { + return fmt.Errorf("lego: %w", err) + } + if resp.State != model.DeleteRecordOpenapiResponseStateEnumOk { + return fmt.Errorf("lego: delete record failed, response state: %s", resp.State) + } + return nil +} + +func (d *DNSProvider) Timeout() (timeout, interval time.Duration) { + return d.config.PropagationTimeout, d.config.PollingInterval +} + +func (d *DNSProvider) getDomainRecord(domain string, rr string) (*model.ListRecordOpenapiResponseData, error) { + pageSize := int32(50) + page := int32(1) + for { + resp, err := d.client.ListRecordOpenapi(&model.ListRecordOpenapiRequest{ + ListRecordOpenapiBody: &model.ListRecordOpenapiBody{ + DomainName: domain, + }, + ListRecordOpenapiQuery: &model.ListRecordOpenapiQuery{ + PageSize: &pageSize, + Page: &page, + }, + }) + if err != nil { + return nil, err + } + if resp.State != model.ListRecordOpenapiResponseStateEnumOk { + respStr, _ := json.Marshal(resp) + return nil, fmt.Errorf("request error. %s", string(respStr)) + } + if resp.Body.Data != nil { + for _, item := range *resp.Body.Data { + if item.Rr == rr { + return &item, nil + } + } + } + if resp.Body.TotalPages == nil || page >= *resp.Body.TotalPages { + return nil, nil + } + page++ + } +} diff --git a/internal/pkg/vendors/cmcc-sdk/README.md b/internal/pkg/vendors/cmcc-sdk/README.md new file mode 100644 index 00000000..c64eebe8 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/README.md @@ -0,0 +1,14 @@ +移动云 Go SDK 文档: [https://ecloud.10086.cn/op-help-center/doc/article/53799](https://ecloud.10086.cn/op-help-center/doc/article/53799) + +移动云 Go SDK 下载地址: [https://ecloud.10086.cn/api/query/developer/nexus/service/rest/repository/browse/go-sdk/gitlab.ecloud.com/ecloud/](https://ecloud.10086.cn/api/query/developer/nexus/service/rest/repository/browse/go-sdk/gitlab.ecloud.com/ecloud/) + +--- + +将其引入本地目录的原因是: + +1. 原始包必须通过移动云私有仓库获取, 为构建带来不便。 +2. 原始包存在部分内容错误, 需要自行修改, 如: + + - 存在一些编译错误; + - 返回错误的时候, 未返回错误信息; + - 解析响应体错误。 diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/client.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/client.go new file mode 100644 index 00000000..d2c2ccde --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/client.go @@ -0,0 +1,144 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package ecloudsdkclouddns + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkclouddns/model" + "gitlab.ecloud.com/ecloud/ecloudsdkcore" + "gitlab.ecloud.com/ecloud/ecloudsdkcore/config" +) + +type Client struct { + APIClient *ecloudsdkcore.APIClient + config *config.Config + httpRequest *ecloudsdkcore.HttpRequest +} + +func NewClient(config *config.Config) *Client { + client := &Client{} + client.config = config + apiClient := ecloudsdkcore.NewAPIClient() + httpRequest := ecloudsdkcore.NewDefaultHttpRequest() + httpRequest.Product = product + httpRequest.Version = version + httpRequest.SdkVersion = sdkVersion + client.httpRequest = httpRequest + client.APIClient = apiClient + return client +} + +func NewClientByCustomized(config *config.Config, httpRequest *ecloudsdkcore.HttpRequest) *Client { + client := &Client{} + client.config = config + apiClient := ecloudsdkcore.NewAPIClient() + httpRequest.Product = product + httpRequest.Version = version + httpRequest.SdkVersion = sdkVersion + client.httpRequest = httpRequest + client.APIClient = apiClient + return client +} + +const ( + product string = "clouddns" + version string = "v1" + sdkVersion string = "1.0.1" +) + +// CreateRecord 新增解析记录 +func (c *Client) CreateRecord(request *model.CreateRecordRequest) (*model.CreateRecordResponse, error) { + c.httpRequest.Action = "createRecord" + c.httpRequest.Body = request + returnValue := &model.CreateRecordResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// CreateRecordOpenapi 新增解析记录Openapi +func (c *Client) CreateRecordOpenapi(request *model.CreateRecordOpenapiRequest) (*model.CreateRecordOpenapiResponse, error) { + c.httpRequest.Action = "createRecordOpenapi" + c.httpRequest.Body = request + returnValue := &model.CreateRecordOpenapiResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// DeleteRecord 删除解析记录 +func (c *Client) DeleteRecord(request *model.DeleteRecordRequest) (*model.DeleteRecordResponse, error) { + c.httpRequest.Action = "deleteRecord" + c.httpRequest.Body = request + returnValue := &model.DeleteRecordResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// DeleteRecordOpenapi 删除解析记录Openapi +func (c *Client) DeleteRecordOpenapi(request *model.DeleteRecordOpenapiRequest) (*model.DeleteRecordOpenapiResponse, error) { + c.httpRequest.Action = "deleteRecordOpenapi" + c.httpRequest.Body = request + returnValue := &model.DeleteRecordOpenapiResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// ListRecord 查询解析记录 +func (c *Client) ListRecord(request *model.ListRecordRequest) (*model.ListRecordResponse, error) { + c.httpRequest.Action = "listRecord" + c.httpRequest.Body = request + returnValue := &model.ListRecordResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// ListRecordOpenapi 查询解析记录Openapi +func (c *Client) ListRecordOpenapi(request *model.ListRecordOpenapiRequest) (*model.ListRecordOpenapiResponse, error) { + c.httpRequest.Action = "listRecordOpenapi" + c.httpRequest.Body = request + returnValue := &model.ListRecordOpenapiResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// ModifyRecord 修改解析记录 +func (c *Client) ModifyRecord(request *model.ModifyRecordRequest) (*model.ModifyRecordResponse, error) { + c.httpRequest.Action = "modifyRecord" + c.httpRequest.Body = request + returnValue := &model.ModifyRecordResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} + +// ModifyRecordOpenapi 修改解析记录Openapi +func (c *Client) ModifyRecordOpenapi(request *model.ModifyRecordOpenapiRequest) (*model.ModifyRecordOpenapiResponse, error) { + c.httpRequest.Action = "modifyRecordOpenapi" + c.httpRequest.Body = request + returnValue := &model.ModifyRecordOpenapiResponse{} + if _, err := c.APIClient.Excute(c.httpRequest, c.config, returnValue); err != nil { + return nil, err + } else { + return returnValue, nil + } +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/go.mod b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/go.mod new file mode 100644 index 00000000..39812459 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/go.mod @@ -0,0 +1,7 @@ +module gitlab.ecloud.com/ecloud/ecloudsdkclouddns + +go 1.23.0 + +require gitlab.ecloud.com/ecloud/ecloudsdkcore v1.0.0 + +replace gitlab.ecloud.com/ecloud/ecloudsdkcore v1.0.0 => ../ecloudsdkcore@v1.0.0 diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_body.go new file mode 100644 index 00000000..1175cde9 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_body.go @@ -0,0 +1,54 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) +type CreateRecordBodyTypeEnum string + +// List of Type +const ( + CreateRecordBodyTypeEnumA CreateRecordBodyTypeEnum = "A" + CreateRecordBodyTypeEnumAaaa CreateRecordBodyTypeEnum = "AAAA" + CreateRecordBodyTypeEnumCaa CreateRecordBodyTypeEnum = "CAA" + CreateRecordBodyTypeEnumCmauth CreateRecordBodyTypeEnum = "CMAUTH" + CreateRecordBodyTypeEnumCname CreateRecordBodyTypeEnum = "CNAME" + CreateRecordBodyTypeEnumMx CreateRecordBodyTypeEnum = "MX" + CreateRecordBodyTypeEnumNs CreateRecordBodyTypeEnum = "NS" + CreateRecordBodyTypeEnumPtr CreateRecordBodyTypeEnum = "PTR" + CreateRecordBodyTypeEnumRp CreateRecordBodyTypeEnum = "RP" + CreateRecordBodyTypeEnumSpf CreateRecordBodyTypeEnum = "SPF" + CreateRecordBodyTypeEnumSrv CreateRecordBodyTypeEnum = "SRV" + CreateRecordBodyTypeEnumTxt CreateRecordBodyTypeEnum = "TXT" + CreateRecordBodyTypeEnumUrl CreateRecordBodyTypeEnum = "URL" +) + +type CreateRecordBody struct { + position.Body + // 主机头 + Rr string `json:"rr"` + + // 域名名称 + DomainName string `json:"domainName"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId"` + + // MX优先级,若“记录类型”选择”MX”,则需要配置该参数,默认是5 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type CreateRecordBodyTypeEnum `json:"type"` + + // 缓存的生命周期,默认可配置600s + Ttl *int32 `json:"ttl,omitempty"` + + // 记录值 + Value string `json:"value"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_body.go new file mode 100644 index 00000000..3db9f0f7 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_body.go @@ -0,0 +1,51 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) +type CreateRecordOpenapiBodyTypeEnum string + +// List of Type +const ( + CreateRecordOpenapiBodyTypeEnumA CreateRecordOpenapiBodyTypeEnum = "A" + CreateRecordOpenapiBodyTypeEnumAaaa CreateRecordOpenapiBodyTypeEnum = "AAAA" + CreateRecordOpenapiBodyTypeEnumCname CreateRecordOpenapiBodyTypeEnum = "CNAME" + CreateRecordOpenapiBodyTypeEnumMx CreateRecordOpenapiBodyTypeEnum = "MX" + CreateRecordOpenapiBodyTypeEnumTxt CreateRecordOpenapiBodyTypeEnum = "TXT" + CreateRecordOpenapiBodyTypeEnumNs CreateRecordOpenapiBodyTypeEnum = "NS" + CreateRecordOpenapiBodyTypeEnumSpf CreateRecordOpenapiBodyTypeEnum = "SPF" + CreateRecordOpenapiBodyTypeEnumSrv CreateRecordOpenapiBodyTypeEnum = "SRV" + CreateRecordOpenapiBodyTypeEnumCaa CreateRecordOpenapiBodyTypeEnum = "CAA" + CreateRecordOpenapiBodyTypeEnumCmauth CreateRecordOpenapiBodyTypeEnum = "CMAUTH" +) + +type CreateRecordOpenapiBody struct { + position.Body + // 主机头 + Rr string `json:"rr"` + + // 域名名称 + DomainName string `json:"domainName"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId"` + + // MX优先级,若“记录类型”选择”MX”,则需要配置该参数,默认是5 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type CreateRecordOpenapiBodyTypeEnum `json:"type"` + + // 缓存的生命周期,默认可配置600s + Ttl *int32 `json:"ttl,omitempty"` + + // 记录值 + Value string `json:"value"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_request.go new file mode 100644 index 00000000..d43fded1 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_request.go @@ -0,0 +1,12 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type CreateRecordOpenapiRequest struct { + + CreateRecordOpenapiBody *CreateRecordOpenapiBody `json:"createRecordOpenapiBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response.go new file mode 100644 index 00000000..a33b47c7 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type CreateRecordOpenapiResponseStateEnum string + +// List of State +const ( + CreateRecordOpenapiResponseStateEnumError CreateRecordOpenapiResponseStateEnum = "ERROR" + CreateRecordOpenapiResponseStateEnumException CreateRecordOpenapiResponseStateEnum = "EXCEPTION" + CreateRecordOpenapiResponseStateEnumForbidden CreateRecordOpenapiResponseStateEnum = "FORBIDDEN" + CreateRecordOpenapiResponseStateEnumOk CreateRecordOpenapiResponseStateEnum = "OK" +) + +type CreateRecordOpenapiResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State CreateRecordOpenapiResponseStateEnum `json:"state,omitempty"` + + Body *CreateRecordOpenapiResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response_body.go new file mode 100644 index 00000000..e7c62769 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response_body.go @@ -0,0 +1,80 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type CreateRecordOpenapiResponseBodyTypeEnum string + +// List of Type +const ( + CreateRecordOpenapiResponseBodyTypeEnumA CreateRecordOpenapiResponseBodyTypeEnum = "A" + CreateRecordOpenapiResponseBodyTypeEnumAaaa CreateRecordOpenapiResponseBodyTypeEnum = "AAAA" + CreateRecordOpenapiResponseBodyTypeEnumCname CreateRecordOpenapiResponseBodyTypeEnum = "CNAME" + CreateRecordOpenapiResponseBodyTypeEnumMx CreateRecordOpenapiResponseBodyTypeEnum = "MX" + CreateRecordOpenapiResponseBodyTypeEnumTxt CreateRecordOpenapiResponseBodyTypeEnum = "TXT" + CreateRecordOpenapiResponseBodyTypeEnumNs CreateRecordOpenapiResponseBodyTypeEnum = "NS" + CreateRecordOpenapiResponseBodyTypeEnumSpf CreateRecordOpenapiResponseBodyTypeEnum = "SPF" + CreateRecordOpenapiResponseBodyTypeEnumSrv CreateRecordOpenapiResponseBodyTypeEnum = "SRV" + CreateRecordOpenapiResponseBodyTypeEnumCaa CreateRecordOpenapiResponseBodyTypeEnum = "CAA" + CreateRecordOpenapiResponseBodyTypeEnumCmauth CreateRecordOpenapiResponseBodyTypeEnum = "CMAUTH" +) +type CreateRecordOpenapiResponseBodyStateEnum string + +// List of State +const ( + CreateRecordOpenapiResponseBodyStateEnumDisabled CreateRecordOpenapiResponseBodyStateEnum = "DISABLED" + CreateRecordOpenapiResponseBodyStateEnumEnabled CreateRecordOpenapiResponseBodyStateEnum = "ENABLED" +) + +type CreateRecordOpenapiResponseBody struct { + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 修改时间 + ModifiedTime string `json:"modifiedTime,omitempty"` + + // 线路中文名 + LineZh string `json:"lineZh,omitempty"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // 权重值 + Weight *int32 `json:"weight,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type CreateRecordOpenapiResponseBodyTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 标签 + Tags *[]CreateRecordOpenapiResponseTags `json:"tags,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 域名名称 + DomainName string `json:"domainName,omitempty"` + + // 线路英文名 + LineEn string `json:"lineEn,omitempty"` + + // 状态 + State CreateRecordOpenapiResponseBodyStateEnum `json:"state,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` + + // 定时发布时间 + Pubdate string `json:"pubdate,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response_tags.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response_tags.go new file mode 100644 index 00000000..a4bda62c --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_openapi_response_tags.go @@ -0,0 +1,16 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type CreateRecordOpenapiResponseTags struct { + + // 标签ID + TagId string `json:"tagId,omitempty"` + + // 标签名称 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_request.go new file mode 100644 index 00000000..715f03ff --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_request.go @@ -0,0 +1,12 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type CreateRecordRequest struct { + + CreateRecordBody *CreateRecordBody `json:"createRecordBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response.go new file mode 100644 index 00000000..bd277c0c --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type CreateRecordResponseStateEnum string + +// List of State +const ( + CreateRecordResponseStateEnumError CreateRecordResponseStateEnum = "ERROR" + CreateRecordResponseStateEnumException CreateRecordResponseStateEnum = "EXCEPTION" + CreateRecordResponseStateEnumForbidden CreateRecordResponseStateEnum = "FORBIDDEN" + CreateRecordResponseStateEnumOk CreateRecordResponseStateEnum = "OK" +) + +type CreateRecordResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State CreateRecordResponseStateEnum `json:"state,omitempty"` + + Body *CreateRecordResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response_body.go new file mode 100644 index 00000000..64660b91 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response_body.go @@ -0,0 +1,94 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type CreateRecordResponseBodyTypeEnum string + +// List of Type +const ( + CreateRecordResponseBodyTypeEnumA CreateRecordResponseBodyTypeEnum = "A" + CreateRecordResponseBodyTypeEnumAaaa CreateRecordResponseBodyTypeEnum = "AAAA" + CreateRecordResponseBodyTypeEnumCaa CreateRecordResponseBodyTypeEnum = "CAA" + CreateRecordResponseBodyTypeEnumCmauth CreateRecordResponseBodyTypeEnum = "CMAUTH" + CreateRecordResponseBodyTypeEnumCname CreateRecordResponseBodyTypeEnum = "CNAME" + CreateRecordResponseBodyTypeEnumMx CreateRecordResponseBodyTypeEnum = "MX" + CreateRecordResponseBodyTypeEnumNs CreateRecordResponseBodyTypeEnum = "NS" + CreateRecordResponseBodyTypeEnumPtr CreateRecordResponseBodyTypeEnum = "PTR" + CreateRecordResponseBodyTypeEnumRp CreateRecordResponseBodyTypeEnum = "RP" + CreateRecordResponseBodyTypeEnumSpf CreateRecordResponseBodyTypeEnum = "SPF" + CreateRecordResponseBodyTypeEnumSrv CreateRecordResponseBodyTypeEnum = "SRV" + CreateRecordResponseBodyTypeEnumTxt CreateRecordResponseBodyTypeEnum = "TXT" + CreateRecordResponseBodyTypeEnumUrl CreateRecordResponseBodyTypeEnum = "URL" +) +type CreateRecordResponseBodyTimedStatusEnum string + +// List of TimedStatus +const ( + CreateRecordResponseBodyTimedStatusEnumDisabled CreateRecordResponseBodyTimedStatusEnum = "DISABLED" + CreateRecordResponseBodyTimedStatusEnumEnabled CreateRecordResponseBodyTimedStatusEnum = "ENABLED" + CreateRecordResponseBodyTimedStatusEnumTimed CreateRecordResponseBodyTimedStatusEnum = "TIMED" +) +type CreateRecordResponseBodyStateEnum string + +// List of State +const ( + CreateRecordResponseBodyStateEnumDisabled CreateRecordResponseBodyStateEnum = "DISABLED" + CreateRecordResponseBodyStateEnumEnabled CreateRecordResponseBodyStateEnum = "ENABLED" +) + +type CreateRecordResponseBody struct { + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 修改时间 + ModifiedTime string `json:"modifiedTime,omitempty"` + + // 线路中文名 + LineZh string `json:"lineZh,omitempty"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // 权重值 + Weight *int32 `json:"weight,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type CreateRecordResponseBodyTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 标签 + Tags *[]CreateRecordResponseTags `json:"tags,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 定时状态 + TimedStatus CreateRecordResponseBodyTimedStatusEnum `json:"timedStatus,omitempty"` + + // 域名名称 + DomainName string `json:"domainName,omitempty"` + + // 线路英文名 + LineEn string `json:"lineEn,omitempty"` + + // 状态 + State CreateRecordResponseBodyStateEnum `json:"state,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` + + // 定时发布时间 + Pubdate string `json:"pubdate,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response_tags.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response_tags.go new file mode 100644 index 00000000..003680d5 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/create_record_response_tags.go @@ -0,0 +1,16 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type CreateRecordResponseTags struct { + + // 标签ID + TagId string `json:"tagId,omitempty"` + + // 标签名称 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_body.go new file mode 100644 index 00000000..326b9abb --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_body.go @@ -0,0 +1,15 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) + +type DeleteRecordBody struct { + position.Body + // 解析记录ID列表 + RecordIdList []string `json:"recordIdList"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_body.go new file mode 100644 index 00000000..e5614ac5 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_body.go @@ -0,0 +1,15 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) + +type DeleteRecordOpenapiBody struct { + position.Body + // 待删除的解析记录ID请求体 + RecordIdList []string `json:"recordIdList"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_request.go new file mode 100644 index 00000000..1cb684d6 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_request.go @@ -0,0 +1,12 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type DeleteRecordOpenapiRequest struct { + + DeleteRecordOpenapiBody *DeleteRecordOpenapiBody `json:"deleteRecordOpenapiBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_response.go new file mode 100644 index 00000000..ca528148 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type DeleteRecordOpenapiResponseStateEnum string + +// List of State +const ( + DeleteRecordOpenapiResponseStateEnumError DeleteRecordOpenapiResponseStateEnum = "ERROR" + DeleteRecordOpenapiResponseStateEnumException DeleteRecordOpenapiResponseStateEnum = "EXCEPTION" + DeleteRecordOpenapiResponseStateEnumForbidden DeleteRecordOpenapiResponseStateEnum = "FORBIDDEN" + DeleteRecordOpenapiResponseStateEnumOk DeleteRecordOpenapiResponseStateEnum = "OK" +) + +type DeleteRecordOpenapiResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State DeleteRecordOpenapiResponseStateEnum `json:"state,omitempty"` + + Body *[]DeleteRecordOpenapiResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_response_body.go new file mode 100644 index 00000000..67da3ab7 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_openapi_response_body.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type DeleteRecordOpenapiResponseBodyCodeEnum string + +// List of Code +const ( + DeleteRecordOpenapiResponseBodyCodeEnumError DeleteRecordOpenapiResponseBodyCodeEnum = "ERROR" + DeleteRecordOpenapiResponseBodyCodeEnumSuccess DeleteRecordOpenapiResponseBodyCodeEnum = "SUCCESS" +) + +type DeleteRecordOpenapiResponseBody struct { + + // 结果说明 + Msg string `json:"msg,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 结果码 + Code DeleteRecordOpenapiResponseBodyCodeEnum `json:"code,omitempty"` + + // 域名 + DomainName string `json:"domainName,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_request.go new file mode 100644 index 00000000..678fd8ef --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_request.go @@ -0,0 +1,12 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type DeleteRecordRequest struct { + + DeleteRecordBody *DeleteRecordBody `json:"deleteRecordBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_response.go new file mode 100644 index 00000000..051d7105 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type DeleteRecordResponseStateEnum string + +// List of State +const ( + DeleteRecordResponseStateEnumError DeleteRecordResponseStateEnum = "ERROR" + DeleteRecordResponseStateEnumException DeleteRecordResponseStateEnum = "EXCEPTION" + DeleteRecordResponseStateEnumForbidden DeleteRecordResponseStateEnum = "FORBIDDEN" + DeleteRecordResponseStateEnumOk DeleteRecordResponseStateEnum = "OK" +) + +type DeleteRecordResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State DeleteRecordResponseStateEnum `json:"state,omitempty"` + + Body *[]DeleteRecordResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_response_body.go new file mode 100644 index 00000000..45320290 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/delete_record_response_body.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type DeleteRecordResponseBodyCodeEnum string + +// List of Code +const ( + DeleteRecordResponseBodyCodeEnumError DeleteRecordResponseBodyCodeEnum = "ERROR" + DeleteRecordResponseBodyCodeEnumSuccess DeleteRecordResponseBodyCodeEnum = "SUCCESS" +) + +type DeleteRecordResponseBody struct { + + // 结果说明 + Msg string `json:"msg,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 结果码 + Code DeleteRecordResponseBodyCodeEnum `json:"code,omitempty"` + + // 域名 + DomainName string `json:"domainName,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_body.go new file mode 100644 index 00000000..5eadce7a --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_body.go @@ -0,0 +1,18 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) + +type ListRecordBody struct { + position.Body + // 域名 + DomainName string `json:"domainName"` + + // 可以匹配主机头rr、记录值value、备注description,并且是模糊搜索 + DataLike string `json:"dataLike,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_body.go new file mode 100644 index 00000000..63f5e13a --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_body.go @@ -0,0 +1,15 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) + +type ListRecordOpenapiBody struct { + position.Body + // 域名 + DomainName string `json:"domainName"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_query.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_query.go new file mode 100644 index 00000000..ee89a7f5 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_query.go @@ -0,0 +1,18 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) + +type ListRecordOpenapiQuery struct { + position.Query + // 页大小 + PageSize *int32 `json:"pageSize,omitempty"` + + // 当前页 + Page *int32 `json:"page,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_request.go new file mode 100644 index 00000000..34540481 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_request.go @@ -0,0 +1,14 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ListRecordOpenapiRequest struct { + + ListRecordOpenapiQuery *ListRecordOpenapiQuery `json:"listRecordOpenapiQuery,omitempty"` + + ListRecordOpenapiBody *ListRecordOpenapiBody `json:"listRecordOpenapiBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response.go new file mode 100644 index 00000000..36646938 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ListRecordOpenapiResponseStateEnum string + +// List of State +const ( + ListRecordOpenapiResponseStateEnumError ListRecordOpenapiResponseStateEnum = "ERROR" + ListRecordOpenapiResponseStateEnumException ListRecordOpenapiResponseStateEnum = "EXCEPTION" + ListRecordOpenapiResponseStateEnumForbidden ListRecordOpenapiResponseStateEnum = "FORBIDDEN" + ListRecordOpenapiResponseStateEnumOk ListRecordOpenapiResponseStateEnum = "OK" +) + +type ListRecordOpenapiResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State ListRecordOpenapiResponseStateEnum `json:"state,omitempty"` + + Body *ListRecordOpenapiResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_body.go new file mode 100644 index 00000000..8c6f7302 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_body.go @@ -0,0 +1,25 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ListRecordOpenapiResponseBody struct { + + // 当前页的具体数据列表 + Data *[]ListRecordOpenapiResponseData `json:"data,omitempty"` + + // 总数据量 + TotalNum *int32 `json:"totalNum,omitempty"` + + // 总页数 + TotalPages *int32 `json:"totalPages,omitempty"` + + // 页大小 + PageSize *int32 `json:"pageSize,omitempty"` + + // 当前页码,从0开始,0表示第一页 + Page *int32 `json:"page,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_data.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_data.go new file mode 100644 index 00000000..19981aa9 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_data.go @@ -0,0 +1,91 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ListRecordOpenapiResponseDataTypeEnum string + +// List of Type +const ( + ListRecordOpenapiResponseDataTypeEnumA ListRecordOpenapiResponseDataTypeEnum = "A" + ListRecordOpenapiResponseDataTypeEnumAaaa ListRecordOpenapiResponseDataTypeEnum = "AAAA" + ListRecordOpenapiResponseDataTypeEnumCname ListRecordOpenapiResponseDataTypeEnum = "CNAME" + ListRecordOpenapiResponseDataTypeEnumMx ListRecordOpenapiResponseDataTypeEnum = "MX" + ListRecordOpenapiResponseDataTypeEnumTxt ListRecordOpenapiResponseDataTypeEnum = "TXT" + ListRecordOpenapiResponseDataTypeEnumNs ListRecordOpenapiResponseDataTypeEnum = "NS" + ListRecordOpenapiResponseDataTypeEnumSpf ListRecordOpenapiResponseDataTypeEnum = "SPF" + ListRecordOpenapiResponseDataTypeEnumSrv ListRecordOpenapiResponseDataTypeEnum = "SRV" + ListRecordOpenapiResponseDataTypeEnumCaa ListRecordOpenapiResponseDataTypeEnum = "CAA" + ListRecordOpenapiResponseDataTypeEnumCmauth ListRecordOpenapiResponseDataTypeEnum = "CMAUTH" +) +type ListRecordOpenapiResponseDataTimedStatusEnum string + +// List of TimedStatus +const ( + ListRecordOpenapiResponseDataTimedStatusEnumDisabled ListRecordOpenapiResponseDataTimedStatusEnum = "DISABLED" + ListRecordOpenapiResponseDataTimedStatusEnumEnabled ListRecordOpenapiResponseDataTimedStatusEnum = "ENABLED" + ListRecordOpenapiResponseDataTimedStatusEnumTimed ListRecordOpenapiResponseDataTimedStatusEnum = "TIMED" +) +type ListRecordOpenapiResponseDataStateEnum string + +// List of State +const ( + ListRecordOpenapiResponseDataStateEnumDisabled ListRecordOpenapiResponseDataStateEnum = "DISABLED" + ListRecordOpenapiResponseDataStateEnumEnabled ListRecordOpenapiResponseDataStateEnum = "ENABLED" +) + +type ListRecordOpenapiResponseData struct { + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 修改时间 + ModifiedTime string `json:"modifiedTime,omitempty"` + + // 线路中文名 + LineZh string `json:"lineZh,omitempty"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // 权重值 + Weight *int32 `json:"weight,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type ListRecordOpenapiResponseDataTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 标签 + Tags *[]ListRecordOpenapiResponseTags `json:"tags,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 定时状态 + TimedStatus ListRecordOpenapiResponseDataTimedStatusEnum `json:"timedStatus,omitempty"` + + // 域名名称 + DomainName string `json:"domainName,omitempty"` + + // 线路英文名 + LineEn string `json:"lineEn,omitempty"` + + // 状态 + State ListRecordOpenapiResponseDataStateEnum `json:"state,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` + + // 定时发布时间 + Pubdate string `json:"pubdate,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_tags.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_tags.go new file mode 100644 index 00000000..867f667f --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_openapi_response_tags.go @@ -0,0 +1,16 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ListRecordOpenapiResponseTags struct { + + // 标签ID + TagId string `json:"tagId,omitempty"` + + // 标签名称 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_query.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_query.go new file mode 100644 index 00000000..df871a76 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_query.go @@ -0,0 +1,18 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) + +type ListRecordQuery struct { + position.Query + // 页大小 + PageSize *int32 `json:"pageSize,omitempty"` + + // 当前页 + CurrentPage *int32 `json:"currentPage,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_request.go new file mode 100644 index 00000000..5ff9df08 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_request.go @@ -0,0 +1,14 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ListRecordRequest struct { + + ListRecordBody *ListRecordBody `json:"listRecordBody,omitempty"` + + ListRecordQuery *ListRecordQuery `json:"listRecordQuery,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response.go new file mode 100644 index 00000000..b11f3d21 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ListRecordResponseStateEnum string + +// List of State +const ( + ListRecordResponseStateEnumError ListRecordResponseStateEnum = "ERROR" + ListRecordResponseStateEnumException ListRecordResponseStateEnum = "EXCEPTION" + ListRecordResponseStateEnumForbidden ListRecordResponseStateEnum = "FORBIDDEN" + ListRecordResponseStateEnumOk ListRecordResponseStateEnum = "OK" +) + +type ListRecordResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State ListRecordResponseStateEnum `json:"state,omitempty"` + + Body *ListRecordResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response_body.go new file mode 100644 index 00000000..0acf543d --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response_body.go @@ -0,0 +1,22 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ListRecordResponseBody struct { + + // 总页数 + TotalPages *int32 `json:"totalPages,omitempty"` + + // 当前页码,从0开始,0表示第一页 + CurrentPage *int32 `json:"currentPage,omitempty"` + + // 当前页的具体数据列表 + Results *[]ListRecordResponseResults `json:"results,omitempty"` + + // 总数据量 + TotalElements *int64 `json:"totalElements,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response_results.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response_results.go new file mode 100644 index 00000000..7498fca3 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/list_record_response_results.go @@ -0,0 +1,91 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ListRecordResponseResultsTypeEnum string + +// List of Type +const ( + ListRecordResponseResultsTypeEnumA ListRecordResponseResultsTypeEnum = "A" + ListRecordResponseResultsTypeEnumAaaa ListRecordResponseResultsTypeEnum = "AAAA" + ListRecordResponseResultsTypeEnumCaa ListRecordResponseResultsTypeEnum = "CAA" + ListRecordResponseResultsTypeEnumCmauth ListRecordResponseResultsTypeEnum = "CMAUTH" + ListRecordResponseResultsTypeEnumCname ListRecordResponseResultsTypeEnum = "CNAME" + ListRecordResponseResultsTypeEnumMx ListRecordResponseResultsTypeEnum = "MX" + ListRecordResponseResultsTypeEnumNs ListRecordResponseResultsTypeEnum = "NS" + ListRecordResponseResultsTypeEnumPtr ListRecordResponseResultsTypeEnum = "PTR" + ListRecordResponseResultsTypeEnumRp ListRecordResponseResultsTypeEnum = "RP" + ListRecordResponseResultsTypeEnumSpf ListRecordResponseResultsTypeEnum = "SPF" + ListRecordResponseResultsTypeEnumSrv ListRecordResponseResultsTypeEnum = "SRV" + ListRecordResponseResultsTypeEnumTxt ListRecordResponseResultsTypeEnum = "TXT" + ListRecordResponseResultsTypeEnumUrl ListRecordResponseResultsTypeEnum = "URL" +) +type ListRecordResponseResultsTimedStatusEnum string + +// List of TimedStatus +const ( + ListRecordResponseResultsTimedStatusEnumDisabled ListRecordResponseResultsTimedStatusEnum = "DISABLED" + ListRecordResponseResultsTimedStatusEnumEnabled ListRecordResponseResultsTimedStatusEnum = "ENABLED" + ListRecordResponseResultsTimedStatusEnumTimed ListRecordResponseResultsTimedStatusEnum = "TIMED" +) +type ListRecordResponseResultsStateEnum string + +// List of State +const ( + ListRecordResponseResultsStateEnumDisabled ListRecordResponseResultsStateEnum = "DISABLED" + ListRecordResponseResultsStateEnumEnabled ListRecordResponseResultsStateEnum = "ENABLED" +) + +type ListRecordResponseResults struct { + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 修改时间 + ModifiedTime string `json:"modifiedTime,omitempty"` + + // 线路中文名 + LineZh string `json:"lineZh,omitempty"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // 权重值 + Weight *int32 `json:"weight,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type ListRecordResponseResultsTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 定时状态 + TimedStatus ListRecordResponseResultsTimedStatusEnum `json:"timedStatus,omitempty"` + + // 域名名称 + DomainName string `json:"domainName,omitempty"` + + // 线路英文名 + LineEn string `json:"lineEn,omitempty"` + + // 状态 + State ListRecordResponseResultsStateEnum `json:"state,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` + + // 定时发布时间 + Pubdate string `json:"pubdate,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_body.go new file mode 100644 index 00000000..ab772c09 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_body.go @@ -0,0 +1,57 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) +type ModifyRecordBodyTypeEnum string + +// List of Type +const ( + ModifyRecordBodyTypeEnumA ModifyRecordBodyTypeEnum = "A" + ModifyRecordBodyTypeEnumAaaa ModifyRecordBodyTypeEnum = "AAAA" + ModifyRecordBodyTypeEnumCaa ModifyRecordBodyTypeEnum = "CAA" + ModifyRecordBodyTypeEnumCmauth ModifyRecordBodyTypeEnum = "CMAUTH" + ModifyRecordBodyTypeEnumCname ModifyRecordBodyTypeEnum = "CNAME" + ModifyRecordBodyTypeEnumMx ModifyRecordBodyTypeEnum = "MX" + ModifyRecordBodyTypeEnumNs ModifyRecordBodyTypeEnum = "NS" + ModifyRecordBodyTypeEnumPtr ModifyRecordBodyTypeEnum = "PTR" + ModifyRecordBodyTypeEnumRp ModifyRecordBodyTypeEnum = "RP" + ModifyRecordBodyTypeEnumSpf ModifyRecordBodyTypeEnum = "SPF" + ModifyRecordBodyTypeEnumSrv ModifyRecordBodyTypeEnum = "SRV" + ModifyRecordBodyTypeEnumTxt ModifyRecordBodyTypeEnum = "TXT" + ModifyRecordBodyTypeEnumUrl ModifyRecordBodyTypeEnum = "URL" +) + +type ModifyRecordBody struct { + position.Body + // 解析记录ID + RecordId string `json:"recordId"` + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 域名名称 + DomainName string `json:"domainName"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type ModifyRecordBodyTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_body.go new file mode 100644 index 00000000..3bde8919 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_body.go @@ -0,0 +1,54 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + +import ( + "gitlab.ecloud.com/ecloud/ecloudsdkcore/position" +) +type ModifyRecordOpenapiBodyTypeEnum string + +// List of Type +const ( + ModifyRecordOpenapiBodyTypeEnumA ModifyRecordOpenapiBodyTypeEnum = "A" + ModifyRecordOpenapiBodyTypeEnumAaaa ModifyRecordOpenapiBodyTypeEnum = "AAAA" + ModifyRecordOpenapiBodyTypeEnumCname ModifyRecordOpenapiBodyTypeEnum = "CNAME" + ModifyRecordOpenapiBodyTypeEnumMx ModifyRecordOpenapiBodyTypeEnum = "MX" + ModifyRecordOpenapiBodyTypeEnumTxt ModifyRecordOpenapiBodyTypeEnum = "TXT" + ModifyRecordOpenapiBodyTypeEnumNs ModifyRecordOpenapiBodyTypeEnum = "NS" + ModifyRecordOpenapiBodyTypeEnumSpf ModifyRecordOpenapiBodyTypeEnum = "SPF" + ModifyRecordOpenapiBodyTypeEnumSrv ModifyRecordOpenapiBodyTypeEnum = "SRV" + ModifyRecordOpenapiBodyTypeEnumCaa ModifyRecordOpenapiBodyTypeEnum = "CAA" + ModifyRecordOpenapiBodyTypeEnumCmauth ModifyRecordOpenapiBodyTypeEnum = "CMAUTH" +) + +type ModifyRecordOpenapiBody struct { + position.Body + // 解析记录ID + RecordId string `json:"recordId"` + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 域名名称 + DomainName string `json:"domainName"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type ModifyRecordOpenapiBodyTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_request.go new file mode 100644 index 00000000..fd1ffe00 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_request.go @@ -0,0 +1,12 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ModifyRecordOpenapiRequest struct { + + ModifyRecordOpenapiBody *ModifyRecordOpenapiBody `json:"modifyRecordOpenapiBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response.go new file mode 100644 index 00000000..97d7552f --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ModifyRecordOpenapiResponseStateEnum string + +// List of State +const ( + ModifyRecordOpenapiResponseStateEnumError ModifyRecordOpenapiResponseStateEnum = "ERROR" + ModifyRecordOpenapiResponseStateEnumException ModifyRecordOpenapiResponseStateEnum = "EXCEPTION" + ModifyRecordOpenapiResponseStateEnumForbidden ModifyRecordOpenapiResponseStateEnum = "FORBIDDEN" + ModifyRecordOpenapiResponseStateEnumOk ModifyRecordOpenapiResponseStateEnum = "OK" +) + +type ModifyRecordOpenapiResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State ModifyRecordOpenapiResponseStateEnum `json:"state,omitempty"` + + Body *ModifyRecordOpenapiResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response_body.go new file mode 100644 index 00000000..6dfcec71 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response_body.go @@ -0,0 +1,91 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ModifyRecordOpenapiResponseBodyTypeEnum string + +// List of Type +const ( + ModifyRecordOpenapiResponseBodyTypeEnumA ModifyRecordOpenapiResponseBodyTypeEnum = "A" + ModifyRecordOpenapiResponseBodyTypeEnumAaaa ModifyRecordOpenapiResponseBodyTypeEnum = "AAAA" + ModifyRecordOpenapiResponseBodyTypeEnumCname ModifyRecordOpenapiResponseBodyTypeEnum = "CNAME" + ModifyRecordOpenapiResponseBodyTypeEnumMx ModifyRecordOpenapiResponseBodyTypeEnum = "MX" + ModifyRecordOpenapiResponseBodyTypeEnumTxt ModifyRecordOpenapiResponseBodyTypeEnum = "TXT" + ModifyRecordOpenapiResponseBodyTypeEnumNs ModifyRecordOpenapiResponseBodyTypeEnum = "NS" + ModifyRecordOpenapiResponseBodyTypeEnumSpf ModifyRecordOpenapiResponseBodyTypeEnum = "SPF" + ModifyRecordOpenapiResponseBodyTypeEnumSrv ModifyRecordOpenapiResponseBodyTypeEnum = "SRV" + ModifyRecordOpenapiResponseBodyTypeEnumCaa ModifyRecordOpenapiResponseBodyTypeEnum = "CAA" + ModifyRecordOpenapiResponseBodyTypeEnumCmauth ModifyRecordOpenapiResponseBodyTypeEnum = "CMAUTH" +) +type ModifyRecordOpenapiResponseBodyTimedStatusEnum string + +// List of TimedStatus +const ( + ModifyRecordOpenapiResponseBodyTimedStatusEnumDisabled ModifyRecordOpenapiResponseBodyTimedStatusEnum = "DISABLED" + ModifyRecordOpenapiResponseBodyTimedStatusEnumEnabled ModifyRecordOpenapiResponseBodyTimedStatusEnum = "ENABLED" + ModifyRecordOpenapiResponseBodyTimedStatusEnumTimed ModifyRecordOpenapiResponseBodyTimedStatusEnum = "TIMED" +) +type ModifyRecordOpenapiResponseBodyStateEnum string + +// List of State +const ( + ModifyRecordOpenapiResponseBodyStateEnumDisabled ModifyRecordOpenapiResponseBodyStateEnum = "DISABLED" + ModifyRecordOpenapiResponseBodyStateEnumEnabled ModifyRecordOpenapiResponseBodyStateEnum = "ENABLED" +) + +type ModifyRecordOpenapiResponseBody struct { + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 修改时间 + ModifiedTime string `json:"modifiedTime,omitempty"` + + // 线路中文名 + LineZh string `json:"lineZh,omitempty"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // 权重值 + Weight *int32 `json:"weight,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type ModifyRecordOpenapiResponseBodyTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 标签 + Tags *[]ModifyRecordOpenapiResponseTags `json:"tags,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 定时状态 + TimedStatus ModifyRecordOpenapiResponseBodyTimedStatusEnum `json:"timedStatus,omitempty"` + + // 域名名称 + DomainName string `json:"domainName,omitempty"` + + // 线路英文名 + LineEn string `json:"lineEn,omitempty"` + + // 状态 + State ModifyRecordOpenapiResponseBodyStateEnum `json:"state,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` + + // 定时发布时间 + Pubdate string `json:"pubdate,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response_tags.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response_tags.go new file mode 100644 index 00000000..62c2e780 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_openapi_response_tags.go @@ -0,0 +1,16 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ModifyRecordOpenapiResponseTags struct { + + // 标签ID + TagId string `json:"tagId,omitempty"` + + // 标签名称 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_request.go new file mode 100644 index 00000000..d92abb44 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_request.go @@ -0,0 +1,12 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + + +type ModifyRecordRequest struct { + + ModifyRecordBody *ModifyRecordBody `json:"modifyRecordBody,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_response.go new file mode 100644 index 00000000..45b1ae0f --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_response.go @@ -0,0 +1,29 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ModifyRecordResponseStateEnum string + +// List of State +const ( + ModifyRecordResponseStateEnumError ModifyRecordResponseStateEnum = "ERROR" + ModifyRecordResponseStateEnumException ModifyRecordResponseStateEnum = "EXCEPTION" + ModifyRecordResponseStateEnumForbidden ModifyRecordResponseStateEnum = "FORBIDDEN" + ModifyRecordResponseStateEnumOk ModifyRecordResponseStateEnum = "OK" +) + +type ModifyRecordResponse struct { + + RequestId string `json:"requestId,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + ErrorCode string `json:"errorCode,omitempty"` + + State ModifyRecordResponseStateEnum `json:"state,omitempty"` + + Body *ModifyRecordResponseBody `json:"body,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_response_body.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_response_body.go new file mode 100644 index 00000000..3df09342 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkclouddns@v1.0.1/model/modify_record_response_body.go @@ -0,0 +1,77 @@ +// @Title Golang SDK Client +// @Description This code is auto generated +// @Author Ecloud SDK + +package model + + +type ModifyRecordResponseBodyTypeEnum string + +// List of Type +const ( + ModifyRecordResponseBodyTypeEnumA ModifyRecordResponseBodyTypeEnum = "A" + ModifyRecordResponseBodyTypeEnumAaaa ModifyRecordResponseBodyTypeEnum = "AAAA" + ModifyRecordResponseBodyTypeEnumCaa ModifyRecordResponseBodyTypeEnum = "CAA" + ModifyRecordResponseBodyTypeEnumCmauth ModifyRecordResponseBodyTypeEnum = "CMAUTH" + ModifyRecordResponseBodyTypeEnumCname ModifyRecordResponseBodyTypeEnum = "CNAME" + ModifyRecordResponseBodyTypeEnumMx ModifyRecordResponseBodyTypeEnum = "MX" + ModifyRecordResponseBodyTypeEnumNs ModifyRecordResponseBodyTypeEnum = "NS" + ModifyRecordResponseBodyTypeEnumPtr ModifyRecordResponseBodyTypeEnum = "PTR" + ModifyRecordResponseBodyTypeEnumRp ModifyRecordResponseBodyTypeEnum = "RP" + ModifyRecordResponseBodyTypeEnumSpf ModifyRecordResponseBodyTypeEnum = "SPF" + ModifyRecordResponseBodyTypeEnumSrv ModifyRecordResponseBodyTypeEnum = "SRV" + ModifyRecordResponseBodyTypeEnumTxt ModifyRecordResponseBodyTypeEnum = "TXT" + ModifyRecordResponseBodyTypeEnumUrl ModifyRecordResponseBodyTypeEnum = "URL" +) +type ModifyRecordResponseBodyStateEnum string + +// List of State +const ( + ModifyRecordResponseBodyStateEnumDisabled ModifyRecordResponseBodyStateEnum = "DISABLED" + ModifyRecordResponseBodyStateEnumEnabled ModifyRecordResponseBodyStateEnum = "ENABLED" +) + +type ModifyRecordResponseBody struct { + + // 主机头 + Rr string `json:"rr,omitempty"` + + // 修改时间 + ModifiedTime string `json:"modifiedTime,omitempty"` + + // 线路中文名 + LineZh string `json:"lineZh,omitempty"` + + // 备注 + Description string `json:"description,omitempty"` + + // 线路ID + LineId string `json:"lineId,omitempty"` + + // 权重值 + Weight *int32 `json:"weight,omitempty"` + + // MX优先级 + MxPri *int32 `json:"mxPri,omitempty"` + + // 记录类型 + Type ModifyRecordResponseBodyTypeEnum `json:"type,omitempty"` + + // 缓存的生命周期 + Ttl *int32 `json:"ttl,omitempty"` + + // 解析记录ID + RecordId string `json:"recordId,omitempty"` + + // 域名名称 + DomainName string `json:"domainName,omitempty"` + + // 线路英文名 + LineEn string `json:"lineEn,omitempty"` + + // 状态 + State ModifyRecordResponseBodyStateEnum `json:"state,omitempty"` + + // 记录值 + Value string `json:"value,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/api_client.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/api_client.go new file mode 100644 index 00000000..8f73b499 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/api_client.go @@ -0,0 +1,507 @@ +package ecloudsdkcore + +import ( + "bytes" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "gitlab.ecloud.com/ecloud/ecloudsdkcore/config" + "io" + "io/ioutil" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:(?:application|text)/json)") + xmlCheck = regexp.MustCompile("(?i:(?:application|text)/xml)") +) + +// APIClient manages communication +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service +} + +type service struct { + client *APIClient +} + +type HttpRequestPosition string + +const ( + BODY HttpRequestPosition = "Body" + QUERY HttpRequestPosition = "Query" + PATH HttpRequestPosition = "Path" + HEADER HttpRequestPosition = "Header" +) + +const SdkPortalUrl = "/op-apim-portal/apim/request/sdk" +const SdkPortalGatewayUrl = "/api/query/openapi/apim/request/sdk" + +// NewAPIClient creates a new API client. +func NewAPIClient() *APIClient { + cfg := NewConfiguration() + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + c := &APIClient{} + c.cfg = cfg + c.common.client = c + return c +} + +// atoi string to int +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + if obj == nil { + return nil + } + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string, request HttpRequest) (*http.Request, string) { + var delimiter string + + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return nil, strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") + } + + return nil, fmt.Sprintf("%v", obj) +} + +// Excute entry for http call +func (c *APIClient) Excute(httpRequest *HttpRequest, config *config.Config, returnType interface{}) (*http.Response, error) { + httpRequest = buildHttpRequest(httpRequest, config) + request := buildCall(httpRequest) + httpResponse, err := c.callAPI(request) + if err != nil || httpResponse == nil { + return nil, err + } + + responseBody, err := ioutil.ReadAll(httpResponse.Body) + httpResponse.Body.Close() + if err != nil { + return httpResponse, err + } + + if httpResponse.StatusCode < 300 { + // If we succeed, return the data, otherwise pass on to decode error. + err = c.decode(&returnType, responseBody, httpResponse.Header.Get("Content-Type")) + if err != nil { + return httpResponse, fmt.Errorf("%w, response body is: %s", err, string(responseBody)) + } + return httpResponse, nil + } + + if httpResponse.StatusCode >= 300 { + newErr := GenericResponseError{ + body: responseBody, + error: httpResponse.Status, + } + return httpResponse, newErr + } + return httpResponse, err +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// ChangeBasePath Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// buildHttpRequest build the request +func buildHttpRequest(httpRequest *HttpRequest, config *config.Config) *HttpRequest { + openApiRequest := &OpenApiRequest{ + AccessKey: config.AccessKey, + SecretKey: config.SecretKey, + PoolId: config.PoolId, + Api: httpRequest.Action, + Product: httpRequest.Product, + Version: httpRequest.Version, + SdkVersion: httpRequest.SdkVersion, + Language: "Golang", + } + if httpRequest.Body != nil { + reqType := reflect.TypeOf(httpRequest.Body) + if reqType.Kind() == reflect.Ptr { + reqType = reqType.Elem() + } + v := reflect.ValueOf(httpRequest.Body) + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + var flag = false + for i := 0; i < reqType.NumField(); i++ { + fieldType := reqType.Field(i) + value := v.FieldByName(fieldType.Name) + if value.Kind() == reflect.Ptr { + if value.IsNil() { + continue + } + value = value.Elem() + + } + propertyType := fieldType.Type + if propertyType.Kind() == reflect.Ptr { + propertyType = propertyType.Elem() + } + + _, flag = propertyType.FieldByName(string(BODY)) + if flag { + openApiRequest.BodyParameter = value.Interface() + continue + } + _, flag = propertyType.FieldByName(string(HEADER)) + if flag { + openApiRequest.HeaderParameter = structToMap(value.Interface()) + continue + } + _, flag = propertyType.FieldByName(string(QUERY)) + if flag { + openApiRequest.QueryParameter = structToMap(value.Interface()) + continue + } + _, flag = propertyType.FieldByName(string(PATH)) + if flag { + openApiRequest.PathParameter = structToMap(value.Interface()) + continue + } + } + } + headers := make(map[string]interface{}) + if httpRequest.HeaderParams != nil { + if openApiRequest.HeaderParameter == nil { + headers = httpRequest.HeaderParams + } else { + headers = mergeMap(openApiRequest.HeaderParameter, httpRequest.HeaderParams) + } + openApiRequest.HeaderParameter = headers + } + httpRequest.Body = openApiRequest + return httpRequest +} + +// mergeMap merge the two map results +func mergeMap(mObj ...map[string]interface{}) map[string]interface{} { + newMap := map[string]interface{}{} + for _, m := range mObj { + for k, v := range m { + newMap[k] = v + } + } + return newMap +} + +// structToMap struct convert to map +func structToMap(value interface{}) map[string]interface{} { + data, _ := json.Marshal(value) + result := make(map[string]interface{}) + json.Unmarshal(data, &result) + return result +} + +func buildCall(httpRequest *HttpRequest) (request *http.Request) { + var url = "" + if len(httpRequest.Url) > 0 { + url = httpRequest.Url + SdkPortalUrl + } else { + url = httpRequest.DefaultUrl + SdkPortalGatewayUrl + } + request, _ = prepareRequest(url, "POST", httpRequest.Body) + return request +} + +// prepareRequest build the request +func prepareRequest(path string, method string, + postBody interface{}, +) (httpRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + var contentType = detectContentType(postBody) + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Generate a new request + if body != nil { + httpRequest, err = http.NewRequest(method, url.String(), body) + } else { + httpRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add default header parameters + httpRequest.Header.Add("Content-Type", "application/json") + return httpRequest, nil +} + +func (c *APIClient) decode(v interface{}, b []byte, contentType string) (err error) { + if strings.Contains(contentType, "application/xml") { + if err = xml.Unmarshal(b, v); err != nil { + return err + } + return nil + } else if strings.Contains(contentType, "application/json") { + platformResponse := &APIPlatformResponse{} + if err = json.Unmarshal(b, platformResponse); err != nil { + newErr := GenericResponseError{ + body: b, + error: err.Error(), + } + return newErr + } + platformResponseBodyBytes, _ := json.Marshal(platformResponse.Body) + platformResponseBody := &APIPlatformResponseBody{} + if err = json.Unmarshal(platformResponseBodyBytes, platformResponseBody); err != nil { + return err + } + /* + 找到两层指针指向的元素 + */ + value := reflect.ValueOf(v).Elem().Elem() + + if !value.IsNil() { + structValue := value.Elem() + if structValue.NumField() == 1 && structValue.Field(0).Kind() == reflect.String { + n := len(platformResponseBody.ResponseBody) + structValue.Field(0).SetString(platformResponseBody.ResponseBody[1 : n-1]) + return nil + } + } + + if err = json.Unmarshal([]byte(platformResponseBody.ResponseBody), v); err != nil { + return err + } + return nil + } + return errors.New("undefined response type") +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if s, ok := body.(*string); ok { + _, err = bodyBuf.WriteString(*s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} + +// GenericResponseError Provides access to the body, error and model on returned errors. +type GenericResponseError struct { + body []byte + error string + model interface{} +} + +// Error returns non-empty string if there was an error. +func (e GenericResponseError) Error() string { + return e.error +} + +// Body returns the raw bytes of the response +func (e GenericResponseError) Body() []byte { + return e.body +} + +// Model returns the unpacked model of the error +func (e GenericResponseError) Model() interface{} { + return e.model +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/api_response.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/api_response.go new file mode 100644 index 00000000..89110877 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/api_response.go @@ -0,0 +1,64 @@ +package ecloudsdkcore + +import ( + "net/http" +) + +type ReturnState string + +const ( + OK ReturnState = "OK" + ERROR ReturnState = "ERROR" + EXCEPTION ReturnState = "EXCEPTION" + ALARM ReturnState = "ALARM" + FORBIDDEN ReturnState = "FORBIDDEN" +) + +type APIResponse struct { + *http.Response `json:"-"` + Message string `json:"message,omitempty"` + // Operation is the name of the swagger operation. + Operation string `json:"operation,omitempty"` + // RequestURL is the request URL. This value is always available, even if the + // embedded *http.Response is nil. + RequestURL string `json:"url,omitempty"` + // Method is the HTTP method used for the request. This value is always + // available, even if the embedded *http.Response is nil. + Method string `json:"method,omitempty"` + // Payload holds the contents of the response body (which may be nil or empty). + // This is provided here as the raw response.Body() reader will have already + // been drained. + Payload []byte `json:"-"` +} + +type APIPlatformResponse struct { + RequestId string `json:"requestId,omitempty"` + State ReturnState `json:"state,omitempty"` + Body interface{} `json:"body,omitempty"` + ErrorCode string `json:"errorCode,omitempty"` + ErrorParams []string `json:"errorParams,omitempty"` + ErrorMessage string `json:"errorMessage,omitempty"` +} + +type APIPlatformResponseBody struct { + // TimeConsuming int64 `json:"timeConsuming,omitempty"` + ResponseBody string `json:"responseBody,omitempty"` + RequestHeader map[string]interface{} `json:"requestHeader,omitempty"` + ResponseHeader map[string]interface{} `json:"responseHeader,omitempty"` + ResponseMessage string `json:"responseMessage,omitempty"` + StatusCode int `json:"statusCode,omitempty"` + HttpMethod string `json:"httpMethod,omitempty"` + RequestUrl string `json:"requestUrl,omitempty"` +} + +func NewAPIResponse(r *http.Response) *APIResponse { + + response := &APIResponse{Response: r} + return response +} + +func NewAPIResponseWithError(errorMessage string) *APIResponse { + + response := &APIResponse{Message: errorMessage} + return response +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/config/config.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/config/config.go new file mode 100644 index 00000000..08ba59e3 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/config/config.go @@ -0,0 +1,9 @@ +package config + +type Config struct { + AccessKey string `json:"accessKey,string"` + SecretKey string `json:"secretKey,string"` + PoolId string `json:"poolId,string"` + ReadTimeOut int `json:"readTimeOut,int"` + ConnectTimeout int `json:"connectTimeout,int"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/configuration.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/configuration.go new file mode 100644 index 00000000..8eeb5df0 --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/configuration.go @@ -0,0 +1,32 @@ +package ecloudsdkcore + +import ( + "net/http" +) + +type APIKey struct { + Key string + Prefix string +} + +type Configuration struct { + BasePath string `json:"basePath,omitempty"` + Host string `json:"host,omitempty"` + Scheme string `json:"scheme,omitempty"` + DefaultHeader map[string]string `json:"defaultHeader,omitempty"` + UserAgent string `json:"userAgent,omitempty"` + HTTPClient *http.Client +} + +func NewConfiguration() *Configuration { + cfg := &Configuration{ + BasePath: "https://ecloud.10086.cn/", + DefaultHeader: make(map[string]string), + UserAgent: "Ecloud-SDK/1.0.0/go", + } + return cfg +} + +func (c *Configuration) AddDefaultHeader(key string, value string) { + c.DefaultHeader[key] = value +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/go.mod b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/go.mod new file mode 100644 index 00000000..141fa34e --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/go.mod @@ -0,0 +1,3 @@ +module gitlab.ecloud.com/ecloud/ecloudsdkcore + +go 1.23.0 diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/http_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/http_request.go new file mode 100644 index 00000000..e498463d --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/http_request.go @@ -0,0 +1,22 @@ +package ecloudsdkcore + +type HttpRequest struct { + Url string `json:"url,omitempty"` + DefaultUrl string `json:"defaultUrl,omitempty"` + Method string `json:"method,omitempty"` + Action string `json:"action,omitempty"` + Product string `json:"product,omitempty"` + Version string `json:"version,omitempty"` + SdkVersion string `json:"sdkVersion,omitempty"` + Body interface{} `json:"body,omitempty"` + PathParams map[string]interface{} `json:"pathParams,omitempty"` + QueryParams map[string]interface{} `json:"queryParams,omitempty"` + HeaderParams map[string]interface{} `json:"headerParams,omitempty"` +} + +func NewDefaultHttpRequest() *HttpRequest { + return &HttpRequest{ + DefaultUrl: "https://ecloud.10086.cn", + Method: "POST", + } +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/open_api_request.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/open_api_request.go new file mode 100644 index 00000000..a7cb4c0b --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/open_api_request.go @@ -0,0 +1,16 @@ +package ecloudsdkcore + +type OpenApiRequest struct { + Product string `json:"product,omitempty"` + Version string `json:"version,omitempty"` + SdkVersion string `json:"sdkVersion,omitempty"` + Language string `json:"language,omitempty"` + Api string `json:"api,omitempty"` + PoolId string `json:"poolId,omitempty"` + HeaderParameter map[string]interface{} `json:"headerParameter,omitempty"` + PathParameter map[string]interface{} `json:"pathParameter,omitempty"` + QueryParameter map[string]interface{} `json:"queryParameter,omitempty"` + BodyParameter interface{} `json:"bodyParameter,omitempty"` + AccessKey string `json:"accessKey,omitempty"` + SecretKey string `json:"secretKey,omitempty"` +} diff --git a/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/position/http_position.go b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/position/http_position.go new file mode 100644 index 00000000..7c2eec1c --- /dev/null +++ b/internal/pkg/vendors/cmcc-sdk/ecloudsdkcore@v1.0.0/position/http_position.go @@ -0,0 +1,13 @@ +package position + +type Body struct { +} + +type Query struct { +} + +type Path struct { +} + +type Header struct { +} diff --git a/internal/pkg/vendors/edgio-sdk/applications/README.md b/internal/pkg/vendors/edgio-sdk/applications/README.md new file mode 100644 index 00000000..703b245a --- /dev/null +++ b/internal/pkg/vendors/edgio-sdk/applications/README.md @@ -0,0 +1 @@ +From https://github.com/Edgio/terraform-provider-edgio.git diff --git a/internal/pkg/vendors/edgio-sdk/applications/v7/README.md b/internal/pkg/vendors/edgio-sdk/applications/v7/README.md deleted file mode 100644 index fae60236..00000000 --- a/internal/pkg/vendors/edgio-sdk/applications/v7/README.md +++ /dev/null @@ -1,3 +0,0 @@ -```shell -git clone https://github.com/Edgio/terraform-provider-edgio.git -``` diff --git a/ui/public/imgs/providers/cmcccloud.svg b/ui/public/imgs/providers/cmcccloud.svg new file mode 100644 index 00000000..0a44fcfa --- /dev/null +++ b/ui/public/imgs/providers/cmcccloud.svg @@ -0,0 +1 @@ + diff --git a/ui/src/components/access/AccessForm.tsx b/ui/src/components/access/AccessForm.tsx index 44d6ae0c..90bb6ff5 100644 --- a/ui/src/components/access/AccessForm.tsx +++ b/ui/src/components/access/AccessForm.tsx @@ -21,6 +21,7 @@ import AccessFormCacheFlyConfig from "./AccessFormCacheFlyConfig"; import AccessFormCdnflyConfig from "./AccessFormCdnflyConfig"; import AccessFormCloudflareConfig from "./AccessFormCloudflareConfig"; import AccessFormClouDNSConfig from "./AccessFormClouDNSConfig"; +import AccessFormCMCCCloudConfig from "./AccessFormCMCCCloudConfig"; import AccessFormDogeCloudConfig from "./AccessFormDogeCloudConfig"; import AccessFormEdgioConfig from "./AccessFormEdgioConfig"; import AccessFormGcoreConfig from "./AccessFormGcoreConfig"; @@ -120,6 +121,8 @@ const AccessForm = forwardRef(({ className, return ; case ACCESS_PROVIDERS.CLOUDNS: return ; + case ACCESS_PROVIDERS.CMCCCLOUD: + return ; case ACCESS_PROVIDERS.DOGECLOUD: return ; case ACCESS_PROVIDERS.GCORE: diff --git a/ui/src/components/access/AccessFormCMCCCloudConfig.tsx b/ui/src/components/access/AccessFormCMCCCloudConfig.tsx new file mode 100644 index 00000000..9bc6e615 --- /dev/null +++ b/ui/src/components/access/AccessFormCMCCCloudConfig.tsx @@ -0,0 +1,75 @@ +import { useTranslation } from "react-i18next"; +import { Form, type FormInstance, Input } from "antd"; +import { createSchemaFieldRule } from "antd-zod"; +import { z } from "zod"; +import { type AccessConfigForCMCCCloud } from "@/domain/access"; + +type AccessFormCMCCCloudConfigFieldValues = Nullish; + +export type AccessFormCMCCCloudConfigProps = { + form: FormInstance; + formName: string; + disabled?: boolean; + initialValues?: AccessFormCMCCCloudConfigFieldValues; + onValuesChange?: (values: AccessFormCMCCCloudConfigFieldValues) => void; +}; + +const initFormModel = (): AccessFormCMCCCloudConfigFieldValues => { + return { + accessKeyId: "", + accessKeySecret: "", + }; +}; + +const AccessFormCMCCCloudConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange: onValuesChange }: AccessFormCMCCCloudConfigProps) => { + const { t } = useTranslation(); + + const formSchema = z.object({ + accessKeyId: z + .string() + .min(1, t("access.form.cmcccloud_access_key_id.placeholder")) + .max(64, t("common.errmsg.string_max", { max: 64 })) + .trim(), + accessKeySecret: z + .string() + .min(1, t("access.form.cmcccloud_access_key_secret.placeholder")) + .max(64, t("common.errmsg.string_max", { max: 64 })) + .trim(), + }); + const formRule = createSchemaFieldRule(formSchema); + + const handleFormChange = (_: unknown, values: z.infer) => { + onValuesChange?.(values); + }; + + return ( +
+ } + > + + + + } + > + + +
+ ); +}; + +export default AccessFormCMCCCloudConfig; diff --git a/ui/src/domain/access.ts b/ui/src/domain/access.ts index c91e647f..da8739b7 100644 --- a/ui/src/domain/access.ts +++ b/ui/src/domain/access.ts @@ -18,6 +18,7 @@ export interface AccessModel extends BaseModel { | AccessConfigForCdnfly | AccessConfigForCloudflare | AccessConfigForClouDNS + | AccessConfigForCMCCCloud | AccessConfigForDogeCloud | AccessConfigForEdgio | AccessConfigForGcore @@ -105,6 +106,11 @@ export type AccessConfigForClouDNS = { authPassword: string; }; +export type AccessConfigForCMCCCloud = { + accessKeyId: string; + accessKeySecret: string; +}; + export type AccessConfigForDogeCloud = { accessKey: string; secretKey: string; diff --git a/ui/src/domain/provider.ts b/ui/src/domain/provider.ts index 13a82a4c..e99abb5c 100644 --- a/ui/src/domain/provider.ts +++ b/ui/src/domain/provider.ts @@ -16,6 +16,7 @@ export const ACCESS_PROVIDERS = Object.freeze({ CDNFLY: "cdnfly", CLOUDFLARE: "cloudflare", CLOUDNS: "cloudns", + CMCCCLOUD: "cmcccloud", DOGECLOUD: "dogecloud", GCORE: "gcore", GNAME: "gname", @@ -74,6 +75,7 @@ export const accessProvidersMap: Maphttps://www.cloudns.net/wiki/article/42/", + "access.form.cmcccloud_access_key_id.label": "CMCC ECloud AccessKeyId", + "access.form.cmcccloud_access_key_id.placeholder": "Please enter CMCC ECloud AccessKeyId", + "access.form.cmcccloud_access_key_id.tooltip": "For more information, see https://ecloud.10086.cn/op-help-center/doc/article/49739", + "access.form.cmcccloud_access_key_secret.label": "CMCC ECloud AccessKeySecret", + "access.form.cmcccloud_access_key_secret.placeholder": "Please enter CMCC ECloud AccessKeySecret", + "access.form.cmcccloud_access_key_secret.tooltip": "For more information, see https://ecloud.10086.cn/op-help-center/doc/article/49739", "access.form.dogecloud_access_key.label": "Doge Cloud AccessKey", "access.form.dogecloud_access_key.placeholder": "Please enter Doge Cloud AccessKey", "access.form.dogecloud_access_key.tooltip": "For more information, see https://console.dogecloud.com/", diff --git a/ui/src/i18n/locales/zh/nls.access.json b/ui/src/i18n/locales/zh/nls.access.json index c35d65d3..f4648c4d 100644 --- a/ui/src/i18n/locales/zh/nls.access.json +++ b/ui/src/i18n/locales/zh/nls.access.json @@ -100,6 +100,12 @@ "access.form.cloudns_auth_password.label": "ClouDNS API 用户密码", "access.form.cloudns_auth_password.placeholder": "请输入 ClouDNS API 用户密码", "access.form.cloudns_auth_password.tooltip": "这是什么?请参阅 https://www.cloudns.net/wiki/article/42/", + "access.form.cmcccloud_access_key_id.label": "移动云 AccessKeyId", + "access.form.cmcccloud_access_key_id.placeholder": "请输入移动云 AccessKeyId", + "access.form.cmcccloud_access_key_id.tooltip": "这是什么?请参阅 https://ecloud.10086.cn/op-help-center/doc/article/49739", + "access.form.cmcccloud_access_key_secret.label": "移动云 AccessKeySecret", + "access.form.cmcccloud_access_key_secret.placeholder": "请输入移动云 AccessKeySecret", + "access.form.cmcccloud_access_key_secret.tooltip": "这是什么?请参阅 https://ecloud.10086.cn/op-help-center/doc/article/49739", "access.form.dogecloud_access_key.label": "多吉云 AccessKey", "access.form.dogecloud_access_key.placeholder": "请输入多吉云 AccessKey", "access.form.dogecloud_access_key.tooltip": "这是什么?请参阅 https://console.dogecloud.com/",