diff --git a/go.mod b/go.mod index fb2855e40..435e52e67 100644 --- a/go.mod +++ b/go.mod @@ -38,6 +38,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/iam v1.53.10 github.com/aws/aws-sdk-go-v2/service/lightsail v1.54.0 github.com/baidubce/bce-sdk-go v0.9.266 + github.com/byteplus-sdk/byteplus-go-sdk-v2 v1.0.65 github.com/byteplus-sdk/byteplus-sdk-golang v1.0.65 github.com/go-acme/lego/v5 v5.1.0 github.com/go-cmd/cmd v1.4.3 diff --git a/go.sum b/go.sum index 79e924963..568fcd927 100644 --- a/go.sum +++ b/go.sum @@ -257,6 +257,9 @@ github.com/boombuler/barcode v1.1.0 h1:ChaYjBR63fr4LFyGn8E8nt7dBSt3MiU3zMOZqFvVk github.com/boombuler/barcode v1.1.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/buger/goterm v1.0.4 h1:Z9YvGmOih81P0FbVtEYTFF6YsSgxSUKEhf/f9bTMXbY= github.com/buger/goterm v1.0.4/go.mod h1:HiFWV3xnkolgrBV3mY8m0X0Pumt4zg4QhbdOzQtB8tE= +github.com/byteplus-sdk/byteplus-go-sdk-v2 v1.0.65 h1:6qCTwt4bzF7ofeASf+Ja4BDqhGD39uBThQZWFgUbnX4= +github.com/byteplus-sdk/byteplus-go-sdk-v2 v1.0.65/go.mod h1:eqR3bDX3XtdPBcB9vERznOyi0MAcAI1GFAdcRspNMBU= +github.com/byteplus-sdk/byteplus-sdk-golang v1.0.16/go.mod h1:7iCaE+dR9EycrJU0GQyMhptbInLbQhsKXiDKDjNi8Vs= github.com/byteplus-sdk/byteplus-sdk-golang v1.0.65 h1:hmRsVDVU5gP/UdM/PIXTjYRAHWspe8+wUOlPsFJ9Ppg= github.com/byteplus-sdk/byteplus-sdk-golang v1.0.65/go.mod h1:CIL/T2dxgbIA79os+wl0Fq0vCbADTZNIddV6PNYB6DY= github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= diff --git a/internal/certmgmt/deployers/sp_byteplus_certcenter.go b/internal/certmgmt/deployers/sp_byteplus_certcenter.go new file mode 100644 index 000000000..ac135f088 --- /dev/null +++ b/internal/certmgmt/deployers/sp_byteplus_certcenter.go @@ -0,0 +1,27 @@ +package deployers + +import ( + "fmt" + + "github.com/certimate-go/certimate/internal/domain" + "github.com/certimate-go/certimate/pkg/core" + bytepluscertcenter "github.com/certimate-go/certimate/pkg/core/deployer/providers/byteplus-certcenter" + xmaps "github.com/certimate-go/certimate/pkg/utils/maps" +) + +func init() { + Registries.MustRegister(domain.DeploymentProviderTypeBytePlusCertCenter, func(options *ProviderFactoryOptions) (core.Deployer, error) { + credentials := domain.AccessConfigForBytePlus{} + if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil { + return nil, fmt.Errorf("failed to populate provider access config: %w", err) + } + + provider, err := bytepluscertcenter.NewDeployer(&bytepluscertcenter.DeployerConfig{ + AccessKey: credentials.AccessKey, + SecretKey: credentials.SecretKey, + ProjectName: credentials.ProjectName, + Region: xmaps.GetString(options.ProviderExtendedConfig, "region"), + }) + return provider, err + }) +} diff --git a/internal/domain/provider.go b/internal/domain/provider.go index d889a82d5..fc814988d 100644 --- a/internal/domain/provider.go +++ b/internal/domain/provider.go @@ -339,6 +339,7 @@ const ( DeploymentProviderTypeBaotaWAFConsole = DeploymentProviderType(AccessProviderTypeBaotaWAF + "-console") DeploymentProviderTypeBunnyCDN = DeploymentProviderType(AccessProviderTypeBunny + "-cdn") DeploymentProviderTypeBytePlusCDN = DeploymentProviderType(AccessProviderTypeBytePlus + "-cdn") + DeploymentProviderTypeBytePlusCertCenter = DeploymentProviderType(AccessProviderTypeBytePlus + "-certcenter") DeploymentProviderTypeCacheFly = DeploymentProviderType(AccessProviderTypeCacheFly) DeploymentProviderTypeCdnfly = DeploymentProviderType(AccessProviderTypeCdnfly) DeploymentProviderTypeCPanel = DeploymentProviderType(AccessProviderTypeCPanel) diff --git a/pkg/core/certmgr/providers/byteplus-cdn/byteplus_cdn.go b/pkg/core/certmgr/providers/byteplus-cdn/byteplus_cdn.go index 61676647b..6624bd385 100644 --- a/pkg/core/certmgr/providers/byteplus-cdn/byteplus_cdn.go +++ b/pkg/core/certmgr/providers/byteplus-cdn/byteplus_cdn.go @@ -10,7 +10,7 @@ import ( "strings" "time" - bytepluscdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" + bpcdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" "github.com/certimate-go/certimate/pkg/core/certmgr" xcert "github.com/certimate-go/certimate/pkg/utils/cert" @@ -26,7 +26,7 @@ type CertmgrConfig struct { type Certmgr struct { config *CertmgrConfig logger *slog.Logger - sdkClient *bytepluscdn.CDN + sdkClient *bpcdn.CDN } var _ certmgr.Provider = (*Certmgr)(nil) @@ -36,7 +36,7 @@ func NewCertmgr(config *CertmgrConfig) (*Certmgr, error) { return nil, fmt.Errorf("the configuration of the certmgr provider is nil") } - client := bytepluscdn.NewInstance() + client := bpcdn.NewInstance() client.Client.SetAccessKey(config.AccessKey) client.Client.SetSecretKey(config.SecretKey) @@ -73,10 +73,10 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*cert default: } - listCertInfoReq := &bytepluscdn.ListCertInfoRequest{ - PageNum: bytepluscdn.GetInt64Ptr(int64(listCertInfoPageNum)), - PageSize: bytepluscdn.GetInt64Ptr(int64(listCertInfoPageSize)), - Source: bytepluscdn.GetStrPtr("cert_center"), + listCertInfoReq := &bpcdn.ListCertInfoRequest{ + PageNum: bpcdn.GetInt64Ptr(int64(listCertInfoPageNum)), + PageSize: bpcdn.GetInt64Ptr(int64(listCertInfoPageSize)), + Source: bpcdn.GetStrPtr("cert_center"), } listCertInfoResp, err := c.sdkClient.ListCertInfo(listCertInfoReq) c.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) @@ -117,11 +117,11 @@ func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*cert // 上传新证书 // REF: https://docs.byteplus.com/en/docs/byteplus-cdn/reference-addcertificate - addCertificateReq := &bytepluscdn.AddCertificateRequest{ + addCertificateReq := &bpcdn.AddCertificateRequest{ Certificate: certPEM, PrivateKey: privkeyPEM, - Source: bytepluscdn.GetStrPtr("cert_center"), - Desc: bytepluscdn.GetStrPtr(certName), + Source: bpcdn.GetStrPtr("cert_center"), + Desc: bpcdn.GetStrPtr(certName), } addCertificateResp, err := c.sdkClient.AddCertificate(addCertificateReq) c.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateReq), slog.Any("response", addCertificateResp)) diff --git a/pkg/core/certmgr/providers/byteplus-certcenter/byteplus_certcenter.go b/pkg/core/certmgr/providers/byteplus-certcenter/byteplus_certcenter.go new file mode 100644 index 000000000..8019037ac --- /dev/null +++ b/pkg/core/certmgr/providers/byteplus-certcenter/byteplus_certcenter.go @@ -0,0 +1,114 @@ +package bytepluscertcenter + +import ( + "context" + "fmt" + "log/slog" + + bp "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus" + bpsesion "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/session" + "github.com/samber/lo" + + "github.com/certimate-go/certimate/pkg/core/certmgr" + bpcertificateservice "github.com/certimate-go/certimate/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice" +) + +type CertmgrConfig struct { + // BytePlus AccessKey。 + AccessKey string `json:"accessKey"` + // BytePlus SecretKey。 + SecretKey string `json:"secretKey"` + // BytePlus 项目名称。 + ProjectName string `json:"projectName,omitempty"` + // BytePlus 地域。 + Region string `json:"region"` +} + +type Certmgr struct { + config *CertmgrConfig + logger *slog.Logger + sdkClient *bpcertificateservice.CERTIFICATESERVICE +} + +var _ certmgr.Provider = (*Certmgr)(nil) + +func NewCertmgr(config *CertmgrConfig) (*Certmgr, error) { + if config == nil { + return nil, fmt.Errorf("the configuration of the certmgr provider is nil") + } + + client, err := createSDKClient(config.AccessKey, config.SecretKey, config.Region) + if err != nil { + return nil, fmt.Errorf("could not create client: %w", err) + } + + return &Certmgr{ + config: config, + logger: slog.Default(), + sdkClient: client, + }, nil +} + +func (c *Certmgr) SetLogger(logger *slog.Logger) { + if logger == nil { + c.logger = slog.New(slog.DiscardHandler) + } else { + c.logger = logger + } +} + +func (c *Certmgr) Upload(ctx context.Context, certPEM, privkeyPEM string) (*certmgr.UploadResult, error) { + // 上传证书 + // REF: https://docs.byteplus.com/en/docs/byteplus-certificate-center/reference-uploadcertificate + uploadCertificateReq := &bpcertificateservice.UploadCertificateInput{ + ProjectName: lo.EmptyableToPtr(c.config.ProjectName), + CertificateInfo: &bpcertificateservice.CertificateInfoForUploadCertificateInput{ + CertificateChain: bp.String(certPEM), + PrivateKey: bp.String(privkeyPEM), + }, + Repeatable: bp.Bool(false), + } + uploadCertificateResp, err := c.sdkClient.UploadCertificateWithContext(ctx, uploadCertificateReq) + c.logger.Debug("sdk request 'certificateservice.UploadCertificate'", slog.Any("request", uploadCertificateReq), slog.Any("response", uploadCertificateResp)) + if err != nil { + return nil, fmt.Errorf("failed to execute sdk request 'certificateservice.UploadCertificate': %w", err) + } + + var sslId string + if uploadCertificateResp.InstanceId != nil && *uploadCertificateResp.InstanceId != "" { + sslId = *uploadCertificateResp.InstanceId + } + if uploadCertificateResp.RepeatId != nil && *uploadCertificateResp.RepeatId != "" { + sslId = *uploadCertificateResp.RepeatId + } + + if sslId == "" { + return nil, fmt.Errorf("received empty certificate id, both `InstanceId` and `RepeatId` are empty") + } + + return &certmgr.UploadResult{ + CertId: sslId, + }, nil +} + +func (c *Certmgr) Replace(ctx context.Context, certIdOrName string, certPEM, privkeyPEM string) (*certmgr.ReplaceResult, error) { + return nil, certmgr.ErrUnsupported +} + +func createSDKClient(accessKey, secretKey, region string) (*bpcertificateservice.CERTIFICATESERVICE, error) { + if region == "" { + region = "ap-singapore-1" // 证书中心默认区域:新加坡 + } + + config := bp.NewConfig(). + WithAkSk(accessKey, secretKey). + WithRegion(region) + + session, err := bpsesion.NewSession(config) + if err != nil { + return nil, err + } + + client := bpcertificateservice.New(session, config) + return client, nil +} diff --git a/pkg/core/certmgr/providers/byteplus-certcenter/byteplus_certcenter_test.go b/pkg/core/certmgr/providers/byteplus-certcenter/byteplus_certcenter_test.go new file mode 100644 index 000000000..9d4d10716 --- /dev/null +++ b/pkg/core/certmgr/providers/byteplus-certcenter/byteplus_certcenter_test.go @@ -0,0 +1,49 @@ +package bytepluscertcenter_test + +import ( + "testing" + + "github.com/certimate-go/certimate/pkg/core/certmgr/internal/tester" + impl "github.com/certimate-go/certimate/pkg/core/certmgr/providers/byteplus-certcenter" +) + +var ( + fp = tester.Args("BYTEPLUSCERTCENTER_") + fTestCertPath string + fTestKeyPath string + fAccessKey string + fSecretKey string +) + +func init() { + fp.DefineString(&fTestCertPath, "TESTCERTPATH") + fp.DefineString(&fTestKeyPath, "TESTKEYPATH") + fp.DefineString(&fAccessKey, "ACCESSKEY") + fp.DefineString(&fSecretKey, "SECRETKEY") +} + +/* +Shell command to run this test: + + go test -v ./byteplus_certcenter_test.go -args \ + --BYTEPLUSCERTCENTER_TESTCERTPATH="/path/to/your-test-cert.pem" \ + --BYTEPLUSCERTCENTER_TESTKEYPATH="/path/to/your-test-key.pem" \ + --BYTEPLUSCERTCENTER_ACCESSKEY="your-access-key" \ + --BYTEPLUSCERTCENTER_SECRETKEY="your-secret-key" +*/ +func TestProvider(t *testing.T) { + fp.Parse() + + t.Run("Upload", func(t *testing.T) { + provider, err := impl.NewCertmgr(&impl.CertmgrConfig{ + AccessKey: fAccessKey, + SecretKey: fSecretKey, + }) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + tester.TestUpload(t, provider, tester.TestUploadArgs{CertPath: fTestCertPath, KeyPath: fTestKeyPath}) + }) +} diff --git a/pkg/core/deployer/providers/byteplus-certcenter/byteplus_certcenter.go b/pkg/core/deployer/providers/byteplus-certcenter/byteplus_certcenter.go new file mode 100644 index 000000000..a64239a58 --- /dev/null +++ b/pkg/core/deployer/providers/byteplus-certcenter/byteplus_certcenter.go @@ -0,0 +1,74 @@ +package bytepluscertcenter + +import ( + "context" + "fmt" + "log/slog" + + "github.com/certimate-go/certimate/pkg/core/certmgr" + certmgrimpl "github.com/certimate-go/certimate/pkg/core/certmgr/providers/byteplus-certcenter" + "github.com/certimate-go/certimate/pkg/core/deployer" +) + +type DeployerConfig struct { + // BytePlus AccessKey。 + AccessKey string `json:"accessKey"` + // BytePlus SecretKey。 + SecretKey string `json:"secretKey"` + // BytePlus 项目名称。 + ProjectName string `json:"projectName,omitempty"` + // BytePlus 地域。 + Region string `json:"region"` +} + +type Deployer struct { + config *DeployerConfig + logger *slog.Logger + sdkCertmgr certmgr.Provider +} + +var _ deployer.Provider = (*Deployer)(nil) + +func NewDeployer(config *DeployerConfig) (*Deployer, error) { + if config == nil { + return nil, fmt.Errorf("the configuration of the deployer provider is nil") + } + + pcertmgr, err := certmgrimpl.NewCertmgr(&certmgrimpl.CertmgrConfig{ + AccessKey: config.AccessKey, + SecretKey: config.SecretKey, + ProjectName: config.ProjectName, + Region: config.Region, + }) + if err != nil { + return nil, fmt.Errorf("could not create certmgr: %w", err) + } + + return &Deployer{ + config: config, + logger: slog.Default(), + sdkCertmgr: pcertmgr, + }, nil +} + +func (d *Deployer) SetLogger(logger *slog.Logger) { + if logger == nil { + d.logger = slog.New(slog.DiscardHandler) + } else { + d.logger = logger + } + + d.sdkCertmgr.SetLogger(logger) +} + +func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*deployer.DeployResult, error) { + // 上传证书 + upres, err := d.sdkCertmgr.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + return &deployer.DeployResult{}, nil +} diff --git a/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice/api_upload_certificate.go b/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice/api_upload_certificate.go new file mode 100644 index 000000000..998cbe424 --- /dev/null +++ b/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice/api_upload_certificate.go @@ -0,0 +1,110 @@ +package certificateservice + +import ( + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/byteplusutil" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/request" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/response" +) + +const opUploadCertificate = "UploadCertificate" + +func (c *CERTIFICATESERVICE) UploadCertificateRequest(input *UploadCertificateInput) (req *request.Request, output *UploadCertificateOutput) { + op := &request.Operation{ + Name: opUploadCertificate, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &UploadCertificateInput{} + } + + output = &UploadCertificateOutput{} + req = c.newRequest(op, input, output) + + req.HTTPRequest.Header.Set("Content-Type", "application/json; charset=utf-8") + + return +} + +func (c *CERTIFICATESERVICE) UploadCertificateWithContext(ctx byteplus.Context, input *UploadCertificateInput, opts ...request.Option) (*UploadCertificateOutput, error) { + req, out := c.UploadCertificateRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +type UploadCertificateInput struct { + _ struct{} `type:"structure" json:",omitempty"` + + CertificateInfo *CertificateInfoForUploadCertificateInput `type:"structure" json:",omitempty"` + + NoVerifyAndFixChain *bool `type:"boolean" json:",omitempty"` + + ProjectName *string `type:"string" json:",omitempty"` + + Repeatable *bool `type:"boolean" json:",omitempty"` + + Tag *string `type:"string" json:",omitempty"` + + Tags []*TagForUploadCertificateInput `type:"list" json:",omitempty"` +} + +func (s UploadCertificateInput) String() string { + return byteplusutil.Prettify(s) +} + +func (s UploadCertificateInput) GoString() string { + return s.String() +} + +type UploadCertificateOutput struct { + _ struct{} `type:"structure" json:",omitempty"` + + Metadata *response.ResponseMetadata + + InstanceId *string `type:"string" json:",omitempty"` + + RepeatId *string `type:"string" json:",omitempty"` +} + +func (s UploadCertificateOutput) String() string { + return byteplusutil.Prettify(s) +} + +func (s UploadCertificateOutput) GoString() string { + return s.String() +} + +type CertificateInfoForUploadCertificateInput struct { + _ struct{} `type:"structure" json:",omitempty"` + + CertificateChain *string `type:"string" json:",omitempty"` + + PrivateKey *string `type:"string" json:",omitempty"` +} + +func (s CertificateInfoForUploadCertificateInput) String() string { + return byteplusutil.Prettify(s) +} + +func (s CertificateInfoForUploadCertificateInput) GoString() string { + return s.String() +} + +type TagForUploadCertificateInput struct { + _ struct{} `type:"structure" json:",omitempty"` + + Key *string `type:"string" json:",omitempty"` + + Value *string `type:"string" json:",omitempty"` +} + +func (s TagForUploadCertificateInput) String() string { + return byteplusutil.Prettify(s) +} + +func (s TagForUploadCertificateInput) GoString() string { + return s.String() +} diff --git a/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice/service_certificateservice.go b/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice/service_certificateservice.go new file mode 100644 index 000000000..520566ab2 --- /dev/null +++ b/pkg/sdk3rd-trimmed/github.com/byteplus-sdk/byteplus-go-sdk-v2/service/certificateservice/service_certificateservice.go @@ -0,0 +1,59 @@ +package certificateservice + +import ( + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/byteplusquery" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/client" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/client/metadata" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/corehandlers" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/request" + "github.com/byteplus-sdk/byteplus-go-sdk-v2/byteplus/signer/byteplussign" +) + +type CERTIFICATESERVICE struct { + *client.Client +} + +const ( + ServiceName = "certificate_service" + EndpointsID = ServiceName + ServiceID = "certificate_service" +) + +func New(p client.ConfigProvider, cfgs ...*byteplus.Config) *CERTIFICATESERVICE { + c := p.ClientConfig(EndpointsID, cfgs...) + return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName) +} + +func newClient(cfg byteplus.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *CERTIFICATESERVICE { + svc := &CERTIFICATESERVICE{ + Client: client.New( + cfg, + metadata.ClientInfo{ + ServiceName: ServiceName, + ServiceID: ServiceID, + SigningName: signingName, + SigningRegion: signingRegion, + Endpoint: endpoint, + APIVersion: "2021-06-01", + }, + handlers, + ), + } + + svc.Handlers.Build.PushBackNamed(corehandlers.SDKVersionUserAgentHandler) + svc.Handlers.Build.PushBackNamed(corehandlers.AddHostExecEnvUserAgentHandler) + svc.Handlers.Sign.PushBackNamed(byteplussign.SignRequestHandler) + svc.Handlers.Build.PushBackNamed(byteplusquery.BuildHandler) + svc.Handlers.Unmarshal.PushBackNamed(byteplusquery.UnmarshalHandler) + svc.Handlers.UnmarshalMeta.PushBackNamed(byteplusquery.UnmarshalMetaHandler) + svc.Handlers.UnmarshalError.PushBackNamed(byteplusquery.UnmarshalErrorHandler) + + return svc +} + +func (c *CERTIFICATESERVICE) newRequest(op *request.Operation, params, data interface{}) *request.Request { + req := c.NewRequest(op, params, data) + + return req +} diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx index 546a4d49c..5aaa4cd48 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx @@ -38,6 +38,7 @@ import BizDeployNodeConfigFieldsProviderBaotaWAF from "./BizDeployNodeConfigFiel import BizDeployNodeConfigFieldsProviderBaotaWAFConsole from "./BizDeployNodeConfigFieldsProviderBaotaWAFConsole"; import BizDeployNodeConfigFieldsProviderBunnyCDN from "./BizDeployNodeConfigFieldsProviderBunnyCDN"; import BizDeployNodeConfigFieldsProviderBytePlusCDN from "./BizDeployNodeConfigFieldsProviderBytePlusCDN"; +import BizDeployNodeConfigFieldsProviderBytePlusCertCenter from "./BizDeployNodeConfigFieldsProviderBytePlusCertCenter"; import BizDeployNodeConfigFieldsProviderCdnfly from "./BizDeployNodeConfigFieldsProviderCdnfly"; import BizDeployNodeConfigFieldsProviderCPanel from "./BizDeployNodeConfigFieldsProviderCPanel"; import BizDeployNodeConfigFieldsProviderCTCCCloudAO from "./BizDeployNodeConfigFieldsProviderCTCCCloudAO"; @@ -166,6 +167,7 @@ const providerComponentMap: Partial { + const { i18n, t } = useTranslation(); + + const { parentNamePath } = useFormNestedFieldsContext(); + const formSchema = z.object({ + [parentNamePath]: getSchema({ i18n }), + }); + const formRule = createSchemaFieldRule(formSchema); + const initialValues = getInitialValues(); + + return ( + <> + + + + + ); +}; + +const getInitialValues = (): Nullish>> => { + return { + region: "ap-singapore-1", + }; +}; + +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { + const { t: _ } = i18n; + + return z.object({ + region: z.string().nonempty(), + }); +}; + +const _default = Object.assign(BizDeployNodeConfigFieldsProviderBytePlusCertCenter, { + getInitialValues, + getSchema, +}); + +export default _default; diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderVolcEngineCertCenter.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderVolcEngineCertCenter.tsx index cd8f5ac9c..aa9ad7ceb 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderVolcEngineCertCenter.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderVolcEngineCertCenter.tsx @@ -31,7 +31,7 @@ const BizDeployNodeConfigFieldsProviderVolcEngineCertCenter = () => { const getInitialValues = (): Nullish>> => { return { - region: "", + region: "cn-beijing", }; }; diff --git a/ui/src/domain/provider.ts b/ui/src/domain/provider.ts index 93321162a..976b66a2a 100644 --- a/ui/src/domain/provider.ts +++ b/ui/src/domain/provider.ts @@ -622,6 +622,7 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({ BAOTAWAF_CONSOLE: `${ACCESS_PROVIDERS.BAOTAWAF}-console`, BUNNY_CDN: `${ACCESS_PROVIDERS.BUNNY}-cdn`, BYTEPLUS_CDN: `${ACCESS_PROVIDERS.BYTEPLUS}-cdn`, + BYTEPLUS_CERTCENTER: `${ACCESS_PROVIDERS.BYTEPLUS}-certcenter`, CACHEFLY: `${ACCESS_PROVIDERS.CACHEFLY}`, CDNFLY: `${ACCESS_PROVIDERS.CDNFLY}`, CPANEL: `${ACCESS_PROVIDERS.CPANEL}`, @@ -825,6 +826,7 @@ export const deploymentProvidersMap: Map