mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-01 15:39:35 +08:00
refactor(provider): normalize provider names for 1panel, baotapanel, baotapanelgo, baotawaf, cdnfly, cpanel, netlify, ratpanel, safeline
This commit is contained in:
+3
-3
@@ -5,18 +5,18 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
opsite "github.com/certimate-go/certimate/pkg/core/deployer/providers/1panel-site"
|
||||
onepanel "github.com/certimate-go/certimate/pkg/core/deployer/providers/1panel"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderType1PanelSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderType1Panel, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigFor1Panel{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := opsite.NewDeployer(&opsite.DeployerConfig{
|
||||
provider, err := onepanel.NewDeployer(&onepanel.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
ApiVersion: credentials.ApiVersion,
|
||||
ApiKey: credentials.ApiKey,
|
||||
+3
-3
@@ -8,18 +8,18 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
baotapanelsite "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanel-site"
|
||||
baotapanel "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanel"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeBaotaPanelSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeBaotaPanel, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForBaotaPanel{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := baotapanelsite.NewDeployer(&baotapanelsite.DeployerConfig{
|
||||
provider, err := baotapanel.NewDeployer(&baotapanel.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
ApiKey: credentials.ApiKey,
|
||||
AllowInsecureConnections: credentials.AllowInsecureConnections,
|
||||
+3
-3
@@ -8,18 +8,18 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
baotapanelgosite "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanelgo-site"
|
||||
baotapanelgo "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanelgo"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeBaotaPanelGoSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeBaotaPanelGo, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForBaotaPanelGo{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := baotapanelgosite.NewDeployer(&baotapanelgosite.DeployerConfig{
|
||||
provider, err := baotapanelgo.NewDeployer(&baotapanelgo.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
ApiKey: credentials.ApiKey,
|
||||
AllowInsecureConnections: credentials.AllowInsecureConnections,
|
||||
+3
-3
@@ -8,18 +8,18 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
baotawafsite "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotawaf-site"
|
||||
baotawaf "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotawaf"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeBaotaWAFSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeBaotaWAF, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForBaotaWAF{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := baotawafsite.NewDeployer(&baotawafsite.DeployerConfig{
|
||||
provider, err := baotawaf.NewDeployer(&baotawaf.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
ApiKey: credentials.ApiKey,
|
||||
AllowInsecureConnections: credentials.AllowInsecureConnections,
|
||||
+4
-3
@@ -5,22 +5,23 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
opsite "github.com/certimate-go/certimate/pkg/core/deployer/providers/cpanel-site"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer/providers/cpanel"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeCPanelSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeCPanel, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForCPanel{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := opsite.NewDeployer(&opsite.DeployerConfig{
|
||||
provider, err := cpanel.NewDeployer(&cpanel.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
Username: credentials.Username,
|
||||
ApiToken: credentials.ApiToken,
|
||||
AllowInsecureConnections: credentials.AllowInsecureConnections,
|
||||
ResourceType: xmaps.GetString(options.ProviderExtendedConfig, "resourceType"),
|
||||
Domain: xmaps.GetString(options.ProviderExtendedConfig, "domain"),
|
||||
})
|
||||
return provider, err
|
||||
+6
-5
@@ -5,20 +5,21 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
netlifysite "github.com/certimate-go/certimate/pkg/core/deployer/providers/netlify-site"
|
||||
netlify "github.com/certimate-go/certimate/pkg/core/deployer/providers/netlify"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeNetlifySite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeNetlify, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForNetlify{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := netlifysite.NewDeployer(&netlifysite.DeployerConfig{
|
||||
ApiToken: credentials.ApiToken,
|
||||
SiteId: xmaps.GetString(options.ProviderExtendedConfig, "siteId"),
|
||||
provider, err := netlify.NewDeployer(&netlify.DeployerConfig{
|
||||
ApiToken: credentials.ApiToken,
|
||||
ResourceType: xmaps.GetString(options.ProviderExtendedConfig, "resourceType"),
|
||||
SiteId: xmaps.GetString(options.ProviderExtendedConfig, "siteId"),
|
||||
})
|
||||
return provider, err
|
||||
})
|
||||
+4
-3
@@ -8,22 +8,23 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
ratpanelsite "github.com/certimate-go/certimate/pkg/core/deployer/providers/ratpanel-site"
|
||||
ratpanel "github.com/certimate-go/certimate/pkg/core/deployer/providers/ratpanel"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeRatPanelSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeRatPanel, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForRatPanel{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := ratpanelsite.NewDeployer(&ratpanelsite.DeployerConfig{
|
||||
provider, err := ratpanel.NewDeployer(&ratpanel.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
AccessTokenId: credentials.AccessTokenId,
|
||||
AccessToken: credentials.AccessToken,
|
||||
AllowInsecureConnections: credentials.AllowInsecureConnections,
|
||||
ResourceType: xmaps.GetString(options.ProviderExtendedConfig, "resourceType"),
|
||||
SiteNames: lo.Filter(strings.Split(xmaps.GetString(options.ProviderExtendedConfig, "siteNames"), ";"), func(s string, _ int) bool { return s != "" }),
|
||||
})
|
||||
return provider, err
|
||||
+3
-3
@@ -5,18 +5,18 @@ import (
|
||||
|
||||
"github.com/certimate-go/certimate/internal/domain"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer"
|
||||
safelinesite "github.com/certimate-go/certimate/pkg/core/deployer/providers/safeline-site"
|
||||
"github.com/certimate-go/certimate/pkg/core/deployer/providers/safeline"
|
||||
xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeSafeLineSite, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
Registries.MustRegister(domain.DeploymentProviderTypeSafeLine, func(options *ProviderFactoryOptions) (deployer.Provider, error) {
|
||||
credentials := domain.AccessConfigForSafeLine{}
|
||||
if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
|
||||
return nil, fmt.Errorf("failed to populate provider access config: %w", err)
|
||||
}
|
||||
|
||||
provider, err := safelinesite.NewDeployer(&safelinesite.DeployerConfig{
|
||||
provider, err := safeline.NewDeployer(&safeline.DeployerConfig{
|
||||
ServerUrl: credentials.ServerUrl,
|
||||
ApiToken: credentials.ApiToken,
|
||||
AllowInsecureConnections: credentials.AllowInsecureConnections,
|
||||
@@ -252,8 +252,8 @@ type DeploymentProviderType string
|
||||
NOTICE: If you add new constant, please keep ASCII order.
|
||||
*/
|
||||
const (
|
||||
DeploymentProviderType1Panel = DeploymentProviderType(AccessProviderType1Panel)
|
||||
DeploymentProviderType1PanelConsole = DeploymentProviderType(AccessProviderType1Panel + "-console")
|
||||
DeploymentProviderType1PanelSite = DeploymentProviderType(AccessProviderType1Panel + "-site")
|
||||
DeploymentProviderTypeAliyunALB = DeploymentProviderType(AccessProviderTypeAliyun + "-alb")
|
||||
DeploymentProviderTypeAliyunAPIGW = DeploymentProviderType(AccessProviderTypeAliyun + "-apigw")
|
||||
DeploymentProviderTypeAliyunCAS = DeploymentProviderType(AccessProviderTypeAliyun + "-cas")
|
||||
@@ -280,17 +280,17 @@ const (
|
||||
DeploymentProviderTypeBaiduCloudCDN = DeploymentProviderType(AccessProviderTypeBaiduCloud + "-cdn")
|
||||
DeploymentProviderTypeBaiduCloudCert = DeploymentProviderType(AccessProviderTypeBaiduCloud + "-cert")
|
||||
DeploymentProviderTypeBaishanCDN = DeploymentProviderType(AccessProviderTypeBaishan + "-cdn")
|
||||
DeploymentProviderTypeBaotaPanel = DeploymentProviderType(AccessProviderTypeBaotaPanel)
|
||||
DeploymentProviderTypeBaotaPanelConsole = DeploymentProviderType(AccessProviderTypeBaotaPanel + "-console")
|
||||
DeploymentProviderTypeBaotaPanelSite = DeploymentProviderType(AccessProviderTypeBaotaPanel + "-site")
|
||||
DeploymentProviderTypeBaotaPanelGo = DeploymentProviderType(AccessProviderTypeBaotaPanelGo)
|
||||
DeploymentProviderTypeBaotaPanelGoConsole = DeploymentProviderType(AccessProviderTypeBaotaPanelGo + "-console")
|
||||
DeploymentProviderTypeBaotaPanelGoSite = DeploymentProviderType(AccessProviderTypeBaotaPanelGo + "-site")
|
||||
DeploymentProviderTypeBaotaWAF = DeploymentProviderType(AccessProviderTypeBaotaWAF)
|
||||
DeploymentProviderTypeBaotaWAFConsole = DeploymentProviderType(AccessProviderTypeBaotaWAF + "-console")
|
||||
DeploymentProviderTypeBaotaWAFSite = DeploymentProviderType(AccessProviderTypeBaotaWAF + "-site")
|
||||
DeploymentProviderTypeBunnyCDN = DeploymentProviderType(AccessProviderTypeBunny + "-cdn")
|
||||
DeploymentProviderTypeBytePlusCDN = DeploymentProviderType(AccessProviderTypeBytePlus + "-cdn")
|
||||
DeploymentProviderTypeCacheFly = DeploymentProviderType(AccessProviderTypeCacheFly)
|
||||
DeploymentProviderTypeCdnfly = DeploymentProviderType(AccessProviderTypeCdnfly)
|
||||
DeploymentProviderTypeCPanelSite = DeploymentProviderType(AccessProviderTypeCPanel + "-site")
|
||||
DeploymentProviderTypeCPanel = DeploymentProviderType(AccessProviderTypeCPanel)
|
||||
DeploymentProviderTypeCTCCCloudAO = DeploymentProviderType(AccessProviderTypeCTCCCloud + "-ao")
|
||||
DeploymentProviderTypeCTCCCloudCDN = DeploymentProviderType(AccessProviderTypeCTCCCloud + "-cdn")
|
||||
DeploymentProviderTypeCTCCCloudCMS = DeploymentProviderType(AccessProviderTypeCTCCCloud + "-cms")
|
||||
@@ -318,15 +318,15 @@ const (
|
||||
DeploymentProviderTypeLeCDN = DeploymentProviderType(AccessProviderTypeLeCDN)
|
||||
DeploymentProviderTypeLocal = DeploymentProviderType(AccessProviderTypeLocal)
|
||||
DeploymentProviderTypeMohuaMVH = DeploymentProviderType(AccessProviderTypeMohua + "-mvh")
|
||||
DeploymentProviderTypeNetlifySite = DeploymentProviderType(AccessProviderTypeNetlify + "-site")
|
||||
DeploymentProviderTypeNetlify = DeploymentProviderType(AccessProviderTypeNetlify)
|
||||
DeploymentProviderTypeProxmoxVE = DeploymentProviderType(AccessProviderTypeProxmoxVE)
|
||||
DeploymentProviderTypeQiniuCDN = DeploymentProviderType(AccessProviderTypeQiniu + "-cdn")
|
||||
DeploymentProviderTypeQiniuKodo = DeploymentProviderType(AccessProviderTypeQiniu + "-kodo")
|
||||
DeploymentProviderTypeQiniuPili = DeploymentProviderType(AccessProviderTypeQiniu + "-pili")
|
||||
DeploymentProviderTypeRainYunRCDN = DeploymentProviderType(AccessProviderTypeRainYun + "-rcdn")
|
||||
DeploymentProviderTypeRatPanel = DeploymentProviderType(AccessProviderTypeRatPanel)
|
||||
DeploymentProviderTypeRatPanelConsole = DeploymentProviderType(AccessProviderTypeRatPanel + "-console")
|
||||
DeploymentProviderTypeRatPanelSite = DeploymentProviderType(AccessProviderTypeRatPanel + "-site")
|
||||
DeploymentProviderTypeSafeLineSite = DeploymentProviderType(AccessProviderTypeSafeLine + "-site")
|
||||
DeploymentProviderTypeSafeLine = DeploymentProviderType(AccessProviderTypeSafeLine)
|
||||
DeploymentProviderTypeSSH = DeploymentProviderType(AccessProviderTypeSSH)
|
||||
DeploymentProviderTypeTencentCloudCDN = DeploymentProviderType(AccessProviderTypeTencentCloud + "-cdn")
|
||||
DeploymentProviderTypeTencentCloudCLB = DeploymentProviderType(AccessProviderTypeTencentCloud + "-clb")
|
||||
|
||||
@@ -0,0 +1,261 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"github.com/go-viper/mapstructure/v2"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
m "github.com/pocketbase/pocketbase/migrations"
|
||||
)
|
||||
|
||||
func init() {
|
||||
m.Register(func(app core.App) error {
|
||||
tracer := NewTracer("v0.4.13")
|
||||
tracer.Printf("go ...")
|
||||
|
||||
// adapt to new workflow data structure
|
||||
{
|
||||
walker := &mWorkflowGraphWalker{}
|
||||
walker.Define(func(node *mWorkflowNode) (_changed bool, _err error) {
|
||||
_changed = false
|
||||
_err = nil
|
||||
|
||||
if node.Type != "bizDeploy" {
|
||||
return
|
||||
}
|
||||
|
||||
if node.Data == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if _, ok := node.Data["config"]; ok {
|
||||
nodeCfg := node.Data["config"].(map[string]any)
|
||||
|
||||
provider := nodeCfg["provider"]
|
||||
switch provider {
|
||||
case "1panel-site":
|
||||
{
|
||||
nodeCfg["provider"] = "1panel"
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "baotapanel-site":
|
||||
{
|
||||
nodeCfg["provider"] = "baotapanel"
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "baotapanelgo-site":
|
||||
{
|
||||
nodeCfg["provider"] = "baotapanelgo"
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "baotawaf-site":
|
||||
{
|
||||
nodeCfg["provider"] = "baotawaf"
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "cdnfly":
|
||||
{
|
||||
if nodeCfg["providerConfig"] != nil {
|
||||
providerCfg := nodeCfg["providerConfig"].(map[string]any)
|
||||
if providerCfg["resourceType"] == "site" {
|
||||
providerCfg["resourceType"] = "website"
|
||||
nodeCfg["providerConfig"] = providerCfg
|
||||
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case "cpanel-site":
|
||||
{
|
||||
if nodeCfg["providerConfig"] != nil {
|
||||
providerCfg := nodeCfg["providerConfig"].(map[string]any)
|
||||
providerCfg["resourceType"] = "website"
|
||||
nodeCfg["providerConfig"] = providerCfg
|
||||
}
|
||||
|
||||
nodeCfg["provider"] = "cpanel"
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "netlify-site":
|
||||
{
|
||||
if nodeCfg["providerConfig"] != nil {
|
||||
providerCfg := nodeCfg["providerConfig"].(map[string]any)
|
||||
providerCfg["resourceType"] = "website"
|
||||
nodeCfg["providerConfig"] = providerCfg
|
||||
}
|
||||
|
||||
nodeCfg["provider"] = "netlify"
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "ratpanel-site":
|
||||
{
|
||||
if nodeCfg["providerConfig"] != nil {
|
||||
providerCfg := nodeCfg["providerConfig"].(map[string]any)
|
||||
providerCfg["resourceType"] = "website"
|
||||
nodeCfg["providerConfig"] = providerCfg
|
||||
}
|
||||
|
||||
nodeCfg["provider"] = "ratpanel"
|
||||
node.Data["config"] = nodeCfg
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
|
||||
case "safeline-site":
|
||||
{
|
||||
nodeCfg["provider"] = "safeline"
|
||||
_changed = true
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
})
|
||||
|
||||
// update collection `workflow`
|
||||
// - migrate field `graphDraft` / `graphContent`
|
||||
{
|
||||
collection, err := app.FindCollectionByNameOrId("tovyif5ax6j62ur")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
records, err := app.FindAllRecords(collection)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, record := range records {
|
||||
changed := false
|
||||
|
||||
if record.GetRaw("graphDraft") != nil {
|
||||
graph := make(map[string]any)
|
||||
if err := record.UnmarshalJSONField("graphDraft", &graph); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, ok := graph["nodes"]; ok {
|
||||
nodes := make([]*mWorkflowNode, 0)
|
||||
if err := mapstructure.Decode(graph["nodes"], &nodes); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
nodesChanged, err := walker.Visit(nodes)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if nodesChanged {
|
||||
graph["nodes"] = nodes
|
||||
record.Set("graphDraft", graph)
|
||||
changed = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if record.GetRaw("graphContent") != nil {
|
||||
graph := make(map[string]any)
|
||||
if err := record.UnmarshalJSONField("graphContent", &graph); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, ok := graph["nodes"]; ok {
|
||||
nodes := make([]*mWorkflowNode, 0)
|
||||
if err := mapstructure.Decode(graph["nodes"], &nodes); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
nodesChanged, err := walker.Visit(nodes)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if nodesChanged {
|
||||
graph["nodes"] = nodes
|
||||
record.Set("graphContent", graph)
|
||||
changed = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if changed {
|
||||
if err := app.Save(record); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tracer.Printf("record #%s in collection '%s' updated", record.Id, collection.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// update collection `workflow_run`
|
||||
// - migrate field `graph`
|
||||
{
|
||||
collection, err := app.FindCollectionByNameOrId("qjp8lygssgwyqyz")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
records, err := app.FindAllRecords(collection)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, record := range records {
|
||||
changed := false
|
||||
|
||||
if record.GetRaw("graph") != nil {
|
||||
graph := make(map[string]any)
|
||||
if err := record.UnmarshalJSONField("graph", &graph); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, ok := graph["nodes"]; ok {
|
||||
nodes := make([]*mWorkflowNode, 0)
|
||||
if err := mapstructure.Decode(graph["nodes"], &nodes); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
nodesChanged, err := walker.Visit(nodes)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if nodesChanged {
|
||||
graph["nodes"] = nodes
|
||||
record.Set("graph", graph)
|
||||
changed = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if changed {
|
||||
if err := app.Save(record); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tracer.Printf("record #%s in collection '%s' updated", record.Id, collection.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tracer.Printf("done")
|
||||
return nil
|
||||
}, func(app core.App) error {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package onepanelsite
|
||||
package onepanel
|
||||
|
||||
import (
|
||||
"context"
|
||||
+9
-9
@@ -1,4 +1,4 @@
|
||||
package onepanelsite_test
|
||||
package onepanel_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/1panel-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/1panel"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -34,13 +34,13 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./1panel_site_test.go -args \
|
||||
--1PANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--1PANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--1PANELSITE_SERVERURL="http://127.0.0.1:20410" \
|
||||
--1PANELSITE_APIVERSION="v1" \
|
||||
--1PANELSITE_APIKEY="your-api-key" \
|
||||
--1PANELSITE_WEBSITEID="your-website-id"
|
||||
go test -v ./1panel_test.go -args \
|
||||
--1PANEL_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--1PANEL_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--1PANEL_SERVERURL="http://127.0.0.1:20410" \
|
||||
--1PANEL_APIVERSION="v1" \
|
||||
--1PANEL_APIKEY="your-api-key" \
|
||||
--1PANEL_WEBSITEID="your-website-id"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package onepanelsite
|
||||
package onepanel
|
||||
|
||||
const (
|
||||
// 资源类型:替换指定网站的证书。
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package baotapanelsite
|
||||
package baotapanel
|
||||
|
||||
import (
|
||||
"context"
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
package baotapanelsite_test
|
||||
package baotapanel_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanel-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanel"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -21,7 +21,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "BAOTAPANELSITE_"
|
||||
argsPrefix := "BAOTAPANEL_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -34,13 +34,13 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./baotapanel_site_test.go -args \
|
||||
--BAOTAPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--BAOTAPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--BAOTAPANELSITE_SERVERURL="http://127.0.0.1:8888" \
|
||||
--BAOTAPANELSITE_APIKEY="your-api-key" \
|
||||
--BAOTAPANELSITE_SITETYPE="php" \
|
||||
--BAOTAPANELSITE_SITENAME="your-site-name"
|
||||
go test -v ./baotapanel_test.go -args \
|
||||
--BAOTAPANEL_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--BAOTAPANEL_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--BAOTAPANEL_SERVERURL="http://127.0.0.1:8888" \
|
||||
--BAOTAPANEL_APIKEY="your-api-key" \
|
||||
--BAOTAPANEL_SITETYPE="php" \
|
||||
--BAOTAPANEL_SITENAME="your-site-name"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package baotapanelgosite
|
||||
package baotapanelgo
|
||||
|
||||
import (
|
||||
"context"
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
package baotapanelgosite_test
|
||||
package baotapanelgo_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanelgo-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotapanelgo"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -21,7 +21,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "BAOTAPANELGOSITE_"
|
||||
argsPrefix := "BAOTAPANELGO_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -34,13 +34,13 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./baotapanelgo_site_test.go -args \
|
||||
--BAOTAPANELGOSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--BAOTAPANELGOSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--BAOTAPANELGOSITE_SERVERURL="http://127.0.0.1:8888" \
|
||||
--BAOTAPANELGOSITE_APIKEY="your-api-key" \
|
||||
--BAOTAPANELGOSITE_SITETYPE="your-site-type" \
|
||||
--BAOTAPANELGOSITE_SITENAME="your-site-name"
|
||||
go test -v ./baotapanelgo_test.go -args \
|
||||
--BAOTAPANELGO_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--BAOTAPANELGO_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--BAOTAPANELGO_SERVERURL="http://127.0.0.1:8888" \
|
||||
--BAOTAPANELGO_APIKEY="your-api-key" \
|
||||
--BAOTAPANELGO_SITETYPE="your-site-type" \
|
||||
--BAOTAPANELGO_SITENAME="your-site-name"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package baotapanelwaf
|
||||
package baotawaf
|
||||
|
||||
import (
|
||||
"context"
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
package baotapanelwaf_test
|
||||
package baotawaf_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotawaf-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/baotawaf"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -21,7 +21,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "BAOTAWAFSITE_"
|
||||
argsPrefix := "BAOTAWAF_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -34,13 +34,13 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./baotawaf_site_test.go -args \
|
||||
--BAOTAWAFSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--BAOTAWAFSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--BAOTAWAFSITE_SERVERURL="http://127.0.0.1:8888" \
|
||||
--BAOTAWAFSITE_APIKEY="your-api-key" \
|
||||
--BAOTAWAFSITE_SITENAME="your-site-name" \
|
||||
--BAOTAWAFSITE_SITEPORT=443
|
||||
go test -v ./baotawaf_test.go -args \
|
||||
--BAOTAWAF_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--BAOTAWAF_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--BAOTAWAF_SERVERURL="http://127.0.0.1:8888" \
|
||||
--BAOTAWAF_APIKEY="your-api-key" \
|
||||
--BAOTAWAF_SITENAME="your-site-name" \
|
||||
--BAOTAWAF_SITEPORT=443
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
@@ -27,7 +27,7 @@ type DeployerConfig struct {
|
||||
// 部署资源类型。
|
||||
ResourceType string `json:"resourceType"`
|
||||
// 网站 ID。
|
||||
// 部署资源类型为 [RESOURCE_TYPE_SITE] 时必填。
|
||||
// 部署资源类型为 [RESOURCE_TYPE_WEBSITE] 时必填。
|
||||
SiteId string `json:"siteId,omitempty"`
|
||||
// 证书 ID。
|
||||
// 部署资源类型为 [RESOURCE_TYPE_CERTIFICATE] 时必填。
|
||||
@@ -70,7 +70,7 @@ func (d *Deployer) SetLogger(logger *slog.Logger) {
|
||||
func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*deployer.DeployResult, error) {
|
||||
// 根据部署资源类型决定部署方式
|
||||
switch d.config.ResourceType {
|
||||
case RESOURCE_TYPE_SITE:
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
if err := d.deployToSite(ctx, certPEM, privkeyPEM); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package cdnfly
|
||||
|
||||
const (
|
||||
// 资源类型:替换指定网站的证书。
|
||||
RESOURCE_TYPE_SITE = "site"
|
||||
RESOURCE_TYPE_WEBSITE = "website"
|
||||
// 资源类型:替换指定证书。
|
||||
RESOURCE_TYPE_CERTIFICATE = "certificate"
|
||||
)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package cpanel
|
||||
|
||||
const (
|
||||
// 资源类型:替换指定网站的证书。
|
||||
RESOURCE_TYPE_WEBSITE = "website"
|
||||
)
|
||||
+24
-6
@@ -1,4 +1,4 @@
|
||||
package cpanelsite
|
||||
package cpanel
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -23,8 +23,11 @@ type DeployerConfig struct {
|
||||
ApiToken string `json:"apiToken"`
|
||||
// 是否允许不安全的连接。
|
||||
AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"`
|
||||
// 部署资源类型。
|
||||
ResourceType string `json:"resourceType"`
|
||||
// 网站域名(不支持泛域名)。
|
||||
Domain string `json:"domain"`
|
||||
// 部署资源类型为 [RESOURCE_TYPE_WEBSITE] 时必填。
|
||||
Domain string `json:"domain,omitempty"`
|
||||
}
|
||||
|
||||
type Deployer struct {
|
||||
@@ -61,14 +64,29 @@ func (d *Deployer) SetLogger(logger *slog.Logger) {
|
||||
}
|
||||
|
||||
func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*deployer.DeployResult, error) {
|
||||
// 根据部署资源类型决定部署方式
|
||||
switch d.config.ResourceType {
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
if err := d.deployToWebsite(ctx, certPEM, privkeyPEM); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType)
|
||||
}
|
||||
|
||||
return &deployer.DeployResult{}, nil
|
||||
}
|
||||
|
||||
func (d *Deployer) deployToWebsite(ctx context.Context, certPEM, privkeyPEM string) error {
|
||||
if d.config.Domain == "" {
|
||||
return nil, errors.New("config `domain` is required")
|
||||
return errors.New("config `domain` is required")
|
||||
}
|
||||
|
||||
// 提取服务器证书和中间证书
|
||||
serverCertPEM, intermediaCertPEM, err := xcert.ExtractCertificatesFromPEM(certPEM)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to extract certs: %w", err)
|
||||
return fmt.Errorf("failed to extract certs: %w", err)
|
||||
}
|
||||
|
||||
// 安装 SSL 证书
|
||||
@@ -82,10 +100,10 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*dep
|
||||
sslInstallSSLResp, err := d.sdkClient.SSLInstallSSL(sslInstallSSLReq)
|
||||
d.logger.Debug("sdk request 'SSL.install_ssl'", slog.Any("request", sslInstallSSLReq), slog.Any("response", sslInstallSSLResp))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to execute sdk request 'SSL.install_ssl': %w", err)
|
||||
return fmt.Errorf("failed to execute sdk request 'SSL.install_ssl': %w", err)
|
||||
}
|
||||
|
||||
return &deployer.DeployResult{}, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func createSDKClient(serverUrl, username, apiToken string, skipTlsVerify bool) (*cpanelsdk.Client, error) {
|
||||
+11
-10
@@ -1,4 +1,4 @@
|
||||
package cpanelsite_test
|
||||
package cpanel_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/cpanel-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/cpanel"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -21,7 +21,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "CPANELSITE_"
|
||||
argsPrefix := "CPANEL_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -34,13 +34,13 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./cpanel_site_test.go -args \
|
||||
--CPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--CPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--CPANELSITE_SERVERURL="http://127.0.0.1:2082" \
|
||||
--CPANELSITE_USERNAME="your-username" \
|
||||
--CPANELSITE_APITOKEN="your-api-token" \
|
||||
--CPANELSITE_DOMAIN="example.com"
|
||||
go test -v ./cpanel_test.go -args \
|
||||
--CPANEL_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--CPANEL_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--CPANEL_SERVERURL="http://127.0.0.1:2082" \
|
||||
--CPANEL_USERNAME="your-username" \
|
||||
--CPANEL_APITOKEN="your-api-token" \
|
||||
--CPANEL_DOMAIN="example.com"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
@@ -61,6 +61,7 @@ func TestDeploy(t *testing.T) {
|
||||
Username: fUsername,
|
||||
ApiToken: fApiToken,
|
||||
AllowInsecureConnections: true,
|
||||
ResourceType: provider.RESOURCE_TYPE_WEBSITE,
|
||||
Domain: fDomain,
|
||||
})
|
||||
if err != nil {
|
||||
@@ -0,0 +1,6 @@
|
||||
package netlify
|
||||
|
||||
const (
|
||||
// 资源类型:替换指定网站的证书。
|
||||
RESOURCE_TYPE_WEBSITE = "website"
|
||||
)
|
||||
+24
-6
@@ -1,4 +1,4 @@
|
||||
package netlifysite
|
||||
package netlify
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -14,8 +14,11 @@ import (
|
||||
type DeployerConfig struct {
|
||||
// netlify API Token。
|
||||
ApiToken string `json:"apiToken"`
|
||||
// 部署资源类型。
|
||||
ResourceType string `json:"resourceType"`
|
||||
// netlify 网站 ID。
|
||||
SiteId string `json:"siteId"`
|
||||
// 部署资源类型为 [RESOURCE_TYPE_WEBSITE] 时必填。
|
||||
SiteId string `json:"siteId,omitempty"`
|
||||
}
|
||||
|
||||
type Deployer struct {
|
||||
@@ -52,14 +55,29 @@ func (d *Deployer) SetLogger(logger *slog.Logger) {
|
||||
}
|
||||
|
||||
func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*deployer.DeployResult, error) {
|
||||
// 根据部署资源类型决定部署方式
|
||||
switch d.config.ResourceType {
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
if err := d.deployToWebsite(ctx, certPEM, privkeyPEM); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType)
|
||||
}
|
||||
|
||||
return &deployer.DeployResult{}, nil
|
||||
}
|
||||
|
||||
func (d *Deployer) deployToWebsite(ctx context.Context, certPEM, privkeyPEM string) error {
|
||||
if d.config.SiteId == "" {
|
||||
return nil, errors.New("config `siteId` is required")
|
||||
return errors.New("config `siteId` is required")
|
||||
}
|
||||
|
||||
// 提取服务器证书和中间证书
|
||||
serverCertPEM, intermediaCertPEM, err := xcert.ExtractCertificatesFromPEM(certPEM)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to extract certs: %w", err)
|
||||
return fmt.Errorf("failed to extract certs: %w", err)
|
||||
}
|
||||
|
||||
// 上传网站证书
|
||||
@@ -72,10 +90,10 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*dep
|
||||
provisionSiteTLSCertificateResp, err := d.sdkClient.ProvisionSiteTLSCertificate(d.config.SiteId, provisionSiteTLSCertificateReq)
|
||||
d.logger.Debug("sdk request 'netlify.provisionSiteTLSCertificate'", slog.String("siteId", d.config.SiteId), slog.Any("request", provisionSiteTLSCertificateReq), slog.Any("response", provisionSiteTLSCertificateResp))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to execute sdk request 'netlify.provisionSiteTLSCertificate': %w", err)
|
||||
return fmt.Errorf("failed to execute sdk request 'netlify.provisionSiteTLSCertificate': %w", err)
|
||||
}
|
||||
|
||||
return &deployer.DeployResult{}, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func createSDKClient(apiToken string) (*netlifysdk.Client, error) {
|
||||
+11
-10
@@ -1,4 +1,4 @@
|
||||
package netlifysite_test
|
||||
package netlify_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/netlify-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/netlify"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -19,7 +19,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "NETLIFYSITE_"
|
||||
argsPrefix := "NETLIFY_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -30,11 +30,11 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./netlify_site_test.go -args \
|
||||
--NETLIFYSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--NETLIFYSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--NETLIFYSITE_APITOKEN="your-api-token" \
|
||||
--NETLIFYSITE_SITEID="your-site-id"
|
||||
go test -v ./netlify_test.go -args \
|
||||
--NETLIFY_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--NETLIFY_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--NETLIFY_APITOKEN="your-api-token" \
|
||||
--NETLIFY_SITEID="your-site-id"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
@@ -49,8 +49,9 @@ func TestDeploy(t *testing.T) {
|
||||
}, "\n"))
|
||||
|
||||
provider, err := provider.NewDeployer(&provider.DeployerConfig{
|
||||
ApiToken: fApiToken,
|
||||
SiteId: fSiteId,
|
||||
ApiToken: fApiToken,
|
||||
ResourceType: provider.RESOURCE_TYPE_WEBSITE,
|
||||
SiteId: fSiteId,
|
||||
})
|
||||
if err != nil {
|
||||
t.Errorf("err: %+v", err)
|
||||
@@ -0,0 +1,6 @@
|
||||
package ratpanel
|
||||
|
||||
const (
|
||||
// 资源类型:替换指定网站的证书。
|
||||
RESOURCE_TYPE_WEBSITE = "website"
|
||||
)
|
||||
+24
-6
@@ -1,4 +1,4 @@
|
||||
package ratpanelsite
|
||||
package ratpanel
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -20,8 +20,11 @@ type DeployerConfig struct {
|
||||
AccessToken string `json:"accessToken"`
|
||||
// 是否允许不安全的连接。
|
||||
AllowInsecureConnections bool `json:"allowInsecureConnections,omitempty"`
|
||||
// 部署资源类型。
|
||||
ResourceType string `json:"resourceType"`
|
||||
// 网站名称。
|
||||
SiteNames []string `json:"siteNames"`
|
||||
// 部署资源类型为 [RESOURCE_TYPE_WEBSITE] 时必填。
|
||||
SiteNames []string `json:"siteNames,omitempty"`
|
||||
}
|
||||
|
||||
type Deployer struct {
|
||||
@@ -58,8 +61,23 @@ func (d *Deployer) SetLogger(logger *slog.Logger) {
|
||||
}
|
||||
|
||||
func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*deployer.DeployResult, error) {
|
||||
// 根据部署资源类型决定部署方式
|
||||
switch d.config.ResourceType {
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
if err := d.deployToWebsite(ctx, certPEM, privkeyPEM); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType)
|
||||
}
|
||||
|
||||
return &deployer.DeployResult{}, nil
|
||||
}
|
||||
|
||||
func (d *Deployer) deployToWebsite(ctx context.Context, certPEM, privkeyPEM string) error {
|
||||
if len(d.config.SiteNames) == 0 {
|
||||
return nil, errors.New("config `siteNames` is required")
|
||||
return errors.New("config `siteNames` is required")
|
||||
}
|
||||
|
||||
// 遍历更新站点证书
|
||||
@@ -67,7 +85,7 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*dep
|
||||
for _, siteName := range d.config.SiteNames {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil, ctx.Err()
|
||||
return ctx.Err()
|
||||
default:
|
||||
if err := d.updateSiteCertificate(ctx, siteName, certPEM, privkeyPEM); err != nil {
|
||||
errs = append(errs, err)
|
||||
@@ -75,10 +93,10 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*dep
|
||||
}
|
||||
}
|
||||
if len(errs) > 0 {
|
||||
return nil, errors.Join(errs...)
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
return &deployer.DeployResult{}, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Deployer) updateSiteCertificate(ctx context.Context, siteName string, certPEM, privkeyPEM string) error {
|
||||
+11
-10
@@ -1,4 +1,4 @@
|
||||
package ratpanelsite_test
|
||||
package ratpanel_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/ratpanel-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/ratpanel"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -21,7 +21,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "RATPANELSITE_"
|
||||
argsPrefix := "RATPANEL_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -34,13 +34,13 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./ratpanel_site_test.go -args \
|
||||
--RATPANELSITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--RATPANELSITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--RATPANELSITE_SERVERURL="http://127.0.0.1:8888" \
|
||||
--RATPANELSITE_ACCESSTOKENID="your-access-token-id" \
|
||||
--RATPANELSITE_ACCESSTOKEN="your-access-token" \
|
||||
--RATPANELSITE_SITENAME="your-site-name"
|
||||
go test -v ./ratpanel_test.go -args \
|
||||
--RATPANEL_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--RATPANEL_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--RATPANEL_SERVERURL="http://127.0.0.1:8888" \
|
||||
--RATPANEL_ACCESSTOKENID="your-access-token-id" \
|
||||
--RATPANEL_ACCESSTOKEN="your-access-token" \
|
||||
--RATPANEL_SITENAME="your-site-name"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
@@ -61,6 +61,7 @@ func TestDeploy(t *testing.T) {
|
||||
AccessTokenId: fAccessTokenId,
|
||||
AccessToken: fAccessToken,
|
||||
AllowInsecureConnections: true,
|
||||
ResourceType: provider.RESOURCE_TYPE_WEBSITE,
|
||||
SiteNames: []string{fSiteName},
|
||||
})
|
||||
if err != nil {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package safelinesite
|
||||
package safeline
|
||||
|
||||
const (
|
||||
// 资源类型:替换指定证书。
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package safelinesite
|
||||
package safeline
|
||||
|
||||
import (
|
||||
"context"
|
||||
+9
-9
@@ -1,4 +1,4 @@
|
||||
package safelinesite_test
|
||||
package safeline_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/safeline-site"
|
||||
provider "github.com/certimate-go/certimate/pkg/core/deployer/providers/safeline"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -20,7 +20,7 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
argsPrefix := "SAFELINESITE_"
|
||||
argsPrefix := "SAFELINE_"
|
||||
|
||||
flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "")
|
||||
flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "")
|
||||
@@ -32,12 +32,12 @@ func init() {
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v ./safeline_site_test.go -args \
|
||||
--SAFELINESITE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--SAFELINESITE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--SAFELINESITE_SERVERURL="http://127.0.0.1:9443" \
|
||||
--SAFELINESITE_APITOKEN="your-api-token" \
|
||||
--SAFELINESITE_CERTIFICATEID="your-certificate-id"
|
||||
go test -v ./safeline_test.go -args \
|
||||
--SAFELINE_INPUTCERTPATH="/path/to/your-input-cert.pem" \
|
||||
--SAFELINE_INPUTKEYPATH="/path/to/your-input-key.pem" \
|
||||
--SAFELINE_SERVERURL="http://127.0.0.1:9443" \
|
||||
--SAFELINE_APITOKEN="your-api-token" \
|
||||
--SAFELINE_CERTIFICATEID="your-certificate-id"
|
||||
*/
|
||||
func TestDeploy(t *testing.T) {
|
||||
flag.Parse()
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
import { DEPLOYMENT_PROVIDERS, type DeploymentProviderType } from "@/domain/provider";
|
||||
|
||||
import BizDeployNodeConfigFieldsProvider1Panel from "./BizDeployNodeConfigFieldsProvider1Panel.tsx";
|
||||
import BizDeployNodeConfigFieldsProvider1PanelConsole from "./BizDeployNodeConfigFieldsProvider1PanelConsole";
|
||||
import BizDeployNodeConfigFieldsProvider1PanelSite from "./BizDeployNodeConfigFieldsProvider1PanelSite";
|
||||
import BizDeployNodeConfigFieldsProviderAliyunALB from "./BizDeployNodeConfigFieldsProviderAliyunALB";
|
||||
import BizDeployNodeConfigFieldsProviderAliyunAPIGW from "./BizDeployNodeConfigFieldsProviderAliyunAPIGW";
|
||||
import BizDeployNodeConfigFieldsProviderAliyunCAS from "./BizDeployNodeConfigFieldsProviderAliyunCAS";
|
||||
@@ -29,15 +29,15 @@ import BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB from "./BizDeployNodeCo
|
||||
import BizDeployNodeConfigFieldsProviderBaiduCloudBLB from "./BizDeployNodeConfigFieldsProviderBaiduCloudBLB";
|
||||
import BizDeployNodeConfigFieldsProviderBaiduCloudCDN from "./BizDeployNodeConfigFieldsProviderBaiduCloudCDN";
|
||||
import BizDeployNodeConfigFieldsProviderBaishanCDN from "./BizDeployNodeConfigFieldsProviderBaishanCDN";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaPanel from "./BizDeployNodeConfigFieldsProviderBaotaPanel.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaPanelConsole from "./BizDeployNodeConfigFieldsProviderBaotaPanelConsole";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaPanelGo from "./BizDeployNodeConfigFieldsProviderBaotaPanelGo.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole from "./BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaPanelGoSite from "./BizDeployNodeConfigFieldsProviderBaotaPanelGoSite";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaPanelSite from "./BizDeployNodeConfigFieldsProviderBaotaPanelSite";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaWAFSite from "./BizDeployNodeConfigFieldsProviderBaotaWAFSite";
|
||||
import BizDeployNodeConfigFieldsProviderBaotaWAF from "./BizDeployNodeConfigFieldsProviderBaotaWAF.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderBunnyCDN from "./BizDeployNodeConfigFieldsProviderBunnyCDN";
|
||||
import BizDeployNodeConfigFieldsProviderBytePlusCDN from "./BizDeployNodeConfigFieldsProviderBytePlusCDN";
|
||||
import BizDeployNodeConfigFieldsProviderCdnfly from "./BizDeployNodeConfigFieldsProviderCdnfly";
|
||||
import BizDeployNodeConfigFieldsProviderCPanelSite from "./BizDeployNodeConfigFieldsProviderCPanelSite";
|
||||
import BizDeployNodeConfigFieldsProviderCPanel from "./BizDeployNodeConfigFieldsProviderCPanel.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderCTCCCloudAO from "./BizDeployNodeConfigFieldsProviderCTCCCloudAO";
|
||||
import BizDeployNodeConfigFieldsProviderCTCCCloudCDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudCDN";
|
||||
import BizDeployNodeConfigFieldsProviderCTCCCloudELB from "./BizDeployNodeConfigFieldsProviderCTCCCloudELB";
|
||||
@@ -62,14 +62,14 @@ import BizDeployNodeConfigFieldsProviderKubernetesSecret from "./BizDeployNodeCo
|
||||
import BizDeployNodeConfigFieldsProviderLeCDN from "./BizDeployNodeConfigFieldsProviderLeCDN";
|
||||
import BizDeployNodeConfigFieldsProviderLocal from "./BizDeployNodeConfigFieldsProviderLocal";
|
||||
import BizDeployNodeConfigFieldsProviderMohuaMVH from "./BizDeployNodeConfigFieldsProviderMohuaMVH";
|
||||
import BizDeployNodeConfigFieldsProviderNetlifySite from "./BizDeployNodeConfigFieldsProviderNetlifySite";
|
||||
import BizDeployNodeConfigFieldsProviderNetlify from "./BizDeployNodeConfigFieldsProviderNetlify.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderProxmoxVE from "./BizDeployNodeConfigFieldsProviderProxmoxVE";
|
||||
import BizDeployNodeConfigFieldsProviderQiniuCDN from "./BizDeployNodeConfigFieldsProviderQiniuCDN";
|
||||
import BizDeployNodeConfigFieldsProviderQiniuKodo from "./BizDeployNodeConfigFieldsProviderQiniuKodo";
|
||||
import BizDeployNodeConfigFieldsProviderQiniuPili from "./BizDeployNodeConfigFieldsProviderQiniuPili";
|
||||
import BizDeployNodeConfigFieldsProviderRainYunRCDN from "./BizDeployNodeConfigFieldsProviderRainYunRCDN";
|
||||
import BizDeployNodeConfigFieldsProviderRatPanelSite from "./BizDeployNodeConfigFieldsProviderRatPanelSite";
|
||||
import BizDeployNodeConfigFieldsProviderSafeLineSite from "./BizDeployNodeConfigFieldsProviderSafeLineSite";
|
||||
import BizDeployNodeConfigFieldsProviderRatPanel from "./BizDeployNodeConfigFieldsProviderRatPanel.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderSafeLine from "./BizDeployNodeConfigFieldsProviderSafeLine.tsx";
|
||||
import BizDeployNodeConfigFieldsProviderSSH from "./BizDeployNodeConfigFieldsProviderSSH";
|
||||
import BizDeployNodeConfigFieldsProviderTencentCloudCDN from "./BizDeployNodeConfigFieldsProviderTencentCloudCDN";
|
||||
import BizDeployNodeConfigFieldsProviderTencentCloudCLB from "./BizDeployNodeConfigFieldsProviderTencentCloudCLB";
|
||||
@@ -114,7 +114,7 @@ const providerComponentMap: Partial<Record<DeploymentProviderType, React.Compone
|
||||
NOTICE: If you add new child component, please keep ASCII order.
|
||||
*/
|
||||
[DEPLOYMENT_PROVIDERS["1PANEL_CONSOLE"]]: BizDeployNodeConfigFieldsProvider1PanelConsole,
|
||||
[DEPLOYMENT_PROVIDERS["1PANEL_SITE"]]: BizDeployNodeConfigFieldsProvider1PanelSite,
|
||||
[DEPLOYMENT_PROVIDERS["1PANEL"]]: BizDeployNodeConfigFieldsProvider1Panel,
|
||||
[DEPLOYMENT_PROVIDERS.ALIYUN_ALB]: BizDeployNodeConfigFieldsProviderAliyunALB,
|
||||
[DEPLOYMENT_PROVIDERS.ALIYUN_APIGW]: BizDeployNodeConfigFieldsProviderAliyunAPIGW,
|
||||
[DEPLOYMENT_PROVIDERS.ALIYUN_CAS]: BizDeployNodeConfigFieldsProviderAliyunCAS,
|
||||
@@ -141,14 +141,14 @@ const providerComponentMap: Partial<Record<DeploymentProviderType, React.Compone
|
||||
[DEPLOYMENT_PROVIDERS.BAIDUCLOUD_CDN]: BizDeployNodeConfigFieldsProviderBaiduCloudCDN,
|
||||
[DEPLOYMENT_PROVIDERS.BAISHAN_CDN]: BizDeployNodeConfigFieldsProviderBaishanCDN,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANEL_CONSOLE]: BizDeployNodeConfigFieldsProviderBaotaPanelConsole,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANEL_SITE]: BizDeployNodeConfigFieldsProviderBaotaPanelSite,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANEL]: BizDeployNodeConfigFieldsProviderBaotaPanel,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANELGO_CONSOLE]: BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANELGO_SITE]: BizDeployNodeConfigFieldsProviderBaotaPanelGoSite,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAWAF_SITE]: BizDeployNodeConfigFieldsProviderBaotaWAFSite,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANELGO]: BizDeployNodeConfigFieldsProviderBaotaPanelGo,
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAWAF]: BizDeployNodeConfigFieldsProviderBaotaWAF,
|
||||
[DEPLOYMENT_PROVIDERS.BUNNY_CDN]: BizDeployNodeConfigFieldsProviderBunnyCDN,
|
||||
[DEPLOYMENT_PROVIDERS.BYTEPLUS_CDN]: BizDeployNodeConfigFieldsProviderBytePlusCDN,
|
||||
[DEPLOYMENT_PROVIDERS.CDNFLY]: BizDeployNodeConfigFieldsProviderCdnfly,
|
||||
[DEPLOYMENT_PROVIDERS.CPANEL_SITE]: BizDeployNodeConfigFieldsProviderCPanelSite,
|
||||
[DEPLOYMENT_PROVIDERS.CPANEL]: BizDeployNodeConfigFieldsProviderCPanel,
|
||||
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_AO]: BizDeployNodeConfigFieldsProviderCTCCCloudAO,
|
||||
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_CDN]: BizDeployNodeConfigFieldsProviderCTCCCloudCDN,
|
||||
[DEPLOYMENT_PROVIDERS.CTCCCLOUD_ELB]: BizDeployNodeConfigFieldsProviderCTCCCloudELB,
|
||||
@@ -173,14 +173,14 @@ const providerComponentMap: Partial<Record<DeploymentProviderType, React.Compone
|
||||
[DEPLOYMENT_PROVIDERS.LECDN]: BizDeployNodeConfigFieldsProviderLeCDN,
|
||||
[DEPLOYMENT_PROVIDERS.LOCAL]: BizDeployNodeConfigFieldsProviderLocal,
|
||||
[DEPLOYMENT_PROVIDERS.MOHUA_MVH]: BizDeployNodeConfigFieldsProviderMohuaMVH,
|
||||
[DEPLOYMENT_PROVIDERS.NETLIFY_SITE]: BizDeployNodeConfigFieldsProviderNetlifySite,
|
||||
[DEPLOYMENT_PROVIDERS.NETLIFY]: BizDeployNodeConfigFieldsProviderNetlify,
|
||||
[DEPLOYMENT_PROVIDERS.PROXMOXVE]: BizDeployNodeConfigFieldsProviderProxmoxVE,
|
||||
[DEPLOYMENT_PROVIDERS.QINIU_CDN]: BizDeployNodeConfigFieldsProviderQiniuCDN,
|
||||
[DEPLOYMENT_PROVIDERS.QINIU_KODO]: BizDeployNodeConfigFieldsProviderQiniuKodo,
|
||||
[DEPLOYMENT_PROVIDERS.QINIU_PILI]: BizDeployNodeConfigFieldsProviderQiniuPili,
|
||||
[DEPLOYMENT_PROVIDERS.RAINYUN_RCDN]: BizDeployNodeConfigFieldsProviderRainYunRCDN,
|
||||
[DEPLOYMENT_PROVIDERS.RATPANEL_SITE]: BizDeployNodeConfigFieldsProviderRatPanelSite,
|
||||
[DEPLOYMENT_PROVIDERS.SAFELINE_SITE]: BizDeployNodeConfigFieldsProviderSafeLineSite,
|
||||
[DEPLOYMENT_PROVIDERS.RATPANEL]: BizDeployNodeConfigFieldsProviderRatPanel,
|
||||
[DEPLOYMENT_PROVIDERS.SAFELINE]: BizDeployNodeConfigFieldsProviderSafeLine,
|
||||
[DEPLOYMENT_PROVIDERS.SSH]: BizDeployNodeConfigFieldsProviderSSH,
|
||||
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CDN]: BizDeployNodeConfigFieldsProviderTencentCloudCDN,
|
||||
[DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CLB]: BizDeployNodeConfigFieldsProviderTencentCloudCLB,
|
||||
|
||||
+19
-19
@@ -13,7 +13,7 @@ const RESOURCE_TYPE_CERTIFICATE = "certificate" as const;
|
||||
const WEBSITE_MATCH_PATTERN_SPECIFIED = "specified" as const;
|
||||
const WEBSITE_MATCH_PATTERN_CERTSAN = "certsan" as const;
|
||||
|
||||
const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
const BizDeployNodeConfigFieldsProvider1Panel = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
@@ -32,12 +32,12 @@ const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
<Form.Item
|
||||
name={[parentNamePath, "nodeName"]}
|
||||
initialValue={initialValues.nodeName}
|
||||
label={t("workflow_node.deploy.form.1panel_site_node_name.label")}
|
||||
extra={t("workflow_node.deploy.form.1panel_site_node_name.help")}
|
||||
label={t("workflow_node.deploy.form.1panel_node_name.label")}
|
||||
extra={t("workflow_node.deploy.form.1panel_node_name.help")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_site_node_name.tooltip") }}></span>}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_node_name.tooltip") }}></span>}
|
||||
>
|
||||
<Input allowClear placeholder={t("workflow_node.deploy.form.1panel_site_node_name.placeholder")} />
|
||||
<Input allowClear placeholder={t("workflow_node.deploy.form.1panel_node_name.placeholder")} />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
@@ -49,7 +49,7 @@ const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
<Select
|
||||
options={[RESOURCE_TYPE_WEBSITE, RESOURCE_TYPE_CERTIFICATE].map((s) => ({
|
||||
value: s,
|
||||
label: t(`workflow_node.deploy.form.1panel_site_resource_type.option.${s}.label`),
|
||||
label: t(`workflow_node.deploy.form.1panel_resource_type.option.${s}.label`),
|
||||
}))}
|
||||
placeholder={t("workflow_node.deploy.form.shared_resource_type.placeholder")}
|
||||
/>
|
||||
@@ -59,10 +59,10 @@ const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
<Form.Item
|
||||
name={[parentNamePath, "websiteMatchPattern"]}
|
||||
initialValue={initialValues.websiteMatchPattern}
|
||||
label={t("workflow_node.deploy.form.1panel_site_website_match_pattern.label")}
|
||||
label={t("workflow_node.deploy.form.1panel_website_match_pattern.label")}
|
||||
extra={
|
||||
fieldWebsiteMatchPattern === WEBSITE_MATCH_PATTERN_CERTSAN ? (
|
||||
<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_site_website_match_pattern.help_certsan") }}></span>
|
||||
<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_website_match_pattern.help_certsan") }}></span>
|
||||
) : (
|
||||
void 0
|
||||
)
|
||||
@@ -72,7 +72,7 @@ const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
<Radio.Group
|
||||
options={[WEBSITE_MATCH_PATTERN_SPECIFIED, WEBSITE_MATCH_PATTERN_CERTSAN].map((s) => ({
|
||||
key: s,
|
||||
label: t(`workflow_node.deploy.form.1panel_site_website_match_pattern.option.${s}.label`),
|
||||
label: t(`workflow_node.deploy.form.1panel_website_match_pattern.option.${s}.label`),
|
||||
value: s,
|
||||
}))}
|
||||
/>
|
||||
@@ -82,11 +82,11 @@ const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
<Form.Item
|
||||
name={[parentNamePath, "websiteId"]}
|
||||
initialValue={initialValues.websiteId}
|
||||
label={t("workflow_node.deploy.form.1panel_site_website_id.label")}
|
||||
label={t("workflow_node.deploy.form.1panel_website_id.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_site_website_id.tooltip") }}></span>}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_website_id.tooltip") }}></span>}
|
||||
>
|
||||
<Input type="number" placeholder={t("workflow_node.deploy.form.1panel_site_website_id.placeholder")} />
|
||||
<Input type="number" placeholder={t("workflow_node.deploy.form.1panel_website_id.placeholder")} />
|
||||
</Form.Item>
|
||||
</Show>
|
||||
</Show>
|
||||
@@ -95,11 +95,11 @@ const BizDeployNodeConfigFieldsProvider1PanelSite = () => {
|
||||
<Form.Item
|
||||
name={[parentNamePath, "certificateId"]}
|
||||
initialValue={initialValues.certificateId}
|
||||
label={t("workflow_node.deploy.form.1panel_site_certificate_id.label")}
|
||||
label={t("workflow_node.deploy.form.1panel_certificate_id.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_site_certificate_id.tooltip") }}></span>}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.1panel_certificate_id.tooltip") }}></span>}
|
||||
>
|
||||
<Input type="number" placeholder={t("workflow_node.deploy.form.1panel_site_certificate_id.placeholder")} />
|
||||
<Input type="number" placeholder={t("workflow_node.deploy.form.1panel_certificate_id.placeholder")} />
|
||||
</Form.Item>
|
||||
</Show>
|
||||
</>
|
||||
@@ -137,7 +137,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
if (!res.success) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.1panel_site_website_id.placeholder"),
|
||||
message: t("workflow_node.deploy.form.1panel_website_id.placeholder"),
|
||||
path: ["websiteId"],
|
||||
});
|
||||
}
|
||||
@@ -147,7 +147,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
} else {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.1panel_site_website_match_pattern.placeholder"),
|
||||
message: t("workflow_node.deploy.form.1panel_website_match_pattern.placeholder"),
|
||||
path: ["websiteMatchPattern"],
|
||||
});
|
||||
}
|
||||
@@ -160,7 +160,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
if (!res.success) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.1panel_site_certificate_id.placeholder"),
|
||||
message: t("workflow_node.deploy.form.1panel_certificate_id.placeholder"),
|
||||
path: ["websiteId"],
|
||||
});
|
||||
}
|
||||
@@ -170,7 +170,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProvider1PanelSite, {
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProvider1Panel, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
+3
-3
@@ -10,7 +10,7 @@ import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const MULTIPLE_INPUT_SEPARATOR = ";";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderBaotaPanelSite = () => {
|
||||
const BizDeployNodeConfigFieldsProviderBaotaPanel = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
@@ -23,7 +23,7 @@ const BizDeployNodeConfigFieldsProviderBaotaPanelSite = () => {
|
||||
return (
|
||||
<>
|
||||
<Form.Item>
|
||||
<Tips message={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.baotapanel_site.guide") }}></span>} />
|
||||
<Tips message={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.baotapanel.guide") }}></span>} />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
@@ -86,7 +86,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderBaotaPanelSite, {
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderBaotaPanel, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
+2
-2
@@ -9,7 +9,7 @@ import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const MULTIPLE_INPUT_SEPARATOR = ";";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderBaotaPanelGoSite = () => {
|
||||
const BizDeployNodeConfigFieldsProviderBaotaPanelGo = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
@@ -81,7 +81,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderBaotaPanelGoSite, {
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderBaotaPanelGo, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
+2
-2
@@ -10,7 +10,7 @@ import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const MULTIPLE_INPUT_SEPARATOR = ";";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderBaotaWAFSite = () => {
|
||||
const BizDeployNodeConfigFieldsProviderBaotaWAF = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
@@ -76,7 +76,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderBaotaWAFSite, {
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderBaotaWAF, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
@@ -0,0 +1,94 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form, Input, Select } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const RESOURCE_TYPE_WEBSITE = "website" as const;
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderCPanel = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
const formSchema = z.object({
|
||||
[parentNamePath]: getSchema({ i18n }),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const formInst = Form.useFormInstance();
|
||||
const initialValues = getInitialValues();
|
||||
|
||||
const fieldResourceType = Form.useWatch([parentNamePath, "resourceType"], formInst);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "resourceType"]}
|
||||
initialValue={initialValues.resourceType}
|
||||
label={t("workflow_node.deploy.form.shared_resource_type.label")}
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Select
|
||||
options={[RESOURCE_TYPE_WEBSITE].map((s) => ({
|
||||
value: s,
|
||||
label: t(`workflow_node.deploy.form.cpanel_resource_type.option.${s}.label`),
|
||||
}))}
|
||||
placeholder={t("workflow_node.deploy.form.shared_resource_type.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Show when={fieldResourceType === RESOURCE_TYPE_WEBSITE}>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "domain"]}
|
||||
initialValue={initialValues.domain}
|
||||
label={t("workflow_node.deploy.form.cpanel_domain.label")}
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Input placeholder={t("workflow_node.deploy.form.cpanel_domain.placeholder")} />
|
||||
</Form.Item>
|
||||
</Show>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
resourceType: RESOURCE_TYPE_WEBSITE,
|
||||
domain: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
|
||||
return z
|
||||
.object({
|
||||
resourceType: z.literal(RESOURCE_TYPE_WEBSITE, t("workflow_node.deploy.form.cpanel_resource_type.placeholder")),
|
||||
domain: z.string().nullish(),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
{
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.cpanel_domain.placeholder"),
|
||||
path: ["domain"],
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderCPanel, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
|
||||
export default _default;
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderCPanelSite = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
const formSchema = z.object({
|
||||
[parentNamePath]: getSchema({ i18n }),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const initialValues = getInitialValues();
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "domain"]}
|
||||
initialValue={initialValues.domain}
|
||||
label={t("workflow_node.deploy.form.cpanel_site_domain.label")}
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Input placeholder={t("workflow_node.deploy.form.cpanel_site_domain.placeholder")} />
|
||||
</Form.Item>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
domain: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
domain: z.string().nonempty(t("workflow_node.deploy.form.cpanel_site_domain.placeholder")),
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderCPanelSite, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
|
||||
export default _default;
|
||||
+6
-6
@@ -7,7 +7,7 @@ import Show from "@/components/Show";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const RESOURCE_TYPE_SITE = "site" as const;
|
||||
const RESOURCE_TYPE_WEBSITE = "website" as const;
|
||||
const RESOURCE_TYPE_CERTIFICATE = "certificate" as const;
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderCdnfly = () => {
|
||||
@@ -32,7 +32,7 @@ const BizDeployNodeConfigFieldsProviderCdnfly = () => {
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Select
|
||||
options={[RESOURCE_TYPE_SITE, RESOURCE_TYPE_CERTIFICATE].map((s) => ({
|
||||
options={[RESOURCE_TYPE_WEBSITE, RESOURCE_TYPE_CERTIFICATE].map((s) => ({
|
||||
value: s,
|
||||
label: t(`workflow_node.deploy.form.cdnfly_resource_type.option.${s}.label`),
|
||||
}))}
|
||||
@@ -40,7 +40,7 @@ const BizDeployNodeConfigFieldsProviderCdnfly = () => {
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Show when={fieldResourceType === RESOURCE_TYPE_SITE}>
|
||||
<Show when={fieldResourceType === RESOURCE_TYPE_WEBSITE}>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "siteId"]}
|
||||
initialValue={initialValues.siteId}
|
||||
@@ -69,7 +69,7 @@ const BizDeployNodeConfigFieldsProviderCdnfly = () => {
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
resourceType: RESOURCE_TYPE_SITE,
|
||||
resourceType: RESOURCE_TYPE_WEBSITE,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -78,13 +78,13 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z
|
||||
.object({
|
||||
resourceType: z.literal([RESOURCE_TYPE_SITE, RESOURCE_TYPE_CERTIFICATE], t("workflow_node.deploy.form.shared_resource_type.placeholder")),
|
||||
resourceType: z.literal([RESOURCE_TYPE_WEBSITE, RESOURCE_TYPE_CERTIFICATE], t("workflow_node.deploy.form.shared_resource_type.placeholder")),
|
||||
siteId: z.union([z.string(), z.number().int()]).nullish(),
|
||||
certificateId: z.union([z.string(), z.number().int()]).nullish(),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_SITE:
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
{
|
||||
const res = z.preprocess((v) => Number(v), z.number().int().positive()).safeParse(values.siteId);
|
||||
if (!res.success) {
|
||||
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form, Input, Select } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const RESOURCE_TYPE_WEBSITE = "website" as const;
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderNetlify = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
const formSchema = z.object({
|
||||
[parentNamePath]: getSchema({ i18n }),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const formInst = Form.useFormInstance();
|
||||
const initialValues = getInitialValues();
|
||||
|
||||
const fieldResourceType = Form.useWatch([parentNamePath, "resourceType"], formInst);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "resourceType"]}
|
||||
initialValue={initialValues.resourceType}
|
||||
label={t("workflow_node.deploy.form.shared_resource_type.label")}
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Select
|
||||
options={[RESOURCE_TYPE_WEBSITE].map((s) => ({
|
||||
value: s,
|
||||
label: t(`workflow_node.deploy.form.netlify_resource_type.option.${s}.label`),
|
||||
}))}
|
||||
placeholder={t("workflow_node.deploy.form.shared_resource_type.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Show when={fieldResourceType === RESOURCE_TYPE_WEBSITE}>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "siteId"]}
|
||||
initialValue={initialValues.siteId}
|
||||
label={t("workflow_node.deploy.form.netlify_site_id.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.netlify_site_id.tooltip") }}></span>}
|
||||
>
|
||||
<Input placeholder={t("workflow_node.deploy.form.netlify_site_id.placeholder")} />
|
||||
</Form.Item>
|
||||
</Show>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
resourceType: RESOURCE_TYPE_WEBSITE,
|
||||
siteId: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
|
||||
return z
|
||||
.object({
|
||||
resourceType: z.literal(RESOURCE_TYPE_WEBSITE, t("workflow_node.deploy.form.cpanel_resource_type.placeholder")),
|
||||
siteId: z.string().nullish(),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
{
|
||||
const res = z.string().nonempty().safeParse(values.siteId);
|
||||
if (!res.success) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.netlify_site_id.placeholder"),
|
||||
path: ["siteId"],
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderNetlify, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
|
||||
export default _default;
|
||||
-52
@@ -1,52 +0,0 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderNetlifySite = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
const formSchema = z.object({
|
||||
[parentNamePath]: getSchema({ i18n }),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const initialValues = getInitialValues();
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "siteId"]}
|
||||
initialValue={initialValues.siteId}
|
||||
label={t("workflow_node.deploy.form.netlify_site_id.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.netlify_site_id.tooltip") }}></span>}
|
||||
>
|
||||
<Input placeholder={t("workflow_node.deploy.form.netlify_site_id.placeholder")} />
|
||||
</Form.Item>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
siteId: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
siteId: z.string().nonempty(t("workflow_node.deploy.form.netlify_site_id.placeholder")),
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderNetlifySite, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
|
||||
export default _default;
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form, Select } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
|
||||
import Show from "@/components/Show";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const RESOURCE_TYPE_WEBSITE = "website" as const;
|
||||
|
||||
const MULTIPLE_INPUT_SEPARATOR = ";";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderRatPanel = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
const formSchema = z.object({
|
||||
[parentNamePath]: getSchema({ i18n }),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const formInst = Form.useFormInstance();
|
||||
const initialValues = getInitialValues();
|
||||
|
||||
const fieldResourceType = Form.useWatch([parentNamePath, "resourceType"], formInst);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "resourceType"]}
|
||||
initialValue={initialValues.resourceType}
|
||||
label={t("workflow_node.deploy.form.shared_resource_type.label")}
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Select
|
||||
options={[RESOURCE_TYPE_WEBSITE].map((s) => ({
|
||||
value: s,
|
||||
label: t(`workflow_node.deploy.form.ratpanel_resource_type.option.${s}.label`),
|
||||
}))}
|
||||
placeholder={t("workflow_node.deploy.form.shared_resource_type.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
<Show when={fieldResourceType === RESOURCE_TYPE_WEBSITE}>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "siteNames"]}
|
||||
initialValue={initialValues.siteNames}
|
||||
label={t("workflow_node.deploy.form.ratpanel_site_names.label")}
|
||||
extra={t("workflow_node.deploy.form.ratpanel_site_names.help")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ratpanel_site_names.tooltip") }}></span>}
|
||||
>
|
||||
<MultipleSplitValueInput
|
||||
modalTitle={t("workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.title")}
|
||||
placeholder={t("workflow_node.deploy.form.ratpanel_site_names.placeholder")}
|
||||
placeholderInModal={t("workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.placeholder")}
|
||||
separator={MULTIPLE_INPUT_SEPARATOR}
|
||||
splitOptions={{ removeEmpty: true, trimSpace: true }}
|
||||
/>
|
||||
</Form.Item>
|
||||
</Show>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
resourceType: RESOURCE_TYPE_WEBSITE,
|
||||
siteNames: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
|
||||
return z
|
||||
.object({
|
||||
resourceType: z.literal(RESOURCE_TYPE_WEBSITE, t("workflow_node.deploy.form.cpanel_resource_type.placeholder")),
|
||||
siteNames: z.string().nullish(),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_WEBSITE:
|
||||
{
|
||||
const schema = z
|
||||
.string()
|
||||
.nonempty()
|
||||
.refine((v) => {
|
||||
if (!v) return false;
|
||||
return v.split(MULTIPLE_INPUT_SEPARATOR).every((s) => !!s.trim());
|
||||
});
|
||||
if (!schema.safeParse(values.siteNames).success) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.ratpanel_site_names.placeholder"),
|
||||
path: ["siteNames"],
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderRatPanel, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
|
||||
export default _default;
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const MULTIPLE_INPUT_SEPARATOR = ";";
|
||||
|
||||
const BizDeployNodeConfigFieldsProviderRatPanelSite = () => {
|
||||
const { i18n, t } = useTranslation();
|
||||
|
||||
const { parentNamePath } = useFormNestedFieldsContext();
|
||||
const formSchema = z.object({
|
||||
[parentNamePath]: getSchema({ i18n }),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const initialValues = getInitialValues();
|
||||
|
||||
return (
|
||||
<>
|
||||
<Form.Item
|
||||
name={[parentNamePath, "siteNames"]}
|
||||
initialValue={initialValues.siteNames}
|
||||
label={t("workflow_node.deploy.form.ratpanel_site_names.label")}
|
||||
extra={t("workflow_node.deploy.form.ratpanel_site_names.help")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.ratpanel_site_names.tooltip") }}></span>}
|
||||
>
|
||||
<MultipleSplitValueInput
|
||||
modalTitle={t("workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.title")}
|
||||
placeholder={t("workflow_node.deploy.form.ratpanel_site_names.placeholder")}
|
||||
placeholderInModal={t("workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.placeholder")}
|
||||
separator={MULTIPLE_INPUT_SEPARATOR}
|
||||
splitOptions={{ removeEmpty: true, trimSpace: true }}
|
||||
/>
|
||||
</Form.Item>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
siteNames: "",
|
||||
};
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
siteNames: z
|
||||
.string()
|
||||
.nonempty(t("workflow_node.deploy.form.ratpanel_site_names.placeholder"))
|
||||
.refine(
|
||||
(v) => {
|
||||
if (!v) return false;
|
||||
return v.split(MULTIPLE_INPUT_SEPARATOR).every((s) => !!s.trim());
|
||||
},
|
||||
{ error: t("workflow_node.deploy.form.ratpanel_site_names.placeholder") }
|
||||
),
|
||||
});
|
||||
};
|
||||
|
||||
const _default = Object.assign(BizDeployNodeConfigFieldsProviderRatPanelSite, {
|
||||
getInitialValues,
|
||||
getSchema,
|
||||
});
|
||||
|
||||
export default _default;
|
||||
+5
-5
@@ -33,7 +33,7 @@ const BizDeployNodeConfigFieldsProviderSafeLine = () => {
|
||||
<Select
|
||||
options={[RESOURCE_TYPE_CERTIFICATE].map((s) => ({
|
||||
value: s,
|
||||
label: t(`workflow_node.deploy.form.safeline_site_resource_type.option.${s}.label`),
|
||||
label: t(`workflow_node.deploy.form.safeline_resource_type.option.${s}.label`),
|
||||
}))}
|
||||
placeholder={t("workflow_node.deploy.form.shared_resource_type.placeholder")}
|
||||
/>
|
||||
@@ -43,11 +43,11 @@ const BizDeployNodeConfigFieldsProviderSafeLine = () => {
|
||||
<Form.Item
|
||||
name={[parentNamePath, "certificateId"]}
|
||||
initialValue={initialValues.certificateId}
|
||||
label={t("workflow_node.deploy.form.safeline_site_certificate_id.label")}
|
||||
label={t("workflow_node.deploy.form.safeline_certificate_id.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.safeline_site_certificate_id.tooltip") }}></span>}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.safeline_certificate_id.tooltip") }}></span>}
|
||||
>
|
||||
<Input type="number" placeholder={t("workflow_node.deploy.form.safeline_site_certificate_id.placeholder")} />
|
||||
<Input type="number" placeholder={t("workflow_node.deploy.form.safeline_certificate_id.placeholder")} />
|
||||
</Form.Item>
|
||||
</Show>
|
||||
</>
|
||||
@@ -76,7 +76,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
if (!res.success) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.safeline_site_certificate_id.placeholder"),
|
||||
message: t("workflow_node.deploy.form.safeline_certificate_id.placeholder"),
|
||||
path: ["certificateId"],
|
||||
});
|
||||
}
|
||||
+16
-16
@@ -536,8 +536,8 @@ export const acmeHttp01ProvidersMap: Map<ACMEHttp01Provider["type"] | string, AC
|
||||
NOTICE: If you add new constant, please keep ASCII order.
|
||||
*/
|
||||
export const DEPLOYMENT_PROVIDERS = Object.freeze({
|
||||
["1PANEL"]: `${ACCESS_PROVIDERS["1PANEL"]}`,
|
||||
["1PANEL_CONSOLE"]: `${ACCESS_PROVIDERS["1PANEL"]}-console`,
|
||||
["1PANEL_SITE"]: `${ACCESS_PROVIDERS["1PANEL"]}-site`,
|
||||
ALIYUN_ALB: `${ACCESS_PROVIDERS.ALIYUN}-alb`,
|
||||
ALIYUN_APIGW: `${ACCESS_PROVIDERS.ALIYUN}-apigw`,
|
||||
ALIYUN_CAS: `${ACCESS_PROVIDERS.ALIYUN}-cas`,
|
||||
@@ -564,17 +564,17 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({
|
||||
BAIDUCLOUD_CDN: `${ACCESS_PROVIDERS.BAIDUCLOUD}-cdn`,
|
||||
BAIDUCLOUD_CERT: `${ACCESS_PROVIDERS.BAIDUCLOUD}-cert`,
|
||||
BAISHAN_CDN: `${ACCESS_PROVIDERS.BAISHAN}-cdn`,
|
||||
BAOTAPANEL: `${ACCESS_PROVIDERS.BAOTAPANEL}`,
|
||||
BAOTAPANEL_CONSOLE: `${ACCESS_PROVIDERS.BAOTAPANEL}-console`,
|
||||
BAOTAPANEL_SITE: `${ACCESS_PROVIDERS.BAOTAPANEL}-site`,
|
||||
BAOTAPANELGO: `${ACCESS_PROVIDERS.BAOTAPANELGO}`,
|
||||
BAOTAPANELGO_CONSOLE: `${ACCESS_PROVIDERS.BAOTAPANELGO}-console`,
|
||||
BAOTAPANELGO_SITE: `${ACCESS_PROVIDERS.BAOTAPANELGO}-site`,
|
||||
BAOTAWAF: `${ACCESS_PROVIDERS.BAOTAWAF}`,
|
||||
BAOTAWAF_CONSOLE: `${ACCESS_PROVIDERS.BAOTAWAF}-console`,
|
||||
BAOTAWAF_SITE: `${ACCESS_PROVIDERS.BAOTAWAF}-site`,
|
||||
BUNNY_CDN: `${ACCESS_PROVIDERS.BUNNY}-cdn`,
|
||||
BYTEPLUS_CDN: `${ACCESS_PROVIDERS.BYTEPLUS}-cdn`,
|
||||
CACHEFLY: `${ACCESS_PROVIDERS.CACHEFLY}`,
|
||||
CDNFLY: `${ACCESS_PROVIDERS.CDNFLY}`,
|
||||
CPANEL_SITE: `${ACCESS_PROVIDERS.CPANEL}-site`,
|
||||
CPANEL: `${ACCESS_PROVIDERS.CPANEL}`,
|
||||
CTCCCLOUD_AO: `${ACCESS_PROVIDERS.CTCCCLOUD}-ao`,
|
||||
CTCCCLOUD_CDN: `${ACCESS_PROVIDERS.CTCCCLOUD}-cdn`,
|
||||
CTCCCLOUD_CMS: `${ACCESS_PROVIDERS.CTCCCLOUD}-cms`,
|
||||
@@ -602,15 +602,15 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({
|
||||
LECDN: `${ACCESS_PROVIDERS.LECDN}`,
|
||||
LOCAL: `${ACCESS_PROVIDERS.LOCAL}`,
|
||||
MOHUA_MVH: `${ACCESS_PROVIDERS.MOHUA}-mvh`,
|
||||
NETLIFY_SITE: `${ACCESS_PROVIDERS.NETLIFY}-site`,
|
||||
NETLIFY: `${ACCESS_PROVIDERS.NETLIFY}`,
|
||||
PROXMOXVE: `${ACCESS_PROVIDERS.PROXMOXVE}`,
|
||||
QINIU_CDN: `${ACCESS_PROVIDERS.QINIU}-cdn`,
|
||||
QINIU_KODO: `${ACCESS_PROVIDERS.QINIU}-kodo`,
|
||||
QINIU_PILI: `${ACCESS_PROVIDERS.QINIU}-pili`,
|
||||
RAINYUN_RCDN: `${ACCESS_PROVIDERS.RAINYUN}-rcdn`,
|
||||
RATPANEL: `${ACCESS_PROVIDERS.RATPANEL}`,
|
||||
RATPANEL_CONSOLE: `${ACCESS_PROVIDERS.RATPANEL}-console`,
|
||||
RATPANEL_SITE: `${ACCESS_PROVIDERS.RATPANEL}-site`,
|
||||
SAFELINE_SITE: `${ACCESS_PROVIDERS.SAFELINE}-site`,
|
||||
SAFELINE: `${ACCESS_PROVIDERS.SAFELINE}`,
|
||||
SSH: `${ACCESS_PROVIDERS.SSH}`,
|
||||
TENCENTCLOUD_CDN: `${ACCESS_PROVIDERS.TENCENTCLOUD}-cdn`,
|
||||
TENCENTCLOUD_CLB: `${ACCESS_PROVIDERS.TENCENTCLOUD}-clb`,
|
||||
@@ -771,25 +771,25 @@ export const deploymentProvidersMap: Map<DeploymentProvider["type"] | string, De
|
||||
[DEPLOYMENT_PROVIDERS.CACHEFLY, "provider.cachefly", DEPLOYMENT_CATEGORIES.CDN],
|
||||
[DEPLOYMENT_PROVIDERS.GCORE_CDN, "provider.gcore_cdn", DEPLOYMENT_CATEGORIES.CDN],
|
||||
[DEPLOYMENT_PROVIDERS.MOHUA_MVH, "provider.mohua_mvh", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.NETLIFY_SITE, "provider.netlify_site", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.NETLIFY, "provider.netlify", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.CDNFLY, "provider.cdnfly", DEPLOYMENT_CATEGORIES.CDN],
|
||||
[DEPLOYMENT_PROVIDERS.FLEXCDN, "provider.flexcdn", DEPLOYMENT_CATEGORIES.CDN],
|
||||
[DEPLOYMENT_PROVIDERS.GOEDGE, "provider.goedge", DEPLOYMENT_CATEGORIES.CDN],
|
||||
[DEPLOYMENT_PROVIDERS.LECDN, "provider.lecdn", DEPLOYMENT_CATEGORIES.CDN],
|
||||
[DEPLOYMENT_PROVIDERS["1PANEL_SITE"], "provider.1panel_site", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS["1PANEL"], "provider.1panel", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS["1PANEL_CONSOLE"], "provider.1panel_console", DEPLOYMENT_CATEGORIES.OTHER],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANEL_SITE, "provider.baotapanel_site", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANEL, "provider.baotapanel.abbr", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANEL_CONSOLE, "provider.baotapanel_console", DEPLOYMENT_CATEGORIES.OTHER],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANELGO_SITE, "provider.baotapanelgo_site", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANELGO, "provider.baotapanelgo.abbr", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAPANELGO_CONSOLE, "provider.baotapanelgo_console", DEPLOYMENT_CATEGORIES.OTHER],
|
||||
[DEPLOYMENT_PROVIDERS.RATPANEL_SITE, "provider.ratpanel_site", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.RATPANEL, "provider.ratpanel.abbr", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.RATPANEL_CONSOLE, "provider.ratpanel_console", DEPLOYMENT_CATEGORIES.OTHER],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAWAF_SITE, "provider.baotawaf_site", DEPLOYMENT_CATEGORIES.FIREWALL],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAWAF, "provider.baotawaf.abbr", DEPLOYMENT_CATEGORIES.FIREWALL],
|
||||
[DEPLOYMENT_PROVIDERS.BAOTAWAF_CONSOLE, "provider.baotawaf_console", DEPLOYMENT_CATEGORIES.OTHER],
|
||||
[DEPLOYMENT_PROVIDERS.SAFELINE_SITE, "provider.safeline_site", DEPLOYMENT_CATEGORIES.FIREWALL],
|
||||
[DEPLOYMENT_PROVIDERS.SAFELINE, "provider.safeline", DEPLOYMENT_CATEGORIES.FIREWALL],
|
||||
[DEPLOYMENT_PROVIDERS.APISIX, "provider.apisix", DEPLOYMENT_CATEGORIES.APIGATEWAY],
|
||||
[DEPLOYMENT_PROVIDERS.KONG, "provider.kong", DEPLOYMENT_CATEGORIES.APIGATEWAY],
|
||||
[DEPLOYMENT_PROVIDERS.CPANEL_SITE, "provider.cpanel_site", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.CPANEL, "provider.cpanel", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.DOKPLOY, "provider.dokploy", DEPLOYMENT_CATEGORIES.WEBSITE],
|
||||
[DEPLOYMENT_PROVIDERS.PROXMOXVE, "provider.proxmoxve", DEPLOYMENT_CATEGORIES.OTHER],
|
||||
] satisfies Array<[DeploymentProviderType, string, DeploymentCategoryType, "builtin"] | [DeploymentProviderType, string, DeploymentCategoryType]>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"provider.1panel": "1Panel",
|
||||
"provider.1panel_console": "1Panel - Console itself",
|
||||
"provider.1panel_site": "1Panel - Website",
|
||||
"provider.35cn": "35.cn",
|
||||
"provider.51dnscom": "51DNS.com",
|
||||
"provider.acmeca": "ACME Custom CA Endpoint",
|
||||
@@ -48,14 +47,14 @@
|
||||
"provider.baishan": "Baishan",
|
||||
"provider.baishan_cdn": "Baishan - CDN (Content Delivery Network)",
|
||||
"provider.baotapanel": "aaPanel (aka BaotaPanel)",
|
||||
"provider.baotapanel.abbr": "aaPanel",
|
||||
"provider.baotapanel_console": "aaPanel - Console itself",
|
||||
"provider.baotapanel_site": "aaPanel - Website",
|
||||
"provider.baotapanelgo": "aaPanel WinGo (aka BaotaPanel WinGo)",
|
||||
"provider.baotapanelgo.abbr": "aaPanel WinGo",
|
||||
"provider.baotapanelgo_console": "aaPanel WinGo - Console itself",
|
||||
"provider.baotapanelgo_site": "aaPanel WinGo - Website",
|
||||
"provider.baotawaf": "aaWAF (aka BaotaWAF)",
|
||||
"provider.baotawaf.abbr": "aaWAF",
|
||||
"provider.baotawaf_console": "aaWAF - Console itself",
|
||||
"provider.baotawaf_site": "aaWAF - Website",
|
||||
"provider.bookmyname": "BookMyName",
|
||||
"provider.bunny": "Bunny",
|
||||
"provider.bunny_cdn": "Bunny - CDN (Content Delivery Network)",
|
||||
@@ -69,7 +68,6 @@
|
||||
"provider.cmcccloud_dns": "China Mobile ECloud - DNS",
|
||||
"provider.constellix": "Constellix",
|
||||
"provider.cpanel": "cPanel",
|
||||
"provider.cpanel_site": "cPanel - Website",
|
||||
"provider.ctcccloud": "China Telecom StateCloud",
|
||||
"provider.ctcccloud_ao": "China Telecom StateCloud - AccessOne",
|
||||
"provider.ctcccloud_cdn": "China Telecom StateCloud - CDN (Content Delivery Network)",
|
||||
@@ -142,7 +140,6 @@
|
||||
"provider.namesilo": "NameSilo",
|
||||
"provider.netcup": "netcup",
|
||||
"provider.netlify": "Netlify",
|
||||
"provider.netlify_site": "Netlify - Site",
|
||||
"provider.ovhcloud": "OVHcloud",
|
||||
"provider.ns1": "NS1 (IBM NS1 Connect)",
|
||||
"provider.porkbun": "Porkbun",
|
||||
@@ -157,12 +154,11 @@
|
||||
"provider.rainyun": "Rain Yun",
|
||||
"provider.rainyun_rcdn": "Rain Yun - RCDN (Content Delivery Network)",
|
||||
"provider.ratpanel": "AcePanel (aka RatPanel)",
|
||||
"provider.ratpanel.abbr": "AcePanel",
|
||||
"provider.ratpanel_console": "AcePanel - Console itself",
|
||||
"provider.ratpanel_site": "AcePanel - Website",
|
||||
"provider.rfc2136": "RFC 2136: Dynamic DNS Updates",
|
||||
"provider.s3": "Object storage (S3-compatible)",
|
||||
"provider.safeline": "SafeLine",
|
||||
"provider.safeline_site": "SafeLine - Website",
|
||||
"provider.sectigo": "Sectigo",
|
||||
"provider.slackbot": "Slack Bot",
|
||||
"provider.spaceship": "Spaceship",
|
||||
|
||||
@@ -228,24 +228,24 @@
|
||||
"workflow_node.deploy.form.shared_domain_match_pattern.option.certsan.label": "via Certificate",
|
||||
"workflow_node.deploy.form.shared_domain_match_pattern.help_wildcard": "Notes: For the sites which support wildcard resolution, an <strong>exact match</strong> of a wildcard domain only includes the site itself, does not include its subdomains.",
|
||||
"workflow_node.deploy.form.shared_script_command.vartips": "Supported variables: <br><ol style=\"list-style: disc;\"><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_CERTIFICATE_PATH}</strong>: <br>The path of the certificate file, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_CERTIFICATE_SERVER_PATH}</strong>: <br>The path of the server certificate file, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_CERTIFICATE_INTERMEDIA_PATH}</strong>: <br>The path of the intermediate CA certificate file, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_PRIVATEKEY_PATH}</strong>: <br>The path of the private key file, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_PFX_PASSWORD}</strong>: <br>The PFX password, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_JKS_ALIAS}</strong>: <br>The JKS alias, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_JKS_KEYPASS}</strong>: <br>The JKS key password, same as the value of the form related field.</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_JKS_STOREPASS}</strong>: <br>The JKS store password, same as the value of the form related field.</li></ol>",
|
||||
"workflow_node.deploy.form.1panel_node_name.label": "1Panel node name (Optional)",
|
||||
"workflow_node.deploy.form.1panel_node_name.placeholder": "Please enter 1Panel node name",
|
||||
"workflow_node.deploy.form.1panel_node_name.help": "Notes: Only used for 1Panel v2+.",
|
||||
"workflow_node.deploy.form.1panel_node_name.tooltip": "You can find it on 1Panel dashboard.",
|
||||
"workflow_node.deploy.form.1panel_resource_type.option.website.label": "Website",
|
||||
"workflow_node.deploy.form.1panel_resource_type.option.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.label": "Website match pattern",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.placeholder": "Please select website match pattern",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.option.specified.label": "Specified ID",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.option.certsan.label": "via Certificate",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.help_certsan": "Notes: The website name should be a domain name and include SSL configurations.",
|
||||
"workflow_node.deploy.form.1panel_website_id.label": "1Panel website ID",
|
||||
"workflow_node.deploy.form.1panel_website_id.placeholder": "Please enter 1Panel website ID",
|
||||
"workflow_node.deploy.form.1panel_website_id.tooltip": "You can find it on 1Panel dashboard.",
|
||||
"workflow_node.deploy.form.1panel_certificate_id.label": "1Panel certificate ID",
|
||||
"workflow_node.deploy.form.1panel_certificate_id.placeholder": "Please enter 1Panel certificate ID",
|
||||
"workflow_node.deploy.form.1panel_certificate_id.tooltip": "You can find it on 1Panel dashboard.",
|
||||
"workflow_node.deploy.form.1panel_console_auto_restart.label": "Auto restart 1Panel after deployment",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.label": "1Panel node name (Optional)",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.placeholder": "Please enter 1Panel node name",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.help": "Notes: Only used for 1Panel v2+.",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.tooltip": "You can find it on 1Panel dashboard.",
|
||||
"workflow_node.deploy.form.1panel_site_resource_type.option.website.label": "Website",
|
||||
"workflow_node.deploy.form.1panel_site_resource_type.option.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.label": "Website match pattern",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.placeholder": "Please select website match pattern",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.option.specified.label": "Specified ID",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.option.certsan.label": "via Certificate",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.help_certsan": "Notes: The website name should be a domain name and include SSL configurations.",
|
||||
"workflow_node.deploy.form.1panel_site_website_id.label": "1Panel website ID",
|
||||
"workflow_node.deploy.form.1panel_site_website_id.placeholder": "Please enter 1Panel website ID",
|
||||
"workflow_node.deploy.form.1panel_site_website_id.tooltip": "You can find it on 1Panel dashboard.",
|
||||
"workflow_node.deploy.form.1panel_site_certificate_id.label": "1Panel certificate ID",
|
||||
"workflow_node.deploy.form.1panel_site_certificate_id.placeholder": "Please enter 1Panel certificate ID",
|
||||
"workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "You can find it on 1Panel dashboard.",
|
||||
"workflow_node.deploy.form.aliyun_alb_region.label": "Alibaba Cloud region",
|
||||
"workflow_node.deploy.form.aliyun_alb_region.placeholder": "Please enter Alibaba Cloud ALB region (e.g. cn-hangzhou)",
|
||||
"workflow_node.deploy.form.aliyun_alb_region.tooltip": "For more information, see <a href=\"https://www.alibabacloud.com/help/en/slb/application-load-balancer/product-overview/supported-regions-and-zones\" target=\"_blank\">https://www.alibabacloud.com/help/en/slb/application-load-balancer/product-overview/supported-regions-and-zones</a>",
|
||||
@@ -467,9 +467,7 @@
|
||||
"workflow_node.deploy.form.baishan_cdn_certificate_id.label": "Baishan Cloud CDN certificate ID",
|
||||
"workflow_node.deploy.form.baishan_cdn_certificate_id.placeholder": "Please enter Baishan Cloud CDN certificate ID",
|
||||
"workflow_node.deploy.form.baishan_cdn_certificate_id.tooltip": "For more information, see <a href=\"https://cdnx.console.baishan.com/#/cdn/cert\" target=\"_blank\">https://cdnx.console.baishan.com/#/cdn/cert</a>",
|
||||
"workflow_node.deploy.form.baotapanel_console.guide": "Requires aaPanel v8.3+ or higher.",
|
||||
"workflow_node.deploy.form.baotapanel_console_auto_restart.label": "Auto restart aaPanel after deployment",
|
||||
"workflow_node.deploy.form.baotapanel_site.guide": "Requires aaPanel v8.3 or higher.",
|
||||
"workflow_node.deploy.form.baotapanel.guide": "Requires aaPanel v8.3 or higher.",
|
||||
"workflow_node.deploy.form.baotapanel_site_type.label": "aaPanel website type",
|
||||
"workflow_node.deploy.form.baotapanel_site_type.placeholder": "Please select aaPanel website type",
|
||||
"workflow_node.deploy.form.baotapanel_site_type.option.php.label": "PHP sites",
|
||||
@@ -481,6 +479,8 @@
|
||||
"workflow_node.deploy.form.baotapanel_site_names.tooltip": "You can find it on aaPanel dashboard.",
|
||||
"workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.title": "Change aaPanel website names",
|
||||
"workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.placeholder": "Please enter aaPanel website name",
|
||||
"workflow_node.deploy.form.baotapanel_console.guide": "Requires aaPanel v8.3+ or higher.",
|
||||
"workflow_node.deploy.form.baotapanel_console_auto_restart.label": "Auto restart aaPanel after deployment",
|
||||
"workflow_node.deploy.form.baotapanelgo_site_type.label": "aaPanel WinGo website type",
|
||||
"workflow_node.deploy.form.baotapanelgo_site_type.placeholder": "Please select aaPanel WinGo website type",
|
||||
"workflow_node.deploy.form.baotapanelgo_site_type.option.php.label": "PHP Project",
|
||||
@@ -515,7 +515,7 @@
|
||||
"workflow_node.deploy.form.bunny_cdn_hostname.tooltip": "What is this? See <a href=\"https://dash.bunny.net/cdn\" target=\"_blank\">https://dash.bunny.net/cdn</a>",
|
||||
"workflow_node.deploy.form.byteplus_cdn_domain.label": "BytePlus CDN domain",
|
||||
"workflow_node.deploy.form.byteplus_cdn_domain.placeholder": "Please enter BytePlus CDN domain name",
|
||||
"workflow_node.deploy.form.cdnfly_resource_type.option.site.label": "Site",
|
||||
"workflow_node.deploy.form.cdnfly_resource_type.option.website.label": "Website",
|
||||
"workflow_node.deploy.form.cdnfly_resource_type.option.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.cdnfly_site_id.label": "Cdnfly website ID",
|
||||
"workflow_node.deploy.form.cdnfly_site_id.placeholder": "Please enter Cdnfly website ID",
|
||||
@@ -523,8 +523,9 @@
|
||||
"workflow_node.deploy.form.cdnfly_certificate_id.label": "Cdnfly certificate ID",
|
||||
"workflow_node.deploy.form.cdnfly_certificate_id.placeholder": "Please enter Cdnfly certificate ID",
|
||||
"workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "You can find it on Cdnfly dashboard.",
|
||||
"workflow_node.deploy.form.cpanel_site_domain.label": "cPanel website domain",
|
||||
"workflow_node.deploy.form.cpanel_site_domain.placeholder": "Please enter cPanel website domain",
|
||||
"workflow_node.deploy.form.cpanel_resource_type.option.website.label": "Website",
|
||||
"workflow_node.deploy.form.cpanel_domain.label": "cPanel website domain",
|
||||
"workflow_node.deploy.form.cpanel_domain.placeholder": "Please enter cPanel website domain",
|
||||
"workflow_node.deploy.form.ctcccloud_ao_domain.label": "CTCC StateCloud AccessOne domain",
|
||||
"workflow_node.deploy.form.ctcccloud_ao_domain.placeholder": "Please enter CTCC StateCloud AccessOne domain name",
|
||||
"workflow_node.deploy.form.ctcccloud_cdn_domain.label": "CTCC StateCloud CDN domain",
|
||||
@@ -724,6 +725,7 @@
|
||||
"workflow_node.deploy.form.mohua_mvh_domain_id.label": "Mohua Cloud virtual host domain ID",
|
||||
"workflow_node.deploy.form.mohua_mvh_domain_id.placeholder": "Please enter Mohua Cloud virtual host domain ID",
|
||||
"workflow_node.deploy.form.mohua_mvh_domain_id.tooltip": "For more information, see <a href=\"https://cloud.mhjz1.cn/service?groupid=328&language=english\" target=\"_blank\">https://cloud.mhjz1.cn/service?groupid=328&language=english</a>",
|
||||
"workflow_node.deploy.form.netlify_resource_type.option.website.label": "Website",
|
||||
"workflow_node.deploy.form.netlify_site_id.label": "Netlify website ID",
|
||||
"workflow_node.deploy.form.netlify_site_id.placeholder": "Please enter Netlify website ID",
|
||||
"workflow_node.deploy.form.netlify_site_id.tooltip": "For more information, see <a href=\"https://docs.netlify.com/api/get-started/#get-site\" target=\"_blank\">https://docs.netlify.com/api/get-started/#get-site</a>",
|
||||
@@ -751,6 +753,7 @@
|
||||
"workflow_node.deploy.form.rainyun_rcdn_certificate_id.label": "Rain Yun RCDN certificate ID",
|
||||
"workflow_node.deploy.form.rainyun_rcdn_certificate_id.placeholder": "Please enter Rain Yun RCDN certificate ID",
|
||||
"workflow_node.deploy.form.rainyun_rcdn_certificate_id.tooltip": "For more information, see <a href=\"https://app.rainyun.com/apps/ssl/list\" target=\"_blank\">https://app.rainyun.com/apps/ssl/list</a>",
|
||||
"workflow_node.deploy.form.ratpanel_resource_type.option.website.label": "Website",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.label": "AcePanel website names",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.placeholder": "Please enter AcePanel website names (separated by semicolons)",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.errmsg.invalid": "Please enter a valid AcePanel website name",
|
||||
@@ -758,10 +761,10 @@
|
||||
"workflow_node.deploy.form.ratpanel_site_names.tooltip": "You can find it on AcePanel dashboard.",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.title": "Change AcePanel website names",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.placeholder": "Please enter AcePanel website name",
|
||||
"workflow_node.deploy.form.safeline_site_resource_type.option.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.safeline_site_certificate_id.label": "SafeLine certificate ID",
|
||||
"workflow_node.deploy.form.safeline_site_certificate_id.placeholder": "Please enter SafeLine certificate ID",
|
||||
"workflow_node.deploy.form.safeline_site_certificate_id.tooltip": "You can find it on SafeLine dashboard.",
|
||||
"workflow_node.deploy.form.safeline_resource_type.option.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.safeline_certificate_id.label": "SafeLine certificate ID",
|
||||
"workflow_node.deploy.form.safeline_certificate_id.placeholder": "Please enter SafeLine certificate ID",
|
||||
"workflow_node.deploy.form.safeline_certificate_id.tooltip": "You can find it on SafeLine dashboard.",
|
||||
"workflow_node.deploy.form.ssh_format.label": "File format",
|
||||
"workflow_node.deploy.form.ssh_format.placeholder": "Please select file format",
|
||||
"workflow_node.deploy.form.ssh_format.option.pem.label": "PEM (*.pem, *.crt, *.key)",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"provider.1panel": "1Panel",
|
||||
"provider.1panel_console": "1Panel - 面板自身",
|
||||
"provider.1panel_site": "1Panel - 网站",
|
||||
"provider.35cn": "三五互联",
|
||||
"provider.51dnscom": "帝恩思(51DNS)",
|
||||
"provider.acmeca": "ACME 自定义 CA 端点",
|
||||
@@ -48,14 +47,14 @@
|
||||
"provider.baishan": "白山云",
|
||||
"provider.baishan_cdn": "白山云 - 内容分发网络 CDN",
|
||||
"provider.baotapanel": "宝塔面板(又名:aaPanel)",
|
||||
"provider.baotapanel.abbr": "宝塔面板",
|
||||
"provider.baotapanel_console": "宝塔面板 - 面板自身",
|
||||
"provider.baotapanel_site": "宝塔面板 - 网站",
|
||||
"provider.baotapanelgo": "宝塔面板极速版(又名:aaPanel WinGo)",
|
||||
"provider.baotapanelgo.abbr": "宝塔面板极速版",
|
||||
"provider.baotapanelgo_console": "宝塔面板极速版 - 面板自身",
|
||||
"provider.baotapanelgo_site": "宝塔面板极速版 - 网站",
|
||||
"provider.baotawaf": "堡塔云 WAF(又名:aaWAF)",
|
||||
"provider.baotawaf.abbr": "堡塔云 WAF",
|
||||
"provider.baotawaf_console": "堡塔云 WAF - 面板自身",
|
||||
"provider.baotawaf_site": "堡塔云 WAF - 网站",
|
||||
"provider.bookmyname": "BookMyName",
|
||||
"provider.bunny": "Bunny",
|
||||
"provider.bunny_cdn": "Bunny - 内容分发网络 CDN",
|
||||
@@ -69,7 +68,6 @@
|
||||
"provider.cmcccloud_dns": "移动云 - 云解析 DNS",
|
||||
"provider.constellix": "Constellix",
|
||||
"provider.cpanel": "cPanel",
|
||||
"provider.cpanel_site": "cPanel - 网站",
|
||||
"provider.ctcccloud": "天翼云",
|
||||
"provider.ctcccloud_ao": "天翼云 - 边缘安全加速平台 AccessOne",
|
||||
"provider.ctcccloud_cdn": "天翼云 - 内容分发网络 CDN",
|
||||
@@ -142,7 +140,6 @@
|
||||
"provider.namesilo": "NameSilo",
|
||||
"provider.netcup": "netcup",
|
||||
"provider.netlify": "Netlify",
|
||||
"provider.netlify_site": "Netlify - 网站",
|
||||
"provider.ns1": "NS1 (IBM NS1 Connect)",
|
||||
"provider.ovhcloud": "OVHcloud",
|
||||
"provider.porkbun": "Porkbun",
|
||||
@@ -157,12 +154,11 @@
|
||||
"provider.rainyun": "雨云",
|
||||
"provider.rainyun_rcdn": "雨云 - 雨盾 CDN",
|
||||
"provider.ratpanel": "耗子面板(又名:AcePanel)",
|
||||
"provider.ratpanel.abbr": "耗子面板",
|
||||
"provider.ratpanel_console": "耗子面板 - 面板自身",
|
||||
"provider.ratpanel_site": "耗子面板 - 网站",
|
||||
"provider.rfc2136": "RFC 2136: Dynamic DNS Updates",
|
||||
"provider.s3": "对象存储(S3 兼容)",
|
||||
"provider.safeline": "雷池",
|
||||
"provider.safeline_site": "雷池 - 网站",
|
||||
"provider.sectigo": "Sectigo",
|
||||
"provider.slackbot": "Slack 机器人",
|
||||
"provider.spaceship": "Spaceship",
|
||||
|
||||
@@ -227,24 +227,24 @@
|
||||
"workflow_node.deploy.form.shared_domain_match_pattern.option.certsan.label": "根据证书自动匹配",
|
||||
"workflow_node.deploy.form.shared_domain_match_pattern.help_wildcard": "注意:对于支持泛解析的站点,<strong>精确匹配</strong>一个泛域名仅包含该站点本身、不包括相关子域名站点。",
|
||||
"workflow_node.deploy.form.shared_script_command.vartips": "支持的变量:<br><ol style=\"list-style: disc;\"><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_CERTIFICATE_PATH}</strong>:<br>证书文件路径,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_CERTIFICATE_SERVER_PATH}</strong>:<br>证书文件(仅含服务器证书)路径,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_CERTIFICATE_INTERMEDIA_PATH}</strong>:<br>证书文件(仅含中间证书)路径,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_PRIVATEKEY_PATH}</strong>:<br>私钥文件路径,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_PFX_PASSWORD}</strong>:<br>PFX 导出密码,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_JKS_ALIAS}</strong>:<br>JKS 别名,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_JKS_KEYPASS}</strong>:<br>JKS 私钥访问口令,等同于表单中相应字段的值。</li><li><strong>${CERTIMATE_DEPLOYER_CMDVAR_JKS_STOREPASS}</strong>:<br>JKS 密钥库存储口令,等同于表单中相应字段的值。</li></ol>",
|
||||
"workflow_node.deploy.form.1panel_node_name.label": "1Panel 子节点名称(可选)",
|
||||
"workflow_node.deploy.form.1panel_node_name.placeholder": "请输入 1Panel 子节点名称",
|
||||
"workflow_node.deploy.form.1panel_node_name.help": "提示:仅 1Panel v2+ 需要填写。不填写时,将替换主控节点证书;否则,将替换被控节点证书。",
|
||||
"workflow_node.deploy.form.1panel_node_name.tooltip": "请登录 1Panel 面板查看",
|
||||
"workflow_node.deploy.form.1panel_resource_type.option.website.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.1panel_resource_type.option.certificate.label": "替换指定证书",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.label": "网站匹配模式",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.placeholder": "请选择部署网站匹配模式",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.option.specified.label": "指定 ID",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.option.certsan.label": "根据证书自动匹配",
|
||||
"workflow_node.deploy.form.1panel_website_match_pattern.help_certsan": "注意:网站名称需要为域名、且包含开启了 SSL 的域名配置。",
|
||||
"workflow_node.deploy.form.1panel_website_id.label": "1Panel 网站 ID",
|
||||
"workflow_node.deploy.form.1panel_website_id.placeholder": "请输入 1Panel 网站 ID",
|
||||
"workflow_node.deploy.form.1panel_website_id.tooltip": "请登录 1Panel 面板查看",
|
||||
"workflow_node.deploy.form.1panel_certificate_id.label": "1Panel 证书 ID",
|
||||
"workflow_node.deploy.form.1panel_certificate_id.placeholder": "请输入 1Panel 证书 ID",
|
||||
"workflow_node.deploy.form.1panel_certificate_id.tooltip": "请登录 1Panel 面板查看",
|
||||
"workflow_node.deploy.form.1panel_console_auto_restart.label": "部署后自动重启 1Panel 服务",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.label": "1Panel 子节点名称(可选)",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.placeholder": "请输入 1Panel 子节点名称",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.help": "提示:仅 1Panel v2+ 需要填写。不填写时,将替换主控节点证书;否则,将替换被控节点证书。",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.tooltip": "请登录 1Panel 面板查看",
|
||||
"workflow_node.deploy.form.1panel_site_resource_type.option.website.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.1panel_site_resource_type.option.certificate.label": "替换指定证书",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.label": "网站匹配模式",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.placeholder": "请选择部署网站匹配模式",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.option.specified.label": "指定 ID",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.option.certsan.label": "根据证书自动匹配",
|
||||
"workflow_node.deploy.form.1panel_site_website_match_pattern.help_certsan": "注意:网站名称需要为域名、且包含开启了 SSL 的域名配置。",
|
||||
"workflow_node.deploy.form.1panel_site_website_id.label": "1Panel 网站 ID",
|
||||
"workflow_node.deploy.form.1panel_site_website_id.placeholder": "请输入 1Panel 网站 ID",
|
||||
"workflow_node.deploy.form.1panel_site_website_id.tooltip": "请登录 1Panel 面板查看",
|
||||
"workflow_node.deploy.form.1panel_site_certificate_id.label": "1Panel 证书 ID",
|
||||
"workflow_node.deploy.form.1panel_site_certificate_id.placeholder": "请输入 1Panel 证书 ID",
|
||||
"workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "请登录 1Panel 面板查看",
|
||||
"workflow_node.deploy.form.aliyun_alb_region.label": "阿里云服务地域",
|
||||
"workflow_node.deploy.form.aliyun_alb_region.placeholder": "请输入阿里云 ALB 服务地域(例如:cn-hangzhou)",
|
||||
"workflow_node.deploy.form.aliyun_alb_region.tooltip": "这是什么?请参阅 <a href=\"https://help.aliyun.com/zh/slb/application-load-balancer/product-overview/supported-regions-and-zones\" target=\"_blank\">https://help.aliyun.com/zh/slb/application-load-balancer/product-overview/supported-regions-and-zones</a>",
|
||||
@@ -466,9 +466,7 @@
|
||||
"workflow_node.deploy.form.baishan_cdn_certificate_id.label": "白山云 CDN 证书 ID",
|
||||
"workflow_node.deploy.form.baishan_cdn_certificate_id.placeholder": "请输入白山云 CDN 证书 ID",
|
||||
"workflow_node.deploy.form.baishan_cdn_certificate_id.tooltip": "这是什么?请参阅 <a href=\"https://cdnx.console.baishan.com/#/cdn/cert\" target=\"_blank\">https://cdnx.console.baishan.com/#/cdn/cert</a>",
|
||||
"workflow_node.deploy.form.baotapanel_console.guide": "需要宝塔面板 v8.3 或更高版本。",
|
||||
"workflow_node.deploy.form.baotapanel_console_auto_restart.label": "部署后自动重启宝塔面板服务",
|
||||
"workflow_node.deploy.form.baotapanel_site.guide": "需要宝塔面板 v8.3 或更高版本。",
|
||||
"workflow_node.deploy.form.baotapanel.guide": "需要宝塔面板 v8.3 或更高版本。",
|
||||
"workflow_node.deploy.form.baotapanel_site_type.label": "宝塔面板网站类型",
|
||||
"workflow_node.deploy.form.baotapanel_site_type.placeholder": "请选择宝塔面板网站类型",
|
||||
"workflow_node.deploy.form.baotapanel_site_type.option.php.label": "PHP",
|
||||
@@ -480,6 +478,8 @@
|
||||
"workflow_node.deploy.form.baotapanel_site_names.tooltip": "请登录宝塔面板查看",
|
||||
"workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.title": "修改宝塔面板网站名称",
|
||||
"workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.placeholder": "请输入宝塔面板网站名称",
|
||||
"workflow_node.deploy.form.baotapanel_console.guide": "需要宝塔面板 v8.3 或更高版本。",
|
||||
"workflow_node.deploy.form.baotapanel_console_auto_restart.label": "部署后自动重启宝塔面板服务",
|
||||
"workflow_node.deploy.form.baotapanelgo_site_type.label": "宝塔面板极速版网站类型",
|
||||
"workflow_node.deploy.form.baotapanelgo_site_type.placeholder": "请选择宝塔面板极速版网站类型",
|
||||
"workflow_node.deploy.form.baotapanelgo_site_type.option.php.label": "PHP 项目",
|
||||
@@ -514,7 +514,7 @@
|
||||
"workflow_node.deploy.form.bunny_cdn_hostname.tooltip": "这是什么?请参阅 <a href=\"https://dash.bunny.net/cdn\" target=\"_blank\">https://dash.bunny.net/cdn</a>",
|
||||
"workflow_node.deploy.form.byteplus_cdn_domain.label": "BytePlus CDN 域名",
|
||||
"workflow_node.deploy.form.byteplus_cdn_domain.placeholder": "请输入 BytePlus CDN 域名",
|
||||
"workflow_node.deploy.form.cdnfly_resource_type.option.site.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.cdnfly_resource_type.option.website.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.cdnfly_resource_type.option.certificate.label": "替换指定证书",
|
||||
"workflow_node.deploy.form.cdnfly_site_id.label": "Cdnfly 网站 ID",
|
||||
"workflow_node.deploy.form.cdnfly_site_id.placeholder": "请输入 Cdnfly 网站 ID",
|
||||
@@ -522,8 +522,9 @@
|
||||
"workflow_node.deploy.form.cdnfly_certificate_id.label": "Cdnfly 证书 ID",
|
||||
"workflow_node.deploy.form.cdnfly_certificate_id.placeholder": "请输入 Cdnfly 证书 ID",
|
||||
"workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "请登录 Cdnfly 控制台查看",
|
||||
"workflow_node.deploy.form.cpanel_site_domain.label": "cPanel 网站域名",
|
||||
"workflow_node.deploy.form.cpanel_site_domain.placeholder": "请输入 cPanel 网站域名",
|
||||
"workflow_node.deploy.form.cpanel_resource_type.option.website.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.cpanel_domain.label": "cPanel 网站域名",
|
||||
"workflow_node.deploy.form.cpanel_domain.placeholder": "请输入 cPanel 网站域名",
|
||||
"workflow_node.deploy.form.ctcccloud_ao_domain.label": "天翼云 AccessOne 加速域名",
|
||||
"workflow_node.deploy.form.ctcccloud_ao_domain.placeholder": "请输入天翼云 AccessOne 加速域名",
|
||||
"workflow_node.deploy.form.ctcccloud_cdn_domain.label": "天翼云 CDN 加速域名",
|
||||
@@ -722,6 +723,7 @@
|
||||
"workflow_node.deploy.form.mohua_mvh_domain_id.label": "嘿华云虚拟主机域名 ID",
|
||||
"workflow_node.deploy.form.mohua_mvh_domain_id.placeholder": "请输入嘿华云虚拟主机域名 ID",
|
||||
"workflow_node.deploy.form.mohua_mvh_domain_id.tooltip": "这是什么?请参阅 <a href=\"https://cloud.mhjz1.cn/service?groupid=328\" target=\"_blank\">https://cloud.mhjz1.cn/service?groupid=328</a>",
|
||||
"workflow_node.deploy.form.netlify_resource_type.option.website.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.netlify_site_id.label": "Netlify 网站 ID",
|
||||
"workflow_node.deploy.form.netlify_site_id.placeholder": "请输入 netlify 网站 ID",
|
||||
"workflow_node.deploy.form.netlify_site_id.tooltip": "这是什么?请参阅 <a href=\"https://docs.netlify.com/api/get-started/#get-site\" target=\"_blank\">https://docs.netlify.com/api/get-started/#get-site</a>",
|
||||
@@ -749,6 +751,7 @@
|
||||
"workflow_node.deploy.form.rainyun_rcdn_certificate_id.label": "雨云 RCDN 证书 ID",
|
||||
"workflow_node.deploy.form.rainyun_rcdn_certificate_id.placeholder": "请输入雨云 RCDN 证书 ID",
|
||||
"workflow_node.deploy.form.rainyun_rcdn_certificate_id.tooltip": "这是什么?请参阅 <a href=\"https://app.rainyun.com/apps/ssl/list\" target=\"_blank\">https://app.rainyun.com/apps/ssl/list</a>",
|
||||
"workflow_node.deploy.form.ratpanel_resource_type.option.website.label": "部署到指定网站",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.label": "耗子面板网站名称",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.placeholder": "请输入耗子面板网站名称(多个值请用半角分号隔开)",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.errmsg.invalid": "请输入正确的耗子面板网站名称",
|
||||
@@ -756,10 +759,10 @@
|
||||
"workflow_node.deploy.form.ratpanel_site_names.tooltip": "请登录耗子面板查看",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.title": "修改耗子面板网站名称",
|
||||
"workflow_node.deploy.form.ratpanel_site_names.multiple_input_modal.placeholder": "请输入耗子面板网站名称",
|
||||
"workflow_node.deploy.form.safeline_site_resource_type.option.certificate.label": "替换指定证书",
|
||||
"workflow_node.deploy.form.safeline_site_certificate_id.label": "雷池证书 ID",
|
||||
"workflow_node.deploy.form.safeline_site_certificate_id.placeholder": "请输入雷池证书 ID",
|
||||
"workflow_node.deploy.form.safeline_site_certificate_id.tooltip": "请登录雷池控制台查看",
|
||||
"workflow_node.deploy.form.safeline_resource_type.option.certificate.label": "替换指定证书",
|
||||
"workflow_node.deploy.form.safeline_certificate_id.label": "雷池证书 ID",
|
||||
"workflow_node.deploy.form.safeline_certificate_id.placeholder": "请输入雷池证书 ID",
|
||||
"workflow_node.deploy.form.safeline_certificate_id.tooltip": "请登录雷池控制台查看",
|
||||
"workflow_node.deploy.form.ssh_format.label": "文件格式",
|
||||
"workflow_node.deploy.form.ssh_format.placeholder": "请选择文件格式",
|
||||
"workflow_node.deploy.form.ssh_format.option.pem.label": "PEM 格式(*.pem, *.crt, *.key)",
|
||||
|
||||
Reference in New Issue
Block a user