diff --git a/go.mod b/go.mod
index 7318e37c0..88635d103 100644
--- a/go.mod
+++ b/go.mod
@@ -8,14 +8,14 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.19.1
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.13.0
github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azcertificates v1.4.0
- github.com/G-Core/gcorelabscdn-go v1.0.34
+ github.com/G-Core/gcorelabscdn-go v1.0.35
github.com/alibabacloud-go/alb-20200616/v2 v2.2.9
github.com/alibabacloud-go/apig-20240327/v5 v5.0.1
github.com/alibabacloud-go/cas-20200407/v4 v4.0.3
github.com/alibabacloud-go/cdn-20180510/v8 v8.0.2
github.com/alibabacloud-go/cloudapi-20160714/v5 v5.7.7
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.13
- github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.2
+ github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.4
github.com/alibabacloud-go/esa-20240910/v2 v2.39.2
github.com/alibabacloud-go/fc-20230330/v4 v4.6.3
github.com/alibabacloud-go/fc-open-20210406/v2 v2.0.12
@@ -25,18 +25,18 @@ require (
github.com/alibabacloud-go/slb-20140515/v4 v4.0.10
github.com/alibabacloud-go/tea v1.3.13
github.com/alibabacloud-go/vod-20170321/v4 v4.10.0
- github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.6.0
+ github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.7.0
github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.3.0
- github.com/aws/aws-sdk-go-v2/service/acm v1.37.6
- github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.2
- github.com/aws/aws-sdk-go-v2/service/iam v1.49.0
+ github.com/aws/aws-sdk-go-v2/service/acm v1.37.10
+ github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.3
+ github.com/aws/aws-sdk-go-v2/service/iam v1.49.1
github.com/baidubce/bce-sdk-go v0.9.250
github.com/byteplus-sdk/byteplus-sdk-golang v1.0.58
- github.com/go-acme/lego/v4 v4.27.0
+ github.com/go-acme/lego/v4 v4.28.0
github.com/go-cmd/cmd v1.4.3
github.com/go-resty/resty/v2 v2.16.5
github.com/go-viper/mapstructure/v2 v2.4.0
- github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.172
+ github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.173
github.com/jdcloud-api/jdcloud-sdk-go v1.64.0
github.com/kong/go-kong v0.69.0
github.com/libdns/dynv6 v1.0.0
@@ -59,10 +59,10 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.1.47
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.1.13
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.1.36
- github.com/ucloud/ucloud-sdk-go v0.22.54
+ github.com/ucloud/ucloud-sdk-go v0.22.56
github.com/volcengine/ve-tos-golang-sdk/v2 v2.7.21
- github.com/volcengine/volc-sdk-golang v1.0.224
- github.com/volcengine/volcengine-go-sdk v1.1.44
+ github.com/volcengine/volc-sdk-golang v1.0.225
+ github.com/volcengine/volcengine-go-sdk v1.1.46
github.com/xhit/go-str2duration/v2 v2.1.0
gitlab.ecloud.com/ecloud/ecloudsdkclouddns v1.0.1
gitlab.ecloud.com/ecloud/ecloudsdkcore v1.0.0
@@ -87,7 +87,7 @@ require (
github.com/alibabacloud-go/tea-oss-utils v1.1.0 // indirect
github.com/alibabacloud-go/tea-utils/v2 v2.0.7 // indirect
github.com/avast/retry-go v3.0.0+incompatible // indirect
- github.com/aws/aws-sdk-go-v2/service/route53 v1.58.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/route53 v1.59.1 // indirect
github.com/buger/goterm v1.0.4 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/diskfs/go-diskfs v1.5.0 // indirect
@@ -124,10 +124,9 @@ require (
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/namedotcom/go/v4 v4.0.2 // indirect
- github.com/nrdcg/bunny-go v0.0.0-20250327222614-988a091fc7ea // indirect
- github.com/nrdcg/desec v0.11.0 // indirect
+ github.com/nrdcg/bunny-go v0.1.0 // indirect
+ github.com/nrdcg/desec v0.11.1 // indirect
github.com/nrdcg/goacmedns v0.2.0 // indirect
- github.com/nrdcg/mailinabox v0.2.0 // indirect
github.com/nrdcg/porkbun v0.4.0 // indirect
github.com/peterhellberg/link v1.2.0 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
@@ -147,7 +146,7 @@ require (
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
- gopkg.in/ns1/ns1-go.v2 v2.15.0 // indirect
+ gopkg.in/ns1/ns1-go.v2 v2.15.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
@@ -169,18 +168,18 @@ require (
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
github.com/aliyun/credentials-go v1.4.7 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
- github.com/aws/aws-sdk-go-v2 v1.39.4
- github.com/aws/aws-sdk-go-v2/config v1.31.12
- github.com/aws/aws-sdk-go-v2/credentials v1.18.16
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 // indirect
+ github.com/aws/aws-sdk-go-v2 v1.39.5
+ github.com/aws/aws-sdk-go-v2/config v1.31.15
+ github.com/aws/aws-sdk-go-v2/credentials v1.18.19
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 // indirect
github.com/aws/smithy-go v1.23.1 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/clbanning/mxj/v2 v2.7.0 // indirect
diff --git a/go.sum b/go.sum
index 902855f03..02794a994 100644
--- a/go.sum
+++ b/go.sum
@@ -66,8 +66,8 @@ github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
-github.com/G-Core/gcorelabscdn-go v1.0.34 h1:Qpvd4xKGFSejBf9Fw+BrCbnvdm9/d/tfAAw94G7/0OE=
-github.com/G-Core/gcorelabscdn-go v1.0.34/go.mod h1:iSGXaTvZBzDHQW+rKFS918BgFVpONcyLEijwh8WsXpE=
+github.com/G-Core/gcorelabscdn-go v1.0.35 h1:7UFoL1jSb8e+JN1xxQisGE8gtflqx1vM1gH7wa9fa1E=
+github.com/G-Core/gcorelabscdn-go v1.0.35/go.mod h1:iSGXaTvZBzDHQW+rKFS918BgFVpONcyLEijwh8WsXpE=
github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
@@ -125,8 +125,8 @@ github.com/alibabacloud-go/darabonba-string v1.0.2 h1:E714wms5ibdzCqGeYJ9JCFywE5
github.com/alibabacloud-go/darabonba-string v1.0.2/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA=
github.com/alibabacloud-go/dcdn-20180115/v3 v3.5.0 h1:EQmKhYju6y38kJ1ZvZROeJG2Q1Wk6hlc8KQrVhvGyaw=
github.com/alibabacloud-go/dcdn-20180115/v3 v3.5.0/go.mod h1:b9qzvr/2V1f0r1Z6xUmkLqEouKcPGy4LCC22yV+6HQo=
-github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.2 h1:KvHAZ1yCJ6NnF6aeqhR0e8kuc7zCrUAkS7+2RyQaJJU=
-github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.2/go.mod h1:fBEEvkfQEp5k7yfMzU4n0zWcibHDoGfakv3YaopBdiI=
+github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.4 h1:7QCjt29gSpdF1/BXto4GJLozAshNPbR6Obo/8pXlao4=
+github.com/alibabacloud-go/ddoscoo-20200101/v4 v4.0.4/go.mod h1:EXd820TvsKZyYHxdkkAtPFqS5Cjp3zAmKxQ9yZ4YLCk=
github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY=
github.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc=
github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg=
@@ -193,8 +193,8 @@ github.com/alibabacloud-go/tea-xml v1.1.3 h1:7LYnm+JbOq2B+T/B0fHC4Ies4/FofC4zHzY
github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
github.com/alibabacloud-go/vod-20170321/v4 v4.10.0 h1:e28BNu9IRhCtHI5HA+2ZRG4r9SDftAyp258q9py2tRU=
github.com/alibabacloud-go/vod-20170321/v4 v4.10.0/go.mod h1:IkHD+fJL2oWvs9oxyp5Dc651AO5eptIP5PRsH0ofraA=
-github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.6.0 h1:UCKCmA7hnnSlGUCVF31Z8v/+3UloJtyqNGV/ITAtr7U=
-github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.6.0/go.mod h1:Pi1XJ9yMR6weUxPMDqVaT+mhHeeSPRdMZh2fl4VCKLs=
+github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.7.0 h1:PBX4pFYXV8Ey+QKJYV3G0AC7X926jTFG2zVd5gRkCL4=
+github.com/alibabacloud-go/waf-openapi-20211001/v6 v6.7.0/go.mod h1:Pi1XJ9yMR6weUxPMDqVaT+mhHeeSPRdMZh2fl4VCKLs=
github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.3.0 h1:wQlqotpyjYPjJz+Noh5bRu7Snmydk8SKC5Z6u1CR20Y=
github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.3.0/go.mod h1:FTzydeQVmR24FI0D6XWUOMKckjXehM/jgMn1xC+DA9M=
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
@@ -218,39 +218,39 @@ github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHS
github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
-github.com/aws/aws-sdk-go-v2 v1.39.4 h1:qTsQKcdQPHnfGYBBs+Btl8QwxJeoWcOcPcixK90mRhg=
-github.com/aws/aws-sdk-go-v2 v1.39.4/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM=
-github.com/aws/aws-sdk-go-v2/config v1.31.12 h1:pYM1Qgy0dKZLHX2cXslNacbcEFMkDMl+Bcj5ROuS6p8=
-github.com/aws/aws-sdk-go-v2/config v1.31.12/go.mod h1:/MM0dyD7KSDPR+39p9ZNVKaHDLb9qnfDurvVS2KAhN8=
-github.com/aws/aws-sdk-go-v2/credentials v1.18.16 h1:4JHirI4zp958zC026Sm+V4pSDwW4pwLefKrc0bF2lwI=
-github.com/aws/aws-sdk-go-v2/credentials v1.18.16/go.mod h1:qQMtGx9OSw7ty1yLclzLxXCRbrkjWAM7JnObZjmCB7I=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 h1:Mv4Bc0mWmv6oDuSWTKnk+wgeqPL5DRFu5bQL9BGPQ8Y=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9/go.mod h1:IKlKfRppK2a1y0gy1yH6zD+yX5uplJ6UuPlgd48dJiQ=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11 h1:7AANQZkF3ihM8fbdftpjhken0TP9sBzFbV/Ze/Y4HXA=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.11/go.mod h1:NTF4QCGkm6fzVwncpkFQqoquQyOolcyXfbpC98urj+c=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11 h1:ShdtWUZT37LCAA4Mw2kJAJtzaszfSHFb5n25sdcv4YE=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.11/go.mod h1:7bUb2sSr2MZ3M/N+VyETLTQtInemHXb/Fl3s8CLzm0Y=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
-github.com/aws/aws-sdk-go-v2/service/acm v1.37.6 h1:48oGbMpBSzihrU145gpjrxySIs+VNGCXu9kLTLAdJJg=
-github.com/aws/aws-sdk-go-v2/service/acm v1.37.6/go.mod h1:4Xgg9iUMFMpWd19UokmUwBCU6fqNJ7LPo11YYt3/xl4=
-github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.2 h1:MnDEmZz8maF6Ge2GaK6T16jqPDhyesUODhMheFqUBqU=
-github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.2/go.mod h1:Ql3i8VKmdfYCcDhG6OpVkGM60IN9fPDV/7aMHCH3lds=
+github.com/aws/aws-sdk-go-v2 v1.39.5 h1:e/SXuia3rkFtapghJROrydtQpfQaaUgd1cUvyO1mp2w=
+github.com/aws/aws-sdk-go-v2 v1.39.5/go.mod h1:yWSxrnioGUZ4WVv9TgMrNUeLV3PFESn/v+6T/Su8gnM=
+github.com/aws/aws-sdk-go-v2/config v1.31.15 h1:gE3M4xuNXfC/9bG4hyowGm/35uQTi7bUKeYs5e/6uvU=
+github.com/aws/aws-sdk-go-v2/config v1.31.15/go.mod h1:HvnvGJoE2I95KAIW8kkWVPJ4XhdrlvwJpV6pEzFQa8o=
+github.com/aws/aws-sdk-go-v2/credentials v1.18.19 h1:Jc1zzwkSY1QbkEcLujwqRTXOdvW8ppND3jRBb/VhBQc=
+github.com/aws/aws-sdk-go-v2/credentials v1.18.19/go.mod h1:DIfQ9fAk5H0pGtnqfqkbSIzky82qYnGvh06ASQXXg6A=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11 h1:X7X4YKb+c0rkI6d4uJ5tEMxXgCZ+jZ/D6mvkno8c8Uw=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.11/go.mod h1:EqM6vPZQsZHYvC4Cai35UDg/f5NCEU+vp0WfbVqVcZc=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12 h1:p/9flfXdoAnwJnuW9xHEAFY22R3A6skYkW19JFF9F+8=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.12/go.mod h1:ZTLHakoVCTtW8AaLGSwJ3LXqHD9uQKnOcv1TrpO6u2k=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12 h1:2lTWFvRcnWFFLzHWmtddu5MTchc5Oj2OOey++99tPZ0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.12/go.mod h1:hI92pK+ho8HVcWMHKHrK3Uml4pfG7wvL86FzO0LVtQQ=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
+github.com/aws/aws-sdk-go-v2/service/acm v1.37.10 h1:kORfSAFKQJuV+86FiEzSG4yDVPSBTPL2hcNdUHiTfjw=
+github.com/aws/aws-sdk-go-v2/service/acm v1.37.10/go.mod h1:socc8VxK7qg7mAEMa192VhUkNsikgtzsWHpAGGfSbfE=
+github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.3 h1:I1cy4m75ZT4A1pOdIS9gRiJ3Sp3oAQDnoSr7FdH0cWw=
+github.com/aws/aws-sdk-go-v2/service/cloudfront v1.55.3/go.mod h1:af/zNle59yEZVwKlGorGjIYteuW2QkFKIli28DsM26g=
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
-github.com/aws/aws-sdk-go-v2/service/iam v1.49.0 h1:3wiwzsfXBaykcbC4c6vaWkx9B46LXhFR8jyVMCZXK/k=
-github.com/aws/aws-sdk-go-v2/service/iam v1.49.0/go.mod h1:QvuzFFqvuknv43XjhxdWTMHt1ESYlQPaLJtb6iBlD3M=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1 h1:oegbebPEMA/1Jny7kvwejowCaHz1FWZAQ94WXFNCyTM=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.1/go.mod h1:kemo5Myr9ac0U9JfSjMo9yHLtw+pECEHsFtJ9tqCEI8=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9 h1:5r34CgVOD4WZudeEKZ9/iKpiT6cM1JyEROpXjOcdWv8=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.9/go.mod h1:dB12CEbNWPbzO2uC6QSWHteqOg4JfBVJOojbAoAUb5I=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.58.4 h1:KycXrohD5OxAZ5h02YechO2gevvoHfAPAaJM5l8zqb0=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.58.4/go.mod h1:xNLZLn4SusktBQ5moqUOgiDKGz3a7vHwF4W0KD+WBPc=
-github.com/aws/aws-sdk-go-v2/service/sso v1.29.6 h1:A1oRkiSQOWstGh61y4Wc/yQ04sqrQZr1Si/oAXj20/s=
-github.com/aws/aws-sdk-go-v2/service/sso v1.29.6/go.mod h1:5PfYspyCU5Vw1wNPsxi15LZovOnULudOQuVxphSflQA=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1 h1:5fm5RTONng73/QA73LhCNR7UT9RpFH3hR6HWL6bIgVY=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.1/go.mod h1:xBEjWD13h+6nq+z4AkqSfSvqRKFgDIQeaMguAJndOWo=
-github.com/aws/aws-sdk-go-v2/service/sts v1.38.6 h1:p3jIvqYwUZgu/XYeI48bJxOhvm47hZb5HUQ0tn6Q9kA=
-github.com/aws/aws-sdk-go-v2/service/sts v1.38.6/go.mod h1:WtKK+ppze5yKPkZ0XwqIVWD4beCwv056ZbPQNoeHqM8=
+github.com/aws/aws-sdk-go-v2/service/iam v1.49.1 h1:eTd/dueph9k4ZPn2s2uMmzDrBpwtRchhVxYk4ZT7SDU=
+github.com/aws/aws-sdk-go-v2/service/iam v1.49.1/go.mod h1:OZUVTVNvBruorgXsEUctXiCDdmho+pY+l5O1P3JtKxY=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2 h1:xtuxji5CS0JknaXoACOunXOYOQzgfTvGAc9s2QdCJA4=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.2/go.mod h1:zxwi0DIR0rcRcgdbl7E2MSOvxDyyXGBlScvBkARFaLQ=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11 h1:GpMf3z2KJa4RnJ0ew3Hac+hRFYLZ9DDjfgXjuW+pB54=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.11/go.mod h1:6MZP3ZI4QQsgUCFTwMZA2V0sEriNQ8k2hmoHF3qjimQ=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.59.1 h1:KuoA/cmy/yK8n9v/d6WH36cZwGxFOrn0TmZ4lNN3MKQ=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.59.1/go.mod h1:BymbICXBfXQHO6i+yTBhocA9a6DM0uMDQqYelqa9wzs=
+github.com/aws/aws-sdk-go-v2/service/sso v1.29.8 h1:M5nimZmugcZUO9wG7iVtROxPhiqyZX6ejS1lxlDPbTU=
+github.com/aws/aws-sdk-go-v2/service/sso v1.29.8/go.mod h1:mbef/pgKhtKRwrigPPs7SSSKZgytzP8PQ6P6JAAdqyM=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3 h1:S5GuJZpYxE0lKeMHKn+BRTz6PTFpgThyJ+5mYfux7BM=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.3/go.mod h1:X4OF+BTd7HIb3L+tc4UlWHVrpgwZZIVENU15pRDVTI0=
+github.com/aws/aws-sdk-go-v2/service/sts v1.38.9 h1:Ekml5vGg6sHSZLZJQJagefnVe6PmqC2oiRkBq4F7fU0=
+github.com/aws/aws-sdk-go-v2/service/sts v1.38.9/go.mod h1:/e15V+o1zFHWdH3u7lpI3rVBcxszktIKuHKCY2/py+k=
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M=
github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
@@ -351,8 +351,8 @@ github.com/ganigeorgiev/fexpr v0.5.0/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-acme/alidns-20150109/v4 v4.6.1 h1:Dch3aWRcw4U62+jKPjPQN3iW3TPvgIywATbvHzojXeo=
github.com/go-acme/alidns-20150109/v4 v4.6.1/go.mod h1:RBcqBA5IvUWtlpjx6dC6EkPVyBNLQ+mR18XoaP38BFY=
-github.com/go-acme/lego/v4 v4.27.0 h1:cIhWd7Uj4BNFLEF3IpwuMkukVVRs5qjlp4KdUGa75yU=
-github.com/go-acme/lego/v4 v4.27.0/go.mod h1:9FfNZHZmg6hf5CWOp4Lzo4gU8aBEvqZvrwdkBboa+4g=
+github.com/go-acme/lego/v4 v4.28.0 h1:URKsCcybo7SjqqZckeBcDN9Vl29/bKS///75tcNkMHQ=
+github.com/go-acme/lego/v4 v4.28.0/go.mod h1:bzjilr03IgbaOwlH396hq5W56Bi0/uoRwW/JM8hP7m4=
github.com/go-acme/tencentclouddnspod v1.1.10 h1:ERVJ4mc3cT4Nb3+n6H/c1AwZnChGBqLoymE0NVYscKI=
github.com/go-acme/tencentclouddnspod v1.1.10/go.mod h1:Bo/0YQJ/99FM+44HmCQkByuptX1tJsJ9V14MGV/2Qco=
github.com/go-cmd/cmd v1.4.3 h1:6y3G+3UqPerXvPcXvj+5QNPHT02BUw7p6PsqRxLNA7Y=
@@ -545,8 +545,8 @@ github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.172 h1:68VUVbLKwBxPh8tjCXwnLO/d8/thdZ+ExpxdFMEdK5A=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.172/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=
+github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.173 h1:Y4ixGadyrK9xHw6Z+cyiiME3SBXepEcUoiT+B8C5FoQ=
+github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.173/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=
github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -689,14 +689,12 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS
github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/nrdcg/bunny-go v0.0.0-20250327222614-988a091fc7ea h1:OSgRS4kqOs/WuxuFOObP2gwrenL4/qiKXQbQugr/Two=
-github.com/nrdcg/bunny-go v0.0.0-20250327222614-988a091fc7ea/go.mod h1:IDRRngAngb2eTEaWgpO0hukQFI/vJId46fT1KErMytA=
-github.com/nrdcg/desec v0.11.0 h1:XZVHy07sg12y8FozMp+l7XvzPsdzog0AYXuQMaHBsfs=
-github.com/nrdcg/desec v0.11.0/go.mod h1:5+4vyhMRTs49V9CNoODF/HwT8Mwxv9DJ6j+7NekUnBs=
+github.com/nrdcg/bunny-go v0.1.0 h1:GAHTRpHaG/TxfLZlqoJ8OJFzw8rI74+jOTkzxWh0uHA=
+github.com/nrdcg/bunny-go v0.1.0/go.mod h1:u+C9dgsspgtWVaAz6QkyV17s9fxD8viwwKoxb9XMz1A=
+github.com/nrdcg/desec v0.11.1 h1:ilpKmCr4gGsLcyq3RHfHNmlRzm9fzT2XbWxoVaUCS0s=
+github.com/nrdcg/desec v0.11.1/go.mod h1:2LuxHlOcwML/7cntu0eimONmA1U+ZxFDAonoSXr4igQ=
github.com/nrdcg/goacmedns v0.2.0 h1:ADMbThobzEMnr6kg2ohs4KGa3LFqmgiBA22/6jUWJR0=
github.com/nrdcg/goacmedns v0.2.0/go.mod h1:T5o6+xvSLrQpugmwHvrSNkzWht0UGAwj2ACBMhh73Cg=
-github.com/nrdcg/mailinabox v0.2.0 h1:IKq8mfKiVwNW2hQii/ng1dJ4yYMMv3HAP3fMFIq2CFk=
-github.com/nrdcg/mailinabox v0.2.0/go.mod h1:0yxqeYOiGyxAu7Sb94eMxHPIOsPYXAjTeA9ZhePhGnc=
github.com/nrdcg/namesilo v0.5.0 h1:6QNxT/XxE+f5B+7QlfWorthNzOzcGlBLRQxqi6YeBrE=
github.com/nrdcg/namesilo v0.5.0/go.mod h1:4UkwlwQfDt74kSGmhLaDylnBrD94IfflnpoEaj6T2qw=
github.com/nrdcg/porkbun v0.4.0 h1:rWweKlwo1PToQ3H+tEO9gPRW0wzzgmI/Ob3n2Guticw=
@@ -877,18 +875,18 @@ github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
-github.com/ucloud/ucloud-sdk-go v0.22.54 h1:eNZeYApGPWm22sXoHOFd3fP+mNqwyeFGR5E3CnOXxv8=
-github.com/ucloud/ucloud-sdk-go v0.22.54/go.mod h1:dyLmFHmUfgb4RZKYQP9IArlvQ2pxzFthfhwxRzOEPIw=
+github.com/ucloud/ucloud-sdk-go v0.22.56 h1:bUzoUxT06lI6psFN654btMPdzI4MtaWl6RC/4YmMlBs=
+github.com/ucloud/ucloud-sdk-go v0.22.56/go.mod h1:dyLmFHmUfgb4RZKYQP9IArlvQ2pxzFthfhwxRzOEPIw=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
github.com/volcengine/ve-tos-golang-sdk/v2 v2.7.21 h1:t6OkemY2V5wi6YNWB5ezqTrQM+/+bu0Bf35H9XrP5kQ=
github.com/volcengine/ve-tos-golang-sdk/v2 v2.7.21/go.mod h1:IrjK84IJJTuOZOTMv/P18Ydjy/x+ow7fF7q11jAxXLM=
github.com/volcengine/volc-sdk-golang v1.0.23/go.mod h1:AfG/PZRUkHJ9inETvbjNifTDgut25Wbkm2QoYBTbvyU=
-github.com/volcengine/volc-sdk-golang v1.0.224 h1:k9Vtg64tQAgFTOGWzhyL0b0axuTuExXbLNVlslWlBZI=
-github.com/volcengine/volc-sdk-golang v1.0.224/go.mod h1:zHJlaqiMbIB+0mcrsZPTwOb3FB7S/0MCfqlnO8R7hlM=
-github.com/volcengine/volcengine-go-sdk v1.1.44 h1:WLoLlzt67ZlJeow55PPx65/Mh52DewVXqkHcFSodM9w=
-github.com/volcengine/volcengine-go-sdk v1.1.44/go.mod h1:oxoVo+A17kvkwPkIeIHPVLjSw7EQAm+l/Vau1YGHN+A=
+github.com/volcengine/volc-sdk-golang v1.0.225 h1:z50OEuSiK+5H2Mhw0ziLE0YfsV9MGUf30nMI/08W8T0=
+github.com/volcengine/volc-sdk-golang v1.0.225/go.mod h1:zHJlaqiMbIB+0mcrsZPTwOb3FB7S/0MCfqlnO8R7hlM=
+github.com/volcengine/volcengine-go-sdk v1.1.46 h1:Fl1SfTDdNelERa/Y7nWeGCokEJgD1zIjP0RvIdEoYPc=
+github.com/volcengine/volcengine-go-sdk v1.1.46/go.mod h1:oxoVo+A17kvkwPkIeIHPVLjSw7EQAm+l/Vau1YGHN+A=
github.com/vultr/govultr/v3 v3.24.0 h1:fTTTj0VBve+Miy+wGhlb90M2NMDfpGFi6Frlj3HVy6M=
github.com/vultr/govultr/v3 v3.24.0/go.mod h1:9WwnWGCKnwDlNjHjtt+j+nP+0QWq6hQXzaHgddqrLWY=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
@@ -1390,8 +1388,8 @@ gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/ns1/ns1-go.v2 v2.15.0 h1:cE3xSMdSCV8kf9SQldzqgW/Ueh7sv3yO2JwKtYxxz3E=
-gopkg.in/ns1/ns1-go.v2 v2.15.0/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
+gopkg.in/ns1/ns1-go.v2 v2.15.1 h1:8rri2TzAPYcVbBGXn48+dz1Xg30PzHfZ4k8A9JOS0Z0=
+gopkg.in/ns1/ns1-go.v2 v2.15.1/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/internal/certapply/applicators/sp_hostingde.go b/internal/certapply/applicators/sp_hostingde.go
new file mode 100644
index 000000000..9c3716a60
--- /dev/null
+++ b/internal/certapply/applicators/sp_hostingde.go
@@ -0,0 +1,29 @@
+package applicators
+
+import (
+ "fmt"
+
+ "github.com/go-acme/lego/v4/challenge"
+
+ "github.com/certimate-go/certimate/internal/domain"
+ "github.com/certimate-go/certimate/pkg/core/ssl-applicator/acme-dns01/providers/hostingde"
+ xmaps "github.com/certimate-go/certimate/pkg/utils/maps"
+)
+
+func init() {
+ if err := ACMEDns01Registries.Register(domain.ACMEDns01ProviderTypeHostingde, func(options *ProviderFactoryOptions) (challenge.Provider, error) {
+ credentials := domain.AccessConfigForHostingde{}
+ if err := xmaps.Populate(options.ProviderAccessConfig, &credentials); err != nil {
+ return nil, fmt.Errorf("failed to populate provider access config: %w", err)
+ }
+
+ provider, err := hostingde.NewChallengeProvider(&hostingde.ChallengeProviderConfig{
+ ApiKey: credentials.ApiKey,
+ DnsPropagationTimeout: options.DnsPropagationTimeout,
+ DnsTTL: options.DnsTTL,
+ })
+ return provider, err
+ }); err != nil {
+ panic(err)
+ }
+}
diff --git a/internal/domain/access.go b/internal/domain/access.go
index 991e55ab1..59e28e6db 100644
--- a/internal/domain/access.go
+++ b/internal/domain/access.go
@@ -247,6 +247,10 @@ type AccessConfigForHetzner struct {
ApiToken string `json:"apiToken"`
}
+type AccessConfigForHostingde struct {
+ ApiKey string `json:"apiKey"`
+}
+
type AccessConfigForHostinger struct {
ApiToken string `json:"apiToken"`
}
diff --git a/internal/domain/certificate.go b/internal/domain/certificate.go
index d5afd9e38..a645b488d 100644
--- a/internal/domain/certificate.go
+++ b/internal/domain/certificate.go
@@ -26,6 +26,7 @@ type Certificate struct {
KeyAlgorithm CertificateKeyAlgorithmType `json:"keyAlgorithm" db:"keyAlgorithm"`
ValidityNotBefore time.Time `json:"validityNotBefore" db:"validityNotBefore"`
ValidityNotAfter time.Time `json:"validityNotAfter" db:"validityNotAfter"`
+ ValidityInterval int32 `json:"validityInterval" db:"validityInterval"`
ACMEAcctUrl string `json:"acmeAcctUrl" db:"acmeAcctUrl"`
ACMECertUrl string `json:"acmeCertUrl" db:"acmeCertUrl"`
ACMECertStableUrl string `json:"acmeCertStableUrl" db:"acmeCertStableUrl"`
@@ -43,6 +44,7 @@ func (c *Certificate) PopulateFromX509(certX509 *x509.Certificate) *Certificate
c.IssuerOrg = strings.Join(certX509.Issuer.Organization, ";")
c.ValidityNotBefore = certX509.NotBefore
c.ValidityNotAfter = certX509.NotAfter
+ c.ValidityInterval = int32(certX509.NotAfter.Sub(certX509.NotBefore).Seconds())
keyAlgorithm, keySize, _ := xcryptokey.GetPublicKeyAlgorithm(certX509.PublicKey)
switch keyAlgorithm {
diff --git a/internal/domain/provider.go b/internal/domain/provider.go
index d2f2c5f10..4980be0c8 100644
--- a/internal/domain/provider.go
+++ b/internal/domain/provider.go
@@ -54,6 +54,7 @@ const (
AccessProviderTypeGoEdge = AccessProviderType("goedge")
AccessProviderTypeGoogleTrustServices = AccessProviderType("googletrustservices")
AccessProviderTypeHetzner = AccessProviderType("hetzner")
+ AccessProviderTypeHostingde = AccessProviderType("hostingde")
AccessProviderTypeHostinger = AccessProviderType("hostinger")
AccessProviderTypeHuaweiCloud = AccessProviderType("huaweicloud")
AccessProviderTypeIONOS = AccessProviderType("ionos")
@@ -165,6 +166,7 @@ const (
ACMEDns01ProviderTypeGname = ACMEDns01ProviderType(AccessProviderTypeGname)
ACMEDns01ProviderTypeGoDaddy = ACMEDns01ProviderType(AccessProviderTypeGoDaddy)
ACMEDns01ProviderTypeHetzner = ACMEDns01ProviderType(AccessProviderTypeHetzner)
+ ACMEDns01ProviderTypeHostingde = ACMEDns01ProviderType(AccessProviderTypeHostingde)
ACMEDns01ProviderTypeHostinger = ACMEDns01ProviderType(AccessProviderTypeHostinger)
ACMEDns01ProviderTypeHuaweiCloud = ACMEDns01ProviderType(AccessProviderTypeHuaweiCloud) // 兼容旧值,等同于 [ACMEDns01ProviderTypeHuaweiCloudDNS]
ACMEDns01ProviderTypeHuaweiCloudDNS = ACMEDns01ProviderType(AccessProviderTypeHuaweiCloud + "-dns")
diff --git a/internal/repository/certificate.go b/internal/repository/certificate.go
index 13e3e2bc5..7e1c0765c 100644
--- a/internal/repository/certificate.go
+++ b/internal/repository/certificate.go
@@ -126,6 +126,7 @@ func (r *CertificateRepository) Save(ctx context.Context, certificate *domain.Ce
record.Set("keyAlgorithm", string(certificate.KeyAlgorithm))
record.Set("validityNotBefore", certificate.ValidityNotBefore)
record.Set("validityNotAfter", certificate.ValidityNotAfter)
+ record.Set("validityInterval", certificate.ValidityInterval)
record.Set("acmeAcctUrl", certificate.ACMEAcctUrl)
record.Set("acmeCertUrl", certificate.ACMECertUrl)
record.Set("acmeCertStableUrl", certificate.ACMECertStableUrl)
@@ -188,6 +189,7 @@ func (r *CertificateRepository) castRecordToModel(record *core.Record) (*domain.
KeyAlgorithm: domain.CertificateKeyAlgorithmType(record.GetString("keyAlgorithm")),
ValidityNotBefore: record.GetDateTime("validityNotBefore").Time(),
ValidityNotAfter: record.GetDateTime("validityNotAfter").Time(),
+ ValidityInterval: int32(record.GetInt("validityInterval")),
ACMEAcctUrl: record.GetString("acmeAcctUrl"),
ACMECertUrl: record.GetString("acmeCertUrl"),
ACMECertStableUrl: record.GetString("acmeCertStableUrl"),
diff --git a/migrations/1762142400_m0.4.3.go b/migrations/1762142400_m0.4.3.go
index 13af8fe7d..6912a57be 100644
--- a/migrations/1762142400_m0.4.3.go
+++ b/migrations/1762142400_m0.4.3.go
@@ -14,12 +14,28 @@ func init() {
// update collection `certificate`
// - rename field `acmeRenewed` to `isRenewed`
// - add field `isRevoked`
+ // - add field `validityInterval`
{
collection, err := app.FindCollectionByNameOrId("4szxr9x43tpj6np")
if err != nil {
return err
}
+ if err := collection.Fields.AddMarshaledJSONAt(10, []byte(`{
+ "hidden": false,
+ "id": "number2453290051",
+ "max": null,
+ "min": null,
+ "name": "validityInterval",
+ "onlyInt": false,
+ "presentable": false,
+ "required": false,
+ "system": false,
+ "type": "number"
+ }`)); err != nil {
+ return err
+ }
+
if err := collection.Fields.AddMarshaledJSONAt(14, []byte(`{
"hidden": false,
"id": "bool810050391",
@@ -47,6 +63,10 @@ func init() {
if err := app.Save(collection); err != nil {
return err
}
+
+ if _, err := app.DB().NewQuery("UPDATE certificate SET validityInterval = (STRFTIME('%s', validityNotAfter) - STRFTIME('%s', validityNotBefore))").Execute(); err != nil {
+ return err
+ }
}
// adapt to new workflow data structure
diff --git a/pkg/core/ssl-applicator/acme-dns01/providers/hostingde/hostingde.go b/pkg/core/ssl-applicator/acme-dns01/providers/hostingde/hostingde.go
new file mode 100644
index 000000000..4ff4216d3
--- /dev/null
+++ b/pkg/core/ssl-applicator/acme-dns01/providers/hostingde/hostingde.go
@@ -0,0 +1,38 @@
+package hostingde
+
+import (
+ "errors"
+ "time"
+
+ "github.com/go-acme/lego/v4/providers/dns/hostingde"
+
+ "github.com/certimate-go/certimate/pkg/core"
+)
+
+type ChallengeProviderConfig struct {
+ ApiKey string `json:"apiKey"`
+ DnsPropagationTimeout int32 `json:"dnsPropagationTimeout,omitempty"`
+ DnsTTL int32 `json:"dnsTTL,omitempty"`
+}
+
+func NewChallengeProvider(config *ChallengeProviderConfig) (core.ACMEChallenger, error) {
+ if config == nil {
+ return nil, errors.New("the configuration of the acme challenge provider is nil")
+ }
+
+ providerConfig := hostingde.NewDefaultConfig()
+ providerConfig.APIKey = config.ApiKey
+ if config.DnsPropagationTimeout != 0 {
+ providerConfig.PropagationTimeout = time.Duration(config.DnsPropagationTimeout) * time.Second
+ }
+ if config.DnsTTL != 0 {
+ providerConfig.TTL = int(config.DnsTTL)
+ }
+
+ provider, err := hostingde.NewDNSProviderConfig(providerConfig)
+ if err != nil {
+ return nil, err
+ }
+
+ return provider, nil
+}
diff --git a/ui/package-lock.json b/ui/package-lock.json
index 9e900e630..76ed8055c 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -18,8 +18,8 @@
"@uiw/codemirror-extensions-basic-setup": "^4.25.2",
"@uiw/codemirror-theme-vscode": "^4.25.2",
"@uiw/react-codemirror": "^4.25.2",
- "ahooks": "^3.9.5",
- "antd": "^5.27.6",
+ "ahooks": "^3.9.6",
+ "antd": "^5.28.0",
"antd-zod": "^7.0.0",
"clsx": "^2.1.1",
"cron-parser": "^5.4.0",
@@ -33,15 +33,15 @@
"react": "^18.3.1",
"react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.3.1",
- "react-i18next": "^16.2.0",
- "react-router-dom": "^7.9.4",
+ "react-i18next": "^16.2.3",
+ "react-router-dom": "^7.9.5",
"tailwind-merge": "^3.3.1",
"yaml": "^2.8.1",
"zod": "^4.1.12",
"zustand": "^5.0.8"
},
"devDependencies": {
- "@eslint/js": "^9.38.0",
+ "@eslint/js": "^9.39.0",
"@tailwindcss/postcss": "^4.1.16",
"@tailwindcss/vite": "^4.1.16",
"@types/file-saver": "^2.0.7",
@@ -52,7 +52,7 @@
"@types/react-dom": "^18.3.7",
"@vitejs/plugin-legacy": "^7.2.1",
"@vitejs/plugin-react": "^5.1.0",
- "eslint": "^9.38.0",
+ "eslint": "^9.39.0",
"eslint-config-prettier": "^10.1.8",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-better-tailwindcss": "^3.7.10",
@@ -2258,23 +2258,24 @@
}
},
"node_modules/@eslint/config-helpers": {
- "version": "0.4.1",
- "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.4.1.tgz",
- "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.16.0"
+ "@eslint/core": "^0.17.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
- "version": "0.16.0",
- "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.16.0.tgz",
- "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==",
+ "version": "0.17.0",
+ "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
@@ -2331,9 +2332,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.38.0",
- "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.38.0.tgz",
- "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==",
+ "version": "9.39.0",
+ "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.39.0.tgz",
+ "integrity": "sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2354,12 +2355,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz",
- "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.16.0",
+ "@eslint/core": "^0.17.0",
"levn": "^0.4.1"
},
"engines": {
@@ -3178,6 +3180,7 @@
"version": "5.0.4",
"resolved": "https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz",
"integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.24.4"
},
@@ -3259,9 +3262,10 @@
}
},
"node_modules/@rc-component/qrcode": {
- "version": "1.0.1",
- "resolved": "https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.0.1.tgz",
- "integrity": "sha512-g8eeeaMyFXVlq8cZUeaxCDhfIYjpao0l9cvm5gFwKXy/Vm1yDWV7h2sjH5jHYzdFedlVKBpATFB1VKMrHzwaWQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.1.0.tgz",
+ "integrity": "sha512-ABA80Yer0c6I2+moqNY0kF3Y1NxIT6wDP/EINIqbiRbfZKP1HtHpKMh8WuTXLgVGYsoWG2g9/n0PgM8KdnJb4Q==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.24.7",
"classnames": "^2.3.2"
@@ -4010,7 +4014,8 @@
"version": "7.0.15",
"resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/json5": {
"version": "0.0.29",
@@ -4746,9 +4751,10 @@
}
},
"node_modules/ahooks": {
- "version": "3.9.5",
- "resolved": "https://registry.npmmirror.com/ahooks/-/ahooks-3.9.5.tgz",
- "integrity": "sha512-TrjXie49Q8HuHKTa84Fm9A+famMDAG1+7a9S9Gq6RQ0h90Jgqmiq3CkObuRjWT/C4d6nRZCw35Y2k2fmybb5eA==",
+ "version": "3.9.6",
+ "resolved": "https://registry.npmmirror.com/ahooks/-/ahooks-3.9.6.tgz",
+ "integrity": "sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.21.0",
"@types/js-cookie": "^3.0.6",
@@ -4761,9 +4767,6 @@
"screenfull": "^5.0.0",
"tslib": "^2.4.1"
},
- "engines": {
- "node": ">=18"
- },
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -4801,9 +4804,9 @@
}
},
"node_modules/antd": {
- "version": "5.27.6",
- "resolved": "https://registry.npmmirror.com/antd/-/antd-5.27.6.tgz",
- "integrity": "sha512-70HrjVbzDXvtiUQ5MP1XdNudr/wGAk9Ivaemk6f36yrAeJurJSmZ8KngOIilolLRHdGuNc6/Vk+4T1OZpSjpag==",
+ "version": "5.28.0",
+ "resolved": "https://registry.npmmirror.com/antd/-/antd-5.28.0.tgz",
+ "integrity": "sha512-AmCvyhWGHzlDQ6sfnGBBrFm/8sLPbBI8d/NDBsecliKqrTZUMr07TAQldo43iowwKzvgKxxuRoUHaBaYcBMdQA==",
"license": "MIT",
"dependencies": {
"@ant-design/colors": "^7.2.1",
@@ -4815,7 +4818,7 @@
"@babel/runtime": "^7.26.0",
"@rc-component/color-picker": "~2.0.1",
"@rc-component/mutate-observer": "^1.1.0",
- "@rc-component/qrcode": "~1.0.1",
+ "@rc-component/qrcode": "~1.1.0",
"@rc-component/tour": "~1.15.1",
"@rc-component/trigger": "^2.3.0",
"classnames": "^2.5.1",
@@ -4827,7 +4830,7 @@
"rc-dialog": "~9.6.0",
"rc-drawer": "~7.3.0",
"rc-dropdown": "~4.2.1",
- "rc-field-form": "~2.7.0",
+ "rc-field-form": "~2.7.1",
"rc-image": "~7.12.0",
"rc-input": "~1.8.0",
"rc-input-number": "~9.5.0",
@@ -4851,7 +4854,7 @@
"rc-tooltip": "~6.4.0",
"rc-tree": "~5.13.1",
"rc-tree-select": "~5.27.0",
- "rc-upload": "~4.9.2",
+ "rc-upload": "~4.11.0",
"rc-util": "^5.44.4",
"scroll-into-view-if-needed": "^3.1.0",
"throttle-debounce": "^5.0.2"
@@ -5347,6 +5350,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/cookie/-/cookie-1.0.2.tgz",
"integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
+ "license": "MIT",
"engines": {
"node": ">=18"
}
@@ -5782,20 +5786,20 @@
}
},
"node_modules/eslint": {
- "version": "9.38.0",
- "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.38.0.tgz",
- "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==",
+ "version": "9.39.0",
+ "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.39.0.tgz",
+ "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.21.1",
- "@eslint/config-helpers": "^0.4.1",
- "@eslint/core": "^0.16.0",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.38.0",
- "@eslint/plugin-kit": "^0.4.0",
+ "@eslint/js": "9.39.0",
+ "@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
@@ -8256,9 +8260,10 @@
}
},
"node_modules/rc-field-form": {
- "version": "2.7.0",
- "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.0.tgz",
- "integrity": "sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.1.tgz",
+ "integrity": "sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.0",
"@rc-component/async-validator": "^5.0.3",
@@ -8691,9 +8696,10 @@
}
},
"node_modules/rc-upload": {
- "version": "4.9.2",
- "resolved": "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.9.2.tgz",
- "integrity": "sha512-nHx+9rbd1FKMiMRYsqQ3NkXUv7COHPBo3X1Obwq9SWS6/diF/A0aJ5OHubvwUAIDs+4RMleljV0pcrNUc823GQ==",
+ "version": "4.11.0",
+ "resolved": "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.11.0.tgz",
+ "integrity": "sha512-ZUyT//2JAehfHzjWowqROcwYJKnZkIUGWaTE/VogVrepSl7AFNbQf4+zGfX4zl9Vrj/Jm8scLO0R6UlPDKK4wA==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
"classnames": "^2.2.5",
@@ -8776,9 +8782,9 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/react-i18next": {
- "version": "16.2.0",
- "resolved": "https://registry.npmmirror.com/react-i18next/-/react-i18next-16.2.0.tgz",
- "integrity": "sha512-giCEDa6NtQYvuLGW9xaBo4HCVxT0Y8jrOpX/uSnd+lZ3Dmm/2BNrGNEgRZzWDkSobmE6IWPJ+/Ow9Rhi/gP6+g==",
+ "version": "16.2.3",
+ "resolved": "https://registry.npmmirror.com/react-i18next/-/react-i18next-16.2.3.tgz",
+ "integrity": "sha512-O0t2zvmIz7nHWKNfIL+O/NTIbpTaOPY0vZov779hegbep3IZ+xcqkeVPKWBSXwzdkiv77q8zmq9toKIUys1x3A==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.27.6",
@@ -8818,9 +8824,10 @@
}
},
"node_modules/react-router": {
- "version": "7.9.4",
- "resolved": "https://registry.npmmirror.com/react-router/-/react-router-7.9.4.tgz",
- "integrity": "sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==",
+ "version": "7.9.5",
+ "resolved": "https://registry.npmmirror.com/react-router/-/react-router-7.9.5.tgz",
+ "integrity": "sha512-JmxqrnBZ6E9hWmf02jzNn9Jm3UqyeimyiwzD69NjxGySG6lIz/1LVPsoTCwN7NBX2XjCEa1LIX5EMz1j2b6u6A==",
+ "license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
"set-cookie-parser": "^2.6.0"
@@ -8839,11 +8846,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "7.9.4",
- "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-7.9.4.tgz",
- "integrity": "sha512-f30P6bIkmYvnHHa5Gcu65deIXoA2+r3Eb6PJIAddvsT9aGlchMatJ51GgpU470aSqRRbFX22T70yQNUGuW3DfA==",
+ "version": "7.9.5",
+ "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-7.9.5.tgz",
+ "integrity": "sha512-mkEmq/K8tKN63Ae2M7Xgz3c9l9YNbY+NHH6NNeUmLA3kDkhKXRsNb/ZpxaEunvGo2/3YXdk5EJU3Hxp3ocaBPw==",
+ "license": "MIT",
"dependencies": {
- "react-router": "7.9.4"
+ "react-router": "7.9.5"
},
"engines": {
"node": ">=20.0.0"
@@ -9200,9 +9208,10 @@
}
},
"node_modules/set-cookie-parser": {
- "version": "2.7.1",
- "resolved": "https://registry.npmmirror.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
- "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="
+ "version": "2.7.2",
+ "resolved": "https://registry.npmmirror.com/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
+ "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
+ "license": "MIT"
},
"node_modules/set-function-length": {
"version": "1.2.2",
diff --git a/ui/package.json b/ui/package.json
index 033d4ebdd..cdfbba9d2 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -20,8 +20,8 @@
"@uiw/codemirror-extensions-basic-setup": "^4.25.2",
"@uiw/codemirror-theme-vscode": "^4.25.2",
"@uiw/react-codemirror": "^4.25.2",
- "ahooks": "^3.9.5",
- "antd": "^5.27.6",
+ "ahooks": "^3.9.6",
+ "antd": "^5.28.0",
"antd-zod": "^7.0.0",
"clsx": "^2.1.1",
"cron-parser": "^5.4.0",
@@ -35,15 +35,15 @@
"react": "^18.3.1",
"react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.3.1",
- "react-i18next": "^16.2.0",
- "react-router-dom": "^7.9.4",
+ "react-i18next": "^16.2.3",
+ "react-router-dom": "^7.9.5",
"tailwind-merge": "^3.3.1",
"yaml": "^2.8.1",
"zod": "^4.1.12",
"zustand": "^5.0.8"
},
"devDependencies": {
- "@eslint/js": "^9.38.0",
+ "@eslint/js": "^9.39.0",
"@tailwindcss/postcss": "^4.1.16",
"@tailwindcss/vite": "^4.1.16",
"@types/file-saver": "^2.0.7",
@@ -54,7 +54,7 @@
"@types/react-dom": "^18.3.7",
"@vitejs/plugin-legacy": "^7.2.1",
"@vitejs/plugin-react": "^5.1.0",
- "eslint": "^9.38.0",
+ "eslint": "^9.39.0",
"eslint-config-prettier": "^10.1.8",
"eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-better-tailwindcss": "^3.7.10",
diff --git a/ui/public/imgs/providers/baiducloud.svg b/ui/public/imgs/providers/baiducloud.svg
index e448fd3ef..f92dd1bf7 100644
--- a/ui/public/imgs/providers/baiducloud.svg
+++ b/ui/public/imgs/providers/baiducloud.svg
@@ -1 +1 @@
-
+
diff --git a/ui/public/imgs/providers/hostingde.svg b/ui/public/imgs/providers/hostingde.svg
new file mode 100644
index 000000000..2929b09d0
--- /dev/null
+++ b/ui/public/imgs/providers/hostingde.svg
@@ -0,0 +1 @@
+
diff --git a/ui/src/components/access/AccessForm.tsx b/ui/src/components/access/AccessForm.tsx
index a10a82187..535501147 100644
--- a/ui/src/components/access/AccessForm.tsx
+++ b/ui/src/components/access/AccessForm.tsx
@@ -1,4 +1,3 @@
-import { useMemo } from "react";
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
@@ -11,91 +10,7 @@ import { useAntdForm } from "@/hooks";
import { FormNestedFieldsContextProvider } from "./forms/_context";
import { useProviderFilterByUsage } from "./forms/_hooks";
-import AccessConfigFieldsProvider1Panel from "./forms/AccessConfigFieldsProvider1Panel";
-import AccessConfigFieldsProviderACMECA from "./forms/AccessConfigFieldsProviderACMECA";
-import AccessConfigFieldsProviderACMEDNS from "./forms/AccessConfigFieldsProviderACMEDNS";
-import AccessConfigFieldsProviderACMEHttpReq from "./forms/AccessConfigFieldsProviderACMEHttpReq";
-import AccessConfigFieldsProviderActalisSSL from "./forms/AccessConfigFieldsProviderActalisSSL";
-import AccessConfigFieldsProviderAliyun from "./forms/AccessConfigFieldsProviderAliyun";
-import AccessConfigFieldsProviderAPISIX from "./forms/AccessConfigFieldsProviderAPISIX";
-import AccessConfigFieldsProviderAWS from "./forms/AccessConfigFieldsProviderAWS";
-import AccessConfigFieldsProviderAzure from "./forms/AccessConfigFieldsProviderAzure";
-import AccessConfigFieldsProviderBaiduCloud from "./forms/AccessConfigFieldsProviderBaiduCloud";
-import AccessConfigFieldsProviderBaishan from "./forms/AccessConfigFieldsProviderBaishan";
-import AccessConfigFieldsProviderBaotaPanel from "./forms/AccessConfigFieldsProviderBaotaPanel";
-import AccessConfigFieldsProviderBaotaPanelGo from "./forms/AccessConfigFieldsProviderBaotaPanelGo";
-import AccessConfigFieldsProviderBaotaWAF from "./forms/AccessConfigFieldsProviderBaotaWAF";
-import AccessConfigFieldsProviderBookMyName from "./forms/AccessConfigFieldsProviderBookMyName";
-import AccessConfigFieldsProviderBunny from "./forms/AccessConfigFieldsProviderBunny";
-import AccessConfigFieldsProviderBytePlus from "./forms/AccessConfigFieldsProviderBytePlus";
-import AccessConfigFieldsProviderCacheFly from "./forms/AccessConfigFieldsProviderCacheFly";
-import AccessConfigFieldsProviderCdnfly from "./forms/AccessConfigFieldsProviderCdnfly";
-import AccessConfigFieldsProviderCloudflare from "./forms/AccessConfigFieldsProviderCloudflare";
-import AccessConfigFieldsProviderClouDNS from "./forms/AccessConfigFieldsProviderClouDNS";
-import AccessConfigFieldsProviderCMCCCloud from "./forms/AccessConfigFieldsProviderCMCCCloud";
-import AccessConfigFieldsProviderConstellix from "./forms/AccessConfigFieldsProviderConstellix";
-import AccessConfigFieldsProviderCTCCCloud from "./forms/AccessConfigFieldsProviderCTCCCloud";
-import AccessConfigFieldsProviderDeSEC from "./forms/AccessConfigFieldsProviderDeSEC";
-import AccessConfigFieldsProviderDigitalOcean from "./forms/AccessConfigFieldsProviderDigitalOcean";
-import AccessConfigFieldsProviderDingTalkBot from "./forms/AccessConfigFieldsProviderDingTalkBot";
-import AccessConfigFieldsProviderDiscordBot from "./forms/AccessConfigFieldsProviderDiscordBot";
-import AccessConfigFieldsProviderDNSLA from "./forms/AccessConfigFieldsProviderDNSLA";
-import AccessConfigFieldsProviderDogeCloud from "./forms/AccessConfigFieldsProviderDogeCloud";
-import AccessConfigFieldsProviderDuckDNS from "./forms/AccessConfigFieldsProviderDuckDNS";
-import AccessConfigFieldsProviderDynv6 from "./forms/AccessConfigFieldsProviderDynv6";
-import AccessConfigFieldsProviderEmail from "./forms/AccessConfigFieldsProviderEmail";
-import AccessConfigFieldsProviderFlexCDN from "./forms/AccessConfigFieldsProviderFlexCDN";
-import AccessConfigFieldsProviderGandinet from "./forms/AccessConfigFieldsProviderGandinet";
-import AccessConfigFieldsProviderGcore from "./forms/AccessConfigFieldsProviderGcore";
-import AccessConfigFieldsProviderGlobalSignAtlas from "./forms/AccessConfigFieldsProviderGlobalSignAtlas";
-import AccessConfigFieldsProviderGname from "./forms/AccessConfigFieldsProviderGname";
-import AccessConfigFieldsProviderGoDaddy from "./forms/AccessConfigFieldsProviderGoDaddy";
-import AccessConfigFieldsProviderGoEdge from "./forms/AccessConfigFieldsProviderGoEdge";
-import AccessConfigFieldsProviderGoogleTrustServices from "./forms/AccessConfigFieldsProviderGoogleTrustServices";
-import AccessConfigFieldsProviderHetzner from "./forms/AccessConfigFieldsProviderHetzner";
-import AccessConfigFieldsProviderHostinger from "./forms/AccessConfigFieldsProviderHostinger";
-import AccessConfigFieldsProviderHuaweiCloud from "./forms/AccessConfigFieldsProviderHuaweiCloud";
-import AccessConfigFieldsProviderIONOS from "./forms/AccessConfigFieldsProviderIONOS";
-import AccessConfigFieldsProviderJDCloud from "./forms/AccessConfigFieldsProviderJDCloud";
-import AccessConfigFieldsProviderKong from "./forms/AccessConfigFieldsProviderKong";
-import AccessConfigFieldsProviderKubernetes from "./forms/AccessConfigFieldsProviderKubernetes";
-import AccessConfigFieldsProviderLarkBot from "./forms/AccessConfigFieldsProviderLarkBot";
-import AccessConfigFieldsProviderLeCDN from "./forms/AccessConfigFieldsProviderLeCDN";
-import AccessConfigFieldsProviderLinode from "./forms/AccessConfigFieldsProviderLinode";
-import AccessConfigFieldsProviderMattermost from "./forms/AccessConfigFieldsProviderMattermost";
-import AccessConfigFieldsProviderNamecheap from "./forms/AccessConfigFieldsProviderNamecheap";
-import AccessConfigFieldsProviderNameDotCom from "./forms/AccessConfigFieldsProviderNameDotCom";
-import AccessConfigFieldsProviderNameSilo from "./forms/AccessConfigFieldsProviderNameSilo";
-import AccessConfigFieldsProviderNetcup from "./forms/AccessConfigFieldsProviderNetcup";
-import AccessConfigFieldsProviderNetlify from "./forms/AccessConfigFieldsProviderNetlify";
-import AccessConfigFieldsProviderNS1 from "./forms/AccessConfigFieldsProviderNS1";
-import AccessConfigFieldsProviderPorkbun from "./forms/AccessConfigFieldsProviderPorkbun";
-import AccessConfigFieldsProviderPowerDNS from "./forms/AccessConfigFieldsProviderPowerDNS";
-import AccessConfigFieldsProviderProxmoxVE from "./forms/AccessConfigFieldsProviderProxmoxVE";
-import AccessConfigFieldsProviderQiniu from "./forms/AccessConfigFieldsProviderQiniu";
-import AccessConfigFieldsProviderRainYun from "./forms/AccessConfigFieldsProviderRainYun";
-import AccessConfigFieldsProviderRatPanel from "./forms/AccessConfigFieldsProviderRatPanel";
-import AccessConfigFieldsProviderRFC2136 from "./forms/AccessConfigFieldsProviderRFC2136";
-import AccessConfigFieldsProviderSafeLine from "./forms/AccessConfigFieldsProviderSafeLine";
-import AccessConfigFieldsProviderSectigo from "./forms/AccessConfigFieldsProviderSectigo";
-import AccessConfigFieldsProviderSlackBot from "./forms/AccessConfigFieldsProviderSlackBot";
-import AccessConfigFieldsProviderSpaceship from "./forms/AccessConfigFieldsProviderSpaceship";
-import AccessConfigFieldsProviderSSH from "./forms/AccessConfigFieldsProviderSSH";
-import AccessConfigFieldsProviderSSLCom from "./forms/AccessConfigFieldsProviderSSLCom";
-import AccessConfigFieldsProviderTechnitiumDNS from "./forms/AccessConfigFieldsProviderTechnitiumDNS";
-import AccessConfigFieldsProviderTelegramBot from "./forms/AccessConfigFieldsProviderTelegramBot";
-import AccessConfigFieldsProviderTencentCloud from "./forms/AccessConfigFieldsProviderTencentCloud";
-import AccessConfigFieldsProviderUCloud from "./forms/AccessConfigFieldsProviderUCloud";
-import AccessConfigFieldsProviderUniCloud from "./forms/AccessConfigFieldsProviderUniCloud";
-import AccessConfigFieldsProviderUpyun from "./forms/AccessConfigFieldsProviderUpyun";
-import AccessConfigFieldsProviderVercel from "./forms/AccessConfigFieldsProviderVercel";
-import AccessConfigFieldsProviderVolcEngine from "./forms/AccessConfigFieldsProviderVolcEngine";
-import AccessConfigFieldsProviderVultr from "./forms/AccessConfigFieldsProviderVultr";
-import AccessConfigFieldsProviderWangsu from "./forms/AccessConfigFieldsProviderWangsu";
-import AccessConfigFieldsProviderWebhook from "./forms/AccessConfigFieldsProviderWebhook";
-import AccessConfigFieldsProviderWeComBot from "./forms/AccessConfigFieldsProviderWeComBot";
-import AccessConfigFieldsProviderWestcn from "./forms/AccessConfigFieldsProviderWestcn";
-import AccessConfigFieldsProviderZeroSSL from "./forms/AccessConfigFieldsProviderZeroSSL";
+import AccessConfigFieldsProvider from "./forms/AccessConfigFieldsProvider";
export type AccessFormModes = "create" | "modify";
export type AccessFormUsages = "dns" | "hosting" | "dns-hosting" | "ca" | "notification";
@@ -114,6 +29,8 @@ export interface AccessFormProps {
const AccessForm = ({ className, style, disabled, initialValues, mode, usage, onFormValuesChange, ...props }: AccessFormProps) => {
const { t } = useTranslation();
+ const providerFilter = useProviderFilterByUsage(usage);
+
const formSchema = z.object({
name: z
.string(t("access.form.name.placeholder"))
@@ -130,274 +47,27 @@ const AccessForm = ({ className, style, disabled, initialValues, mode, usage, on
initialValues: initialValues,
});
- const providerFilter = useProviderFilterByUsage(usage);
-
const fieldProvider = Form.useWatch("provider", { form: formInst, preserve: true });
- const nestedProviderConfigFields = useMemo(() => {
- /*
- 注意:如果追加新的子组件,请保持以 ASCII 排序。
- NOTICE: If you add new child component, please keep ASCII order.
- */
- switch (fieldProvider) {
- case ACCESS_PROVIDERS["1PANEL"]: {
- return ;
- }
- case ACCESS_PROVIDERS.ACMECA: {
- return ;
- }
- case ACCESS_PROVIDERS.ACMEDNS: {
- return ;
- }
- case ACCESS_PROVIDERS.ACMEHTTPREQ: {
- return ;
- }
- case ACCESS_PROVIDERS.ACTALISSSL: {
- return ;
- }
- case ACCESS_PROVIDERS.ALIYUN: {
- return ;
- }
- case ACCESS_PROVIDERS.APISIX: {
- return ;
- }
- case ACCESS_PROVIDERS.AWS: {
- return ;
- }
- case ACCESS_PROVIDERS.AZURE: {
- return ;
- }
- case ACCESS_PROVIDERS.BAIDUCLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.BAISHAN: {
- return ;
- }
- case ACCESS_PROVIDERS.BAOTAPANEL: {
- return ;
- }
- case ACCESS_PROVIDERS.BAOTAPANELGO: {
- return ;
- }
- case ACCESS_PROVIDERS.BAOTAWAF: {
- return ;
- }
- case ACCESS_PROVIDERS.BOOKMYNAME: {
- return ;
- }
- case ACCESS_PROVIDERS.BUNNY: {
- return ;
- }
- case ACCESS_PROVIDERS.BYTEPLUS: {
- return ;
- }
- case ACCESS_PROVIDERS.CACHEFLY: {
- return ;
- }
- case ACCESS_PROVIDERS.CDNFLY: {
- return ;
- }
- case ACCESS_PROVIDERS.CLOUDFLARE: {
- return ;
- }
- case ACCESS_PROVIDERS.CLOUDNS: {
- return ;
- }
- case ACCESS_PROVIDERS.CMCCCLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.CONSTELLIX: {
- return ;
- }
- case ACCESS_PROVIDERS.CTCCCLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.DESEC: {
- return ;
- }
- case ACCESS_PROVIDERS.DIGITALOCEAN: {
- return ;
- }
- case ACCESS_PROVIDERS.DINGTALKBOT: {
- return ;
- }
- case ACCESS_PROVIDERS.DISCORDBOT: {
- return ;
- }
- case ACCESS_PROVIDERS.DNSLA: {
- return ;
- }
- case ACCESS_PROVIDERS.DOGECLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.DUCKDNS: {
- return ;
- }
- case ACCESS_PROVIDERS.DYNV6: {
- return ;
- }
- case ACCESS_PROVIDERS.EMAIL: {
- return ;
- }
- case ACCESS_PROVIDERS.FLEXCDN: {
- return ;
- }
- case ACCESS_PROVIDERS.GANDINET: {
- return ;
- }
- case ACCESS_PROVIDERS.GCORE: {
- return ;
- }
- case ACCESS_PROVIDERS.GNAME: {
- return ;
- }
- case ACCESS_PROVIDERS.GODADDY: {
- return ;
- }
- case ACCESS_PROVIDERS.GOEDGE: {
- return ;
- }
- case ACCESS_PROVIDERS.GLOBALSIGNATLAS: {
- return ;
- }
- case ACCESS_PROVIDERS.GOOGLETRUSTSERVICES: {
- return ;
- }
- case ACCESS_PROVIDERS.HETZNER: {
- return ;
- }
- case ACCESS_PROVIDERS.HOSTINGER: {
- return ;
- }
- case ACCESS_PROVIDERS.HUAWEICLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.IONOS: {
- return ;
- }
- case ACCESS_PROVIDERS.JDCLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.KONG: {
- return ;
- }
- case ACCESS_PROVIDERS.KUBERNETES: {
- return ;
- }
- case ACCESS_PROVIDERS.LARKBOT: {
- return ;
- }
- case ACCESS_PROVIDERS.LECDN: {
- return ;
- }
- case ACCESS_PROVIDERS.LINODE: {
- return ;
- }
- case ACCESS_PROVIDERS.MATTERMOST: {
- return ;
- }
- case ACCESS_PROVIDERS.NAMECHEAP: {
- return ;
- }
- case ACCESS_PROVIDERS.NAMEDOTCOM: {
- return ;
- }
- case ACCESS_PROVIDERS.NAMESILO: {
- return ;
- }
- case ACCESS_PROVIDERS.NETCUP: {
- return ;
- }
- case ACCESS_PROVIDERS.NETLIFY: {
- return ;
- }
- case ACCESS_PROVIDERS.NS1: {
- return ;
- }
- case ACCESS_PROVIDERS.PORKBUN: {
- return ;
- }
- case ACCESS_PROVIDERS.POWERDNS: {
- return ;
- }
- case ACCESS_PROVIDERS.PROXMOXVE: {
- return ;
- }
- case ACCESS_PROVIDERS.QINIU: {
- return ;
- }
- case ACCESS_PROVIDERS.RAINYUN: {
- return ;
- }
- case ACCESS_PROVIDERS.RATPANEL: {
- return ;
- }
- case ACCESS_PROVIDERS.RFC2136: {
- return ;
- }
- case ACCESS_PROVIDERS.SAFELINE: {
- return ;
- }
- case ACCESS_PROVIDERS.SECTIGO: {
- return ;
- }
- case ACCESS_PROVIDERS.SLACKBOT: {
- return ;
- }
- case ACCESS_PROVIDERS.SPACESHIP: {
- return ;
- }
- case ACCESS_PROVIDERS.SSLCOM: {
- return ;
- }
- case ACCESS_PROVIDERS.SSH: {
- return ;
- }
- case ACCESS_PROVIDERS.TECHNITIUMDNS: {
- return ;
- }
- case ACCESS_PROVIDERS.TELEGRAMBOT: {
- return ;
- }
- case ACCESS_PROVIDERS.TENCENTCLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.UCLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.UNICLOUD: {
- return ;
- }
- case ACCESS_PROVIDERS.UPYUN: {
- return ;
- }
- case ACCESS_PROVIDERS.VERCEL: {
- return ;
- }
- case ACCESS_PROVIDERS.VOLCENGINE: {
- return ;
- }
- case ACCESS_PROVIDERS.VULTR: {
- return ;
- }
- case ACCESS_PROVIDERS.WANGSU: {
- return ;
- }
- case ACCESS_PROVIDERS.WEBHOOK: {
- const webhookUsage = usage === "notification" ? "notification" : usage === "hosting" || usage === "dns-hosting" ? "deployment" : "none";
- return ;
- }
- case ACCESS_PROVIDERS.WECOMBOT: {
- return ;
- }
- case ACCESS_PROVIDERS.WESTCN: {
- return ;
- }
- case ACCESS_PROVIDERS.ZEROSSL: {
- return ;
- }
- }
- }, [disabled, usage, fieldProvider]);
+ const renderNestedFieldProviderComponent = AccessConfigFieldsProvider.useComponent(fieldProvider, {
+ initProps: (provider) => {
+ let props: object = { disabled: disabled };
+
+ switch (provider) {
+ case ACCESS_PROVIDERS.WEBHOOK:
+ {
+ props = {
+ ...props,
+ usage: usage === "notification" ? "notification" : usage === "hosting" || usage === "dns-hosting" ? "deployment" : "none",
+ };
+ }
+ break;
+ }
+
+ return props;
+ },
+ deps: [disabled, usage],
+ });
return (
);
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProvider.tsx b/ui/src/components/access/forms/AccessConfigFieldsProvider.tsx
new file mode 100644
index 000000000..fa5b18009
--- /dev/null
+++ b/ui/src/components/access/forms/AccessConfigFieldsProvider.tsx
@@ -0,0 +1,210 @@
+import { useEffect, useState } from "react";
+
+import { ACCESS_PROVIDERS, type AccessProviderType } from "@/domain/provider";
+
+import AccessConfigFieldsProvider1Panel from "./AccessConfigFieldsProvider1Panel";
+import AccessConfigFieldsProviderACMECA from "./AccessConfigFieldsProviderACMECA";
+import AccessConfigFieldsProviderACMEDNS from "./AccessConfigFieldsProviderACMEDNS";
+import AccessConfigFieldsProviderACMEHttpReq from "./AccessConfigFieldsProviderACMEHttpReq";
+import AccessConfigFieldsProviderActalisSSL from "./AccessConfigFieldsProviderActalisSSL";
+import AccessConfigFieldsProviderAliyun from "./AccessConfigFieldsProviderAliyun";
+import AccessConfigFieldsProviderAPISIX from "./AccessConfigFieldsProviderAPISIX";
+import AccessConfigFieldsProviderAWS from "./AccessConfigFieldsProviderAWS";
+import AccessConfigFieldsProviderAzure from "./AccessConfigFieldsProviderAzure";
+import AccessConfigFieldsProviderBaiduCloud from "./AccessConfigFieldsProviderBaiduCloud";
+import AccessConfigFieldsProviderBaishan from "./AccessConfigFieldsProviderBaishan";
+import AccessConfigFieldsProviderBaotaPanel from "./AccessConfigFieldsProviderBaotaPanel";
+import AccessConfigFieldsProviderBaotaPanelGo from "./AccessConfigFieldsProviderBaotaPanelGo";
+import AccessConfigFieldsProviderBaotaWAF from "./AccessConfigFieldsProviderBaotaWAF";
+import AccessConfigFieldsProviderBookMyName from "./AccessConfigFieldsProviderBookMyName";
+import AccessConfigFieldsProviderBunny from "./AccessConfigFieldsProviderBunny";
+import AccessConfigFieldsProviderBytePlus from "./AccessConfigFieldsProviderBytePlus";
+import AccessConfigFieldsProviderCacheFly from "./AccessConfigFieldsProviderCacheFly";
+import AccessConfigFieldsProviderCdnfly from "./AccessConfigFieldsProviderCdnfly";
+import AccessConfigFieldsProviderCloudflare from "./AccessConfigFieldsProviderCloudflare";
+import AccessConfigFieldsProviderClouDNS from "./AccessConfigFieldsProviderClouDNS";
+import AccessConfigFieldsProviderCMCCCloud from "./AccessConfigFieldsProviderCMCCCloud";
+import AccessConfigFieldsProviderConstellix from "./AccessConfigFieldsProviderConstellix";
+import AccessConfigFieldsProviderCTCCCloud from "./AccessConfigFieldsProviderCTCCCloud";
+import AccessConfigFieldsProviderDeSEC from "./AccessConfigFieldsProviderDeSEC";
+import AccessConfigFieldsProviderDigitalOcean from "./AccessConfigFieldsProviderDigitalOcean";
+import AccessConfigFieldsProviderDingTalkBot from "./AccessConfigFieldsProviderDingTalkBot";
+import AccessConfigFieldsProviderDiscordBot from "./AccessConfigFieldsProviderDiscordBot";
+import AccessConfigFieldsProviderDNSLA from "./AccessConfigFieldsProviderDNSLA";
+import AccessConfigFieldsProviderDogeCloud from "./AccessConfigFieldsProviderDogeCloud";
+import AccessConfigFieldsProviderDuckDNS from "./AccessConfigFieldsProviderDuckDNS";
+import AccessConfigFieldsProviderDynv6 from "./AccessConfigFieldsProviderDynv6";
+import AccessConfigFieldsProviderEmail from "./AccessConfigFieldsProviderEmail";
+import AccessConfigFieldsProviderFlexCDN from "./AccessConfigFieldsProviderFlexCDN";
+import AccessConfigFieldsProviderGandinet from "./AccessConfigFieldsProviderGandinet";
+import AccessConfigFieldsProviderGcore from "./AccessConfigFieldsProviderGcore";
+import AccessConfigFieldsProviderGlobalSignAtlas from "./AccessConfigFieldsProviderGlobalSignAtlas";
+import AccessConfigFieldsProviderGname from "./AccessConfigFieldsProviderGname";
+import AccessConfigFieldsProviderGoDaddy from "./AccessConfigFieldsProviderGoDaddy";
+import AccessConfigFieldsProviderGoEdge from "./AccessConfigFieldsProviderGoEdge";
+import AccessConfigFieldsProviderGoogleTrustServices from "./AccessConfigFieldsProviderGoogleTrustServices";
+import AccessConfigFieldsProviderHetzner from "./AccessConfigFieldsProviderHetzner";
+import AccessConfigFieldsProviderHostingde from "./AccessConfigFieldsProviderHostingde";
+import AccessConfigFieldsProviderHostinger from "./AccessConfigFieldsProviderHostinger";
+import AccessConfigFieldsProviderHuaweiCloud from "./AccessConfigFieldsProviderHuaweiCloud";
+import AccessConfigFieldsProviderIONOS from "./AccessConfigFieldsProviderIONOS";
+import AccessConfigFieldsProviderJDCloud from "./AccessConfigFieldsProviderJDCloud";
+import AccessConfigFieldsProviderKong from "./AccessConfigFieldsProviderKong";
+import AccessConfigFieldsProviderKubernetes from "./AccessConfigFieldsProviderKubernetes";
+import AccessConfigFieldsProviderLarkBot from "./AccessConfigFieldsProviderLarkBot";
+import AccessConfigFieldsProviderLeCDN from "./AccessConfigFieldsProviderLeCDN";
+import AccessConfigFieldsProviderLinode from "./AccessConfigFieldsProviderLinode";
+import AccessConfigFieldsProviderMattermost from "./AccessConfigFieldsProviderMattermost";
+import AccessConfigFieldsProviderNamecheap from "./AccessConfigFieldsProviderNamecheap";
+import AccessConfigFieldsProviderNameDotCom from "./AccessConfigFieldsProviderNameDotCom";
+import AccessConfigFieldsProviderNameSilo from "./AccessConfigFieldsProviderNameSilo";
+import AccessConfigFieldsProviderNetcup from "./AccessConfigFieldsProviderNetcup";
+import AccessConfigFieldsProviderNetlify from "./AccessConfigFieldsProviderNetlify";
+import AccessConfigFieldsProviderNS1 from "./AccessConfigFieldsProviderNS1";
+import AccessConfigFieldsProviderPorkbun from "./AccessConfigFieldsProviderPorkbun";
+import AccessConfigFieldsProviderPowerDNS from "./AccessConfigFieldsProviderPowerDNS";
+import AccessConfigFieldsProviderProxmoxVE from "./AccessConfigFieldsProviderProxmoxVE";
+import AccessConfigFieldsProviderQiniu from "./AccessConfigFieldsProviderQiniu";
+import AccessConfigFieldsProviderRainYun from "./AccessConfigFieldsProviderRainYun";
+import AccessConfigFieldsProviderRatPanel from "./AccessConfigFieldsProviderRatPanel";
+import AccessConfigFieldsProviderRFC2136 from "./AccessConfigFieldsProviderRFC2136";
+import AccessConfigFieldsProviderSafeLine from "./AccessConfigFieldsProviderSafeLine";
+import AccessConfigFieldsProviderSectigo from "./AccessConfigFieldsProviderSectigo";
+import AccessConfigFieldsProviderSlackBot from "./AccessConfigFieldsProviderSlackBot";
+import AccessConfigFieldsProviderSpaceship from "./AccessConfigFieldsProviderSpaceship";
+import AccessConfigFieldsProviderSSH from "./AccessConfigFieldsProviderSSH";
+import AccessConfigFieldsProviderSSLCom from "./AccessConfigFieldsProviderSSLCom";
+import AccessConfigFieldsProviderTechnitiumDNS from "./AccessConfigFieldsProviderTechnitiumDNS";
+import AccessConfigFieldsProviderTelegramBot from "./AccessConfigFieldsProviderTelegramBot";
+import AccessConfigFieldsProviderTencentCloud from "./AccessConfigFieldsProviderTencentCloud";
+import AccessConfigFieldsProviderUCloud from "./AccessConfigFieldsProviderUCloud";
+import AccessConfigFieldsProviderUniCloud from "./AccessConfigFieldsProviderUniCloud";
+import AccessConfigFieldsProviderUpyun from "./AccessConfigFieldsProviderUpyun";
+import AccessConfigFieldsProviderVercel from "./AccessConfigFieldsProviderVercel";
+import AccessConfigFieldsProviderVolcEngine from "./AccessConfigFieldsProviderVolcEngine";
+import AccessConfigFieldsProviderVultr from "./AccessConfigFieldsProviderVultr";
+import AccessConfigFieldsProviderWangsu from "./AccessConfigFieldsProviderWangsu";
+import AccessConfigFieldsProviderWebhook from "./AccessConfigFieldsProviderWebhook";
+import AccessConfigFieldsProviderWeComBot from "./AccessConfigFieldsProviderWeComBot";
+import AccessConfigFieldsProviderWestcn from "./AccessConfigFieldsProviderWestcn";
+import AccessConfigFieldsProviderZeroSSL from "./AccessConfigFieldsProviderZeroSSL";
+
+const providerComponentMap: Partial>> = {
+ /*
+ 注意:如果追加新的子组件,请保持以 ASCII 排序。
+ NOTICE: If you add new child component, please keep ASCII order.
+ */
+ [ACCESS_PROVIDERS["1PANEL"]]: AccessConfigFieldsProvider1Panel,
+ [ACCESS_PROVIDERS.ACMECA]: AccessConfigFieldsProviderACMECA,
+ [ACCESS_PROVIDERS.ACMEDNS]: AccessConfigFieldsProviderACMEDNS,
+ [ACCESS_PROVIDERS.ACMEHTTPREQ]: AccessConfigFieldsProviderACMEHttpReq,
+ [ACCESS_PROVIDERS.ACTALISSSL]: AccessConfigFieldsProviderActalisSSL,
+ [ACCESS_PROVIDERS.ALIYUN]: AccessConfigFieldsProviderAliyun,
+ [ACCESS_PROVIDERS.APISIX]: AccessConfigFieldsProviderAPISIX,
+ [ACCESS_PROVIDERS.AWS]: AccessConfigFieldsProviderAWS,
+ [ACCESS_PROVIDERS.AZURE]: AccessConfigFieldsProviderAzure,
+ [ACCESS_PROVIDERS.BAIDUCLOUD]: AccessConfigFieldsProviderBaiduCloud,
+ [ACCESS_PROVIDERS.BAISHAN]: AccessConfigFieldsProviderBaishan,
+ [ACCESS_PROVIDERS.BAOTAPANEL]: AccessConfigFieldsProviderBaotaPanel,
+ [ACCESS_PROVIDERS.BAOTAPANELGO]: AccessConfigFieldsProviderBaotaPanelGo,
+ [ACCESS_PROVIDERS.BAOTAWAF]: AccessConfigFieldsProviderBaotaWAF,
+ [ACCESS_PROVIDERS.BOOKMYNAME]: AccessConfigFieldsProviderBookMyName,
+ [ACCESS_PROVIDERS.BUNNY]: AccessConfigFieldsProviderBunny,
+ [ACCESS_PROVIDERS.BYTEPLUS]: AccessConfigFieldsProviderBytePlus,
+ [ACCESS_PROVIDERS.CACHEFLY]: AccessConfigFieldsProviderCacheFly,
+ [ACCESS_PROVIDERS.CDNFLY]: AccessConfigFieldsProviderCdnfly,
+ [ACCESS_PROVIDERS.CLOUDFLARE]: AccessConfigFieldsProviderCloudflare,
+ [ACCESS_PROVIDERS.CLOUDNS]: AccessConfigFieldsProviderClouDNS,
+ [ACCESS_PROVIDERS.CMCCCLOUD]: AccessConfigFieldsProviderCMCCCloud,
+ [ACCESS_PROVIDERS.CONSTELLIX]: AccessConfigFieldsProviderConstellix,
+ [ACCESS_PROVIDERS.CTCCCLOUD]: AccessConfigFieldsProviderCTCCCloud,
+ [ACCESS_PROVIDERS.DESEC]: AccessConfigFieldsProviderDeSEC,
+ [ACCESS_PROVIDERS.DIGITALOCEAN]: AccessConfigFieldsProviderDigitalOcean,
+ [ACCESS_PROVIDERS.DINGTALKBOT]: AccessConfigFieldsProviderDingTalkBot,
+ [ACCESS_PROVIDERS.DISCORDBOT]: AccessConfigFieldsProviderDiscordBot,
+ [ACCESS_PROVIDERS.DNSLA]: AccessConfigFieldsProviderDNSLA,
+ [ACCESS_PROVIDERS.DOGECLOUD]: AccessConfigFieldsProviderDogeCloud,
+ [ACCESS_PROVIDERS.DUCKDNS]: AccessConfigFieldsProviderDuckDNS,
+ [ACCESS_PROVIDERS.DYNV6]: AccessConfigFieldsProviderDynv6,
+ [ACCESS_PROVIDERS.EMAIL]: AccessConfigFieldsProviderEmail,
+ [ACCESS_PROVIDERS.FLEXCDN]: AccessConfigFieldsProviderFlexCDN,
+ [ACCESS_PROVIDERS.GANDINET]: AccessConfigFieldsProviderGandinet,
+ [ACCESS_PROVIDERS.GCORE]: AccessConfigFieldsProviderGcore,
+ [ACCESS_PROVIDERS.GNAME]: AccessConfigFieldsProviderGname,
+ [ACCESS_PROVIDERS.GODADDY]: AccessConfigFieldsProviderGoDaddy,
+ [ACCESS_PROVIDERS.GOEDGE]: AccessConfigFieldsProviderGoEdge,
+ [ACCESS_PROVIDERS.GLOBALSIGNATLAS]: AccessConfigFieldsProviderGlobalSignAtlas,
+ [ACCESS_PROVIDERS.GOOGLETRUSTSERVICES]: AccessConfigFieldsProviderGoogleTrustServices,
+ [ACCESS_PROVIDERS.HETZNER]: AccessConfigFieldsProviderHetzner,
+ [ACCESS_PROVIDERS.HOSTINGDE]: AccessConfigFieldsProviderHostingde,
+ [ACCESS_PROVIDERS.HOSTINGER]: AccessConfigFieldsProviderHostinger,
+ [ACCESS_PROVIDERS.HUAWEICLOUD]: AccessConfigFieldsProviderHuaweiCloud,
+ [ACCESS_PROVIDERS.IONOS]: AccessConfigFieldsProviderIONOS,
+ [ACCESS_PROVIDERS.JDCLOUD]: AccessConfigFieldsProviderJDCloud,
+ [ACCESS_PROVIDERS.KONG]: AccessConfigFieldsProviderKong,
+ [ACCESS_PROVIDERS.KUBERNETES]: AccessConfigFieldsProviderKubernetes,
+ [ACCESS_PROVIDERS.LARKBOT]: AccessConfigFieldsProviderLarkBot,
+ [ACCESS_PROVIDERS.LECDN]: AccessConfigFieldsProviderLeCDN,
+ [ACCESS_PROVIDERS.LINODE]: AccessConfigFieldsProviderLinode,
+ [ACCESS_PROVIDERS.MATTERMOST]: AccessConfigFieldsProviderMattermost,
+ [ACCESS_PROVIDERS.NAMECHEAP]: AccessConfigFieldsProviderNamecheap,
+ [ACCESS_PROVIDERS.NAMEDOTCOM]: AccessConfigFieldsProviderNameDotCom,
+ [ACCESS_PROVIDERS.NAMESILO]: AccessConfigFieldsProviderNameSilo,
+ [ACCESS_PROVIDERS.NETCUP]: AccessConfigFieldsProviderNetcup,
+ [ACCESS_PROVIDERS.NETLIFY]: AccessConfigFieldsProviderNetlify,
+ [ACCESS_PROVIDERS.NS1]: AccessConfigFieldsProviderNS1,
+ [ACCESS_PROVIDERS.PORKBUN]: AccessConfigFieldsProviderPorkbun,
+ [ACCESS_PROVIDERS.POWERDNS]: AccessConfigFieldsProviderPowerDNS,
+ [ACCESS_PROVIDERS.PROXMOXVE]: AccessConfigFieldsProviderProxmoxVE,
+ [ACCESS_PROVIDERS.QINIU]: AccessConfigFieldsProviderQiniu,
+ [ACCESS_PROVIDERS.RAINYUN]: AccessConfigFieldsProviderRainYun,
+ [ACCESS_PROVIDERS.RATPANEL]: AccessConfigFieldsProviderRatPanel,
+ [ACCESS_PROVIDERS.RFC2136]: AccessConfigFieldsProviderRFC2136,
+ [ACCESS_PROVIDERS.SAFELINE]: AccessConfigFieldsProviderSafeLine,
+ [ACCESS_PROVIDERS.SECTIGO]: AccessConfigFieldsProviderSectigo,
+ [ACCESS_PROVIDERS.SLACKBOT]: AccessConfigFieldsProviderSlackBot,
+ [ACCESS_PROVIDERS.SPACESHIP]: AccessConfigFieldsProviderSpaceship,
+ [ACCESS_PROVIDERS.SSLCOM]: AccessConfigFieldsProviderSSLCom,
+ [ACCESS_PROVIDERS.SSH]: AccessConfigFieldsProviderSSH,
+ [ACCESS_PROVIDERS.TECHNITIUMDNS]: AccessConfigFieldsProviderTechnitiumDNS,
+ [ACCESS_PROVIDERS.TELEGRAMBOT]: AccessConfigFieldsProviderTelegramBot,
+ [ACCESS_PROVIDERS.TENCENTCLOUD]: AccessConfigFieldsProviderTencentCloud,
+ [ACCESS_PROVIDERS.UCLOUD]: AccessConfigFieldsProviderUCloud,
+ [ACCESS_PROVIDERS.UNICLOUD]: AccessConfigFieldsProviderUniCloud,
+ [ACCESS_PROVIDERS.UPYUN]: AccessConfigFieldsProviderUpyun,
+ [ACCESS_PROVIDERS.VERCEL]: AccessConfigFieldsProviderVercel,
+ [ACCESS_PROVIDERS.VOLCENGINE]: AccessConfigFieldsProviderVolcEngine,
+ [ACCESS_PROVIDERS.VULTR]: AccessConfigFieldsProviderVultr,
+ [ACCESS_PROVIDERS.WANGSU]: AccessConfigFieldsProviderWangsu,
+ [ACCESS_PROVIDERS.WEBHOOK]: AccessConfigFieldsProviderWebhook,
+ [ACCESS_PROVIDERS.WECOMBOT]: AccessConfigFieldsProviderWeComBot,
+ [ACCESS_PROVIDERS.WESTCN]: AccessConfigFieldsProviderWestcn,
+ [ACCESS_PROVIDERS.ZEROSSL]: AccessConfigFieldsProviderZeroSSL,
+};
+
+const useComponent = (provider: string, { initProps, deps = [] }: { initProps?: (provider: string) => any; deps?: unknown[] }) => {
+ const initComponent = () => {
+ const Component = providerComponentMap[provider as AccessProviderType];
+ if (!Component) return null;
+
+ const props = initProps?.(provider);
+ if (props) {
+ return ;
+ }
+
+ return ;
+ };
+
+ const [component, setComponent] = useState(() => initComponent());
+
+ useEffect(() => setComponent(initComponent()), [provider]);
+ useEffect(() => setComponent(initComponent()), deps);
+
+ return component;
+};
+
+const _default = {
+ useComponent,
+};
+
+export default _default;
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProvider1Panel.tsx b/ui/src/components/access/forms/AccessConfigFieldsProvider1Panel.tsx
index 725da3dd0..8ac354b62 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProvider1Panel.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProvider1Panel.tsx
@@ -75,10 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
apiVersion: z.string().nonempty(t("access.form.1panel_api_version.placeholder")),
- apiKey: z
- .string()
- .min(1, t("access.form.1panel_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.1panel_api_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderACMEDNS.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderACMEDNS.tsx
index c26cd012b..25eea327b 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderACMEDNS.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderACMEDNS.tsx
@@ -53,19 +53,16 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
- credentials: z
- .string()
- .max(20480, t("common.errmsg.string_max", { max: 20480 }))
- .refine((v) => {
- if (!v) return false;
+ credentials: z.string().refine((v) => {
+ if (!v) return false;
- try {
- const obj = JSON.parse(v);
- return typeof obj === "object" && !Array.isArray(obj);
- } catch {
- return false;
- }
- }, t("access.form.acmedns_credentials.errmsg.json_invalid")),
+ try {
+ const obj = JSON.parse(v);
+ return typeof obj === "object" && !Array.isArray(obj);
+ } catch {
+ return false;
+ }
+ }, t("access.form.acmedns_credentials.errmsg.json_invalid")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderACMEHttpReq.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderACMEHttpReq.tsx
index 624273dbc..5d8e0b560 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderACMEHttpReq.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderACMEHttpReq.tsx
@@ -79,14 +79,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
endpoint: z.url(t("common.errmsg.url_invalid")),
mode: z.string().nullish(),
- username: z
- .string()
- .max(256, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- password: z
- .string()
- .max(256, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
+ username: z.string().nullish(),
+ password: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderAWS.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderAWS.tsx
index 9b1685f7c..e0f223712 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderAWS.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderAWS.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.aws_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretAccessKey: z
- .string()
- .min(1, t("access.form.aws_secret_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.aws_access_key_id.placeholder")),
+ secretAccessKey: z.string().nonempty(t("access.form.aws_secret_access_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderActalisSSL.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderActalisSSL.tsx
index 5d0438f17..03eb3c34c 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderActalisSSL.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderActalisSSL.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- eabKid: z
- .string()
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string()
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string().nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string().nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderAliyun.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderAliyun.tsx
index 74fda3517..11e7c1d53 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderAliyun.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderAliyun.tsx
@@ -61,14 +61,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.aliyun_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- accessKeySecret: z
- .string()
- .min(1, t("access.form.aliyun_access_key_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.aliyun_access_key_id.placeholder")),
+ accessKeySecret: z.string().nonempty(t("access.form.aliyun_access_key_secret.placeholder")),
resourceGroupId: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderAzure.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderAzure.tsx
index 375123097..6020edf65 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderAzure.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderAzure.tsx
@@ -76,18 +76,9 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- tenantId: z
- .string()
- .min(1, t("access.form.azure_tenant_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- clientId: z
- .string()
- .min(1, t("access.form.azure_client_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- clientSecret: z
- .string()
- .min(1, t("access.form.azure_client_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ tenantId: z.string().nonempty(t("access.form.azure_tenant_id.placeholder")),
+ clientId: z.string().nonempty(t("access.form.azure_client_id.placeholder")),
+ clientSecret: z.string().nonempty(t("access.form.azure_client_secret.placeholder")),
cloudName: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderBaiduCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderBaiduCloud.tsx
index 2a4221b6a..2cb73cad8 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderBaiduCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderBaiduCloud.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.baiducloud_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretAccessKey: z
- .string()
- .min(1, t("access.form.baiducloud_secret_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.baiducloud_access_key_id.placeholder")),
+ secretAccessKey: z.string().nonempty(t("access.form.baiducloud_secret_access_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderBaishan.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderBaishan.tsx
index 93aff79e9..1d53751ec 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderBaishan.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderBaishan.tsx
@@ -34,10 +34,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiToken: z
- .string()
- .min(1, t("access.form.baishan_api_token.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiToken: z.string().nonempty(t("access.form.baishan_api_token.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderBytePlus.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderBytePlus.tsx
index daf88ca54..9be602f2d 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderBytePlus.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderBytePlus.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKey: z
- .string()
- .min(1, t("access.form.byteplus_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretKey: z
- .string()
- .min(1, t("access.form.byteplus_secret_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKey: z.string().nonempty(t("access.form.byteplus_access_key.placeholder")),
+ secretKey: z.string().nonempty(t("access.form.byteplus_secret_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderCMCCCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderCMCCCloud.tsx
index 280c90672..bdf9267ce 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderCMCCCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderCMCCCloud.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.cmcccloud_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- accessKeySecret: z
- .string()
- .min(1, t("access.form.cmcccloud_access_key_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.cmcccloud_access_key_id.placeholder")),
+ accessKeySecret: z.string().nonempty(t("access.form.cmcccloud_access_key_secret.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderCTCCCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderCTCCCloud.tsx
index 7beb283e3..03fe29845 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderCTCCCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderCTCCCloud.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.ctcccloud_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretAccessKey: z
- .string()
- .min(1, t("access.form.ctcccloud_secret_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.ctcccloud_access_key_id.placeholder")),
+ secretAccessKey: z.string().nonempty(t("access.form.ctcccloud_secret_access_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderCdnfly.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderCdnfly.tsx
index 85ae13e20..87743ba84 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderCdnfly.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderCdnfly.tsx
@@ -74,14 +74,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
- apiKey: z
- .string()
- .min(1, t("access.form.cdnfly_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiSecret: z
- .string()
- .min(1, t("access.form.cdnfly_api_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.cdnfly_api_key.placeholder")),
+ apiSecret: z.string().nonempty(t("access.form.cdnfly_api_secret.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderClouDNS.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderClouDNS.tsx
index 0efdf49ce..028e9a143 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderClouDNS.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderClouDNS.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- authId: z
- .string()
- .min(1, t("access.form.cloudns_auth_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- authPassword: z
- .string()
- .min(1, t("access.form.cloudns_auth_password.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ authId: z.string().nonempty(t("access.form.cloudns_auth_id.placeholder")),
+ authPassword: z.string().nonempty(t("access.form.cloudns_auth_password.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderCloudflare.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderCloudflare.tsx
index cbb72b75f..5f70d3105 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderCloudflare.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderCloudflare.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- dnsApiToken: z
- .string()
- .min(1, t("access.form.cloudflare_dns_api_token.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- zoneApiToken: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 64 }))
- .nullish(),
+ dnsApiToken: z.string().nonempty(t("access.form.cloudflare_dns_api_token.placeholder")),
+ zoneApiToken: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderDNSLA.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderDNSLA.tsx
index dce2b407f..779de5da2 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderDNSLA.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderDNSLA.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiId: z
- .string()
- .min(1, t("access.form.dnsla_api_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiSecret: z
- .string()
- .min(1, t("access.form.dnsla_api_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiId: z.string().nonempty(t("access.form.dnsla_api_id.placeholder")),
+ apiSecret: z.string().nonempty(t("access.form.dnsla_api_secret.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderDeSEC.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderDeSEC.tsx
index 8a8110fd3..b45df4d62 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderDeSEC.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderDeSEC.tsx
@@ -40,10 +40,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- token: z
- .string()
- .min(1, t("access.form.desec_token.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ token: z.string().nonempty(t("access.form.desec_token.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderDiscordBot.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderDiscordBot.tsx
index 8abfbc021..fac76871a 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderDiscordBot.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderDiscordBot.tsx
@@ -51,10 +51,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- botToken: z
- .string()
- .min(1, t("access.form.discordbot_token.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ botToken: z.string().nonempty(t("access.form.discordbot_token.placeholder")),
channelId: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderDogeCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderDogeCloud.tsx
index 69fa743b7..8f9f1ab85 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderDogeCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderDogeCloud.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKey: z
- .string()
- .min(1, t("access.form.dogecloud_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretKey: z
- .string()
- .min(1, t("access.form.dogecloud_secret_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKey: z.string().nonempty(t("access.form.dogecloud_access_key.placeholder")),
+ secretKey: z.string().nonempty(t("access.form.dogecloud_secret_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderDynv6.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderDynv6.tsx
index 3b23629a4..e675d6fc0 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderDynv6.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderDynv6.tsx
@@ -40,10 +40,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- httpToken: z
- .string()
- .min(1, t("access.form.dynv6_http_token.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ httpToken: z.string().nonempty(t("access.form.dynv6_http_token.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderEmail.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderEmail.tsx
index 559497399..8feeaded1 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderEmail.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderEmail.tsx
@@ -112,23 +112,11 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- smtpHost: z
- .string()
- .min(1, t("access.form.email_smtp_host.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- smtpPort: z.preprocess(
- (v) => Number(v),
- z.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
- ),
+ smtpHost: z.string().nonempty(t("access.form.email_smtp_host.placeholder")),
+ smtpPort: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
smtpTls: z.boolean().nullish(),
- username: z
- .string()
- .min(1, t("access.form.email_username.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- password: z
- .string()
- .min(1, t("access.form.email_password.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ username: z.string().nonempty(t("access.form.email_username.placeholder")),
+ password: z.string().nonempty(t("access.form.email_password.placeholder")),
senderAddress: z.email(t("common.errmsg.email_invalid")),
senderName: z.string().nullish(),
receiverAddress: z
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx
index 68c75d8ea..b908f9210 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderGlobalSignAtlas.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- eabKid: z
- .string()
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string()
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string().nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string().nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderGname.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderGname.tsx
index 746187601..86a5fd8ab 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderGname.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderGname.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- appId: z
- .string()
- .min(1, t("access.form.gname_app_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- appKey: z
- .string()
- .min(1, t("access.form.gname_app_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ appId: z.string().nonempty(t("access.form.gname_app_id.placeholder")),
+ appKey: z.string().nonempty(t("access.form.gname_app_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderGoDaddy.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderGoDaddy.tsx
index 3dd30815c..a6f368dc6 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderGoDaddy.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderGoDaddy.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiKey: z
- .string()
- .min(1, t("access.form.godaddy_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiSecret: z
- .string()
- .min(1, t("access.form.godaddy_api_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.godaddy_api_key.placeholder")),
+ apiSecret: z.string().nonempty(t("access.form.godaddy_api_secret.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderGoogleTrustServices.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderGoogleTrustServices.tsx
index ae5edab5d..82cc01045 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderGoogleTrustServices.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderGoogleTrustServices.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- eabKid: z
- .string()
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string()
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string().nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string().nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderHostingde.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderHostingde.tsx
new file mode 100644
index 000000000..35d09f49d
--- /dev/null
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderHostingde.tsx
@@ -0,0 +1,52 @@
+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 AccessConfigFormFieldsProviderHostingde = () => {
+ const { i18n, t } = useTranslation();
+
+ const { parentNamePath } = useFormNestedFieldsContext();
+ const formSchema = z.object({
+ [parentNamePath]: getSchema({ i18n }),
+ });
+ const formRule = createSchemaFieldRule(formSchema);
+ const initialValues = getInitialValues();
+
+ return (
+ <>
+ }
+ >
+
+
+ >
+ );
+};
+
+const getInitialValues = (): Nullish>> => {
+ return {
+ apiKey: "",
+ };
+};
+
+const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => {
+ const { t } = i18n;
+
+ return z.object({
+ apiKey: z.string().nonempty(t("access.form.hostingde_api_key.placeholder")),
+ });
+};
+
+const _default = Object.assign(AccessConfigFormFieldsProviderHostingde, {
+ getInitialValues,
+ getSchema,
+});
+
+export default _default;
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderHuaweiCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderHuaweiCloud.tsx
index 279703835..fce3963f7 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderHuaweiCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderHuaweiCloud.tsx
@@ -61,14 +61,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.huaweicloud_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretAccessKey: z
- .string()
- .min(1, t("access.form.huaweicloud_secret_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.huaweicloud_access_key_id.placeholder")),
+ secretAccessKey: z.string().nonempty(t("access.form.huaweicloud_secret_access_key.placeholder")),
enterpriseProjectId: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderJDCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderJDCloud.tsx
index 4a58c29ce..b94df308b 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderJDCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderJDCloud.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.jdcloud_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- accessKeySecret: z
- .string()
- .min(1, t("access.form.jdcloud_access_key_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.jdcloud_access_key_id.placeholder")),
+ accessKeySecret: z.string().nonempty(t("access.form.jdcloud_access_key_secret.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderNS1.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderNS1.tsx
index b60f766d4..14bdef231 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderNS1.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderNS1.tsx
@@ -40,10 +40,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiKey: z
- .string()
- .min(1, t("access.form.ns1_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.ns1_api_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderNameDotCom.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderNameDotCom.tsx
index 1efbf2b2d..580cca2b5 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderNameDotCom.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderNameDotCom.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- username: z
- .string()
- .min(1, t("access.form.namedotcom_username.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiToken: z
- .string()
- .min(1, t("access.form.namedotcom_api_token.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ username: z.string().nonempty(t("access.form.namedotcom_username.placeholder")),
+ apiToken: z.string().nonempty(t("access.form.namedotcom_api_token.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderNameSilo.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderNameSilo.tsx
index aba5bf4b1..b5e2781e5 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderNameSilo.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderNameSilo.tsx
@@ -40,10 +40,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiKey: z
- .string()
- .min(1, t("access.form.namesilo_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.namesilo_api_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderNamecheap.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderNamecheap.tsx
index 0b3018a5e..f05333cab 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderNamecheap.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderNamecheap.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- username: z
- .string()
- .min(1, t("access.form.namecheap_username.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiKey: z
- .string()
- .min(1, t("access.form.namecheap_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ username: z.string().nonempty(t("access.form.namecheap_username.placeholder")),
+ apiKey: z.string().nonempty(t("access.form.namecheap_api_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderPorkbun.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderPorkbun.tsx
index 881d32325..3d2eede82 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderPorkbun.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderPorkbun.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiKey: z
- .string()
- .min(1, t("access.form.porkbun_api_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- secretApiKey: z
- .string()
- .min(1, t("access.form.porkbun_secret_api_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ apiKey: z.string().nonempty(t("access.form.porkbun_api_key.placeholder")),
+ secretApiKey: z.string().nonempty(t("access.form.porkbun_secret_api_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderPowerDNS.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderPowerDNS.tsx
index b7bbbfe63..687348613 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderPowerDNS.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderPowerDNS.tsx
@@ -63,10 +63,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
- apiKey: z
- .string()
- .min(1, t("access.form.powerdns_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.powerdns_api_key.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderQiniu.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderQiniu.tsx
index 940740c62..0f1cef9e0 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderQiniu.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderQiniu.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKey: z
- .string()
- .min(1, t("access.form.qiniu_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretKey: z
- .string()
- .min(1, t("access.form.qiniu_secret_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKey: z.string().nonempty(t("access.form.qiniu_access_key.placeholder")),
+ secretKey: z.string().nonempty(t("access.form.qiniu_secret_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderRFC2136.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderRFC2136.tsx
index 263e48e9f..0f263cf75 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderRFC2136.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderRFC2136.tsx
@@ -82,13 +82,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
host: z.string().refine((v) => validDomainName(v) || validIPv4Address(v) || validIPv6Address(v), t("common.errmsg.host_invalid")),
- port: z.preprocess(
- (v) => Number(v),
- z
- .number()
- .int(t("access.form.rfc2136_port.placeholder"))
- .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
- ),
+ port: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
tsigAlgorithm: z.string().nonempty(t("access.form.rfc2136_tsig_algorithm.placeholder")),
tsigKey: z.string().nullish(),
tsigSecret: z.string().nullish(),
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderRainYun.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderRainYun.tsx
index e06b3d10c..f82409765 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderRainYun.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderRainYun.tsx
@@ -40,10 +40,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiKey: z
- .string()
- .min(1, t("access.form.rainyun_api_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiKey: z.string().nonempty(t("access.form.rainyun_api_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderRatPanel.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderRatPanel.tsx
index 03c2597bf..971cb4b64 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderRatPanel.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderRatPanel.tsx
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
- accessTokenId: z.preprocess((v) => Number(v), z.number().positive(t("access.form.ratpanel_access_token_id.placeholder"))),
+ accessTokenId: z.coerce.number().int(t("access.form.ratpanel_access_token_id.placeholder")).positive(t("access.form.ratpanel_access_token_id.placeholder")),
accessToken: z.string().nonempty(t("access.form.ratpanel_access_token.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderSSH.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderSSH.tsx
index 278faa83e..89003bd51 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderSSH.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderSSH.tsx
@@ -235,30 +235,18 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const baseSchema = z
.object({
host: z.string().refine((v) => validDomainName(v) || validIPv4Address(v) || validIPv6Address(v), t("common.errmsg.host_invalid")),
- port: z.preprocess(
- (v) => Number(v),
- z
- .number()
- .int(t("access.form.ssh_port.placeholder"))
- .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
- ),
+ port: z.coerce
+ .number()
+ .int(t("access.form.ssh_port.placeholder"))
+ .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
authMethod: z.literal([AUTH_METHOD_NONE, AUTH_METHOD_PASSWORD, AUTH_METHOD_KEY], t("access.form.ssh_auth_method.placeholder")),
- username: z
- .string()
- .min(1, t("access.form.ssh_username.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- password: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 64 }))
- .nullish(),
+ username: z.string().nonempty(t("access.form.ssh_username.placeholder")),
+ password: z.string().nullish(),
key: z
.string()
.max(20480, t("common.errmsg.string_max", { max: 20480 }))
.nullish(),
- keyPassphrase: z
- .string()
- .max(20480, t("common.errmsg.string_max", { max: 20480 }))
- .nullish(),
+ keyPassphrase: z.string().nullish(),
})
.superRefine((values, ctx) => {
switch (values.authMethod) {
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderSSLCom.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderSSLCom.tsx
index 6e5b83180..fa0ac3c54 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderSSLCom.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderSSLCom.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- eabKid: z
- .string()
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string()
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string().nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string().nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderSafeLine.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderSafeLine.tsx
index 7b1970b26..a13b55a96 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderSafeLine.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderSafeLine.tsx
@@ -63,10 +63,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
serverUrl: z.url(t("common.errmsg.url_invalid")),
- apiToken: z
- .string()
- .min(1, t("access.form.safeline_api_token.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ apiToken: z.string().nonempty(t("access.form.safeline_api_token.placeholder")),
allowInsecureConnections: z.boolean().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderSectigo.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderSectigo.tsx
index a73614770..a92816db6 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderSectigo.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderSectigo.tsx
@@ -68,14 +68,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
return z.object({
validationType: z.string().nonempty(t("access.form.sectigo_validation_type.placeholder")),
- eabKid: z
- .string()
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string()
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string().nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string().nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderSlackBot.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderSlackBot.tsx
index 142e9d314..fe431f4f4 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderSlackBot.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderSlackBot.tsx
@@ -51,10 +51,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- botToken: z
- .string()
- .min(1, t("access.form.slackbot_token.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ botToken: z.string().nonempty(t("access.form.slackbot_token.placeholder")),
channelId: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderTelegramBot.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderTelegramBot.tsx
index 1f1f4aa3e..431ae7469 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderTelegramBot.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderTelegramBot.tsx
@@ -51,10 +51,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- botToken: z
- .string()
- .min(1, t("access.form.telegrambot_token.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ botToken: z.string().nonempty(t("access.form.telegrambot_token.placeholder")),
chatId: z
.preprocess(
(v) => (v == null || v === "" ? void 0 : Number(v)),
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderTencentCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderTencentCloud.tsx
index f57e93487..9afd266ec 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderTencentCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderTencentCloud.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- secretId: z
- .string()
- .min(1, t("access.form.tencentcloud_secret_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretKey: z
- .string()
- .min(1, t("access.form.tencentcloud_secret_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ secretId: z.string().nonempty(t("access.form.tencentcloud_secret_id.placeholder")),
+ secretKey: z.string().nonempty(t("access.form.tencentcloud_secret_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderUCloud.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderUCloud.tsx
index 3b506bdb7..af30c2933 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderUCloud.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderUCloud.tsx
@@ -61,18 +61,9 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- privateKey: z
- .string()
- .min(1, t("access.form.ucloud_private_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- publicKey: z
- .string()
- .min(1, t("access.form.ucloud_public_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- projectId: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 64 }))
- .nullish(),
+ privateKey: z.string().nonempty(t("access.form.ucloud_private_key.placeholder")),
+ publicKey: z.string().nonempty(t("access.form.ucloud_public_key.placeholder")),
+ projectId: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderUpyun.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderUpyun.tsx
index 11c18ff45..346105caf 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderUpyun.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderUpyun.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- username: z
- .string()
- .min(1, t("access.form.upyun_username.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- password: z
- .string()
- .min(1, t("access.form.upyun_password.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ username: z.string().nonempty(t("access.form.upyun_username.placeholder")),
+ password: z.string().nonempty(t("access.form.upyun_password.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderVercel.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderVercel.tsx
index 4963cfdf3..0adcb0651 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderVercel.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderVercel.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- apiAccessToken: z
- .string()
- .min(1, t("access.form.vercel_api_access_token.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- teamId: z
- .string()
- .max(256, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
+ apiAccessToken: z.string().nonempty(t("access.form.vercel_api_access_token.placeholder")),
+ teamId: z.string().nullish(),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderVolcEngine.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderVolcEngine.tsx
index a8330ff62..5798491a8 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderVolcEngine.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderVolcEngine.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.volcengine_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- secretAccessKey: z
- .string()
- .min(1, t("access.form.volcengine_secret_access_key.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ accessKeyId: z.string().nonempty(t("access.form.volcengine_access_key_id.placeholder")),
+ secretAccessKey: z.string().nonempty(t("access.form.volcengine_secret_access_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderWangsu.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderWangsu.tsx
index 803fb3c44..ce5ea96e7 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderWangsu.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderWangsu.tsx
@@ -62,18 +62,9 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- accessKeyId: z
- .string()
- .min(1, t("access.form.wangsu_access_key_id.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- accessKeySecret: z
- .string()
- .min(1, t("access.form.wangsu_access_key_secret.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiKey: z
- .string()
- .min(1, t("access.form.wangsu_api_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ accessKeyId: z.string().nonempty(t("access.form.wangsu_access_key_id.placeholder")),
+ accessKeySecret: z.string().nonempty(t("access.form.wangsu_access_key_secret.placeholder")),
+ apiKey: z.string().nonempty(t("access.form.wangsu_api_key.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderWestcn.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderWestcn.tsx
index 4b17fcc2b..9d613312b 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderWestcn.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderWestcn.tsx
@@ -51,14 +51,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- username: z
- .string()
- .min(1, t("access.form.westcn_username.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
- apiPassword: z
- .string()
- .min(1, t("access.form.westcn_api_password.placeholder"))
- .max(64, t("common.errmsg.string_max", { max: 64 })),
+ username: z.string().nonempty(t("access.form.westcn_username.placeholder")),
+ apiPassword: z.string().nonempty(t("access.form.westcn_api_password.placeholder")),
});
};
diff --git a/ui/src/components/access/forms/AccessConfigFieldsProviderZeroSSL.tsx b/ui/src/components/access/forms/AccessConfigFieldsProviderZeroSSL.tsx
index c324a7819..40520d4f6 100644
--- a/ui/src/components/access/forms/AccessConfigFieldsProviderZeroSSL.tsx
+++ b/ui/src/components/access/forms/AccessConfigFieldsProviderZeroSSL.tsx
@@ -50,14 +50,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) =
const { t } = i18n;
return z.object({
- eabKid: z
- .string()
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string()
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string().nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string().nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
};
diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFieldsProvider.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFieldsProvider.tsx
new file mode 100644
index 000000000..f46f38bb0
--- /dev/null
+++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFieldsProvider.tsx
@@ -0,0 +1,71 @@
+import { useEffect, useState } from "react";
+
+import { type ACMEDns01ProviderType, type ACMEHttp01ProviderType, ACME_DNS01_PROVIDERS, ACME_HTTP01_PROVIDERS } from "@/domain/provider";
+
+import BizApplyNodeConfigFieldsProviderAliyunESA from "./BizApplyNodeConfigFieldsProviderAliyunESA";
+import BizApplyNodeConfigFieldsProviderAWSRoute53 from "./BizApplyNodeConfigFieldsProviderAWSRoute53";
+import BizApplyNodeConfigFieldsProviderHuaweiCloudDNS from "./BizApplyNodeConfigFieldsProviderHuaweiCloudDNS";
+import BizApplyNodeConfigFieldsProviderJDCloudDNS from "./BizApplyNodeConfigFieldsProviderJDCloudDNS";
+import BizApplyNodeConfigFieldsProviderLocal from "./BizApplyNodeConfigFieldsProviderLocal";
+import BizApplyNodeConfigFieldsProviderSSH from "./BizApplyNodeConfigFieldsProviderSSH";
+import BizApplyNodeConfigFieldsProviderTencentCloudEO from "./BizApplyNodeConfigFieldsProviderTencentCloudEO";
+
+const acmeDns01ProviderComponentMap: Partial>> = {
+ /*
+ 注意:如果追加新的子组件,请保持以 ASCII 排序。
+ NOTICE: If you add new child component, please keep ASCII order.
+ */
+ [ACME_DNS01_PROVIDERS.ALIYUN_ESA]: BizApplyNodeConfigFieldsProviderAliyunESA,
+ [ACME_DNS01_PROVIDERS.AWS]: BizApplyNodeConfigFieldsProviderAWSRoute53,
+ [ACME_DNS01_PROVIDERS.AWS_ROUTE53]: BizApplyNodeConfigFieldsProviderAWSRoute53,
+ [ACME_DNS01_PROVIDERS.HUAWEICLOUD]: BizApplyNodeConfigFieldsProviderHuaweiCloudDNS,
+ [ACME_DNS01_PROVIDERS.HUAWEICLOUD_DNS]: BizApplyNodeConfigFieldsProviderHuaweiCloudDNS,
+ [ACME_DNS01_PROVIDERS.JDCLOUD]: BizApplyNodeConfigFieldsProviderJDCloudDNS,
+ [ACME_DNS01_PROVIDERS.JDCLOUD_DNS]: BizApplyNodeConfigFieldsProviderJDCloudDNS,
+ [ACME_DNS01_PROVIDERS.TENCENTCLOUD_EO]: BizApplyNodeConfigFieldsProviderTencentCloudEO,
+};
+
+const acmeHttp01ProviderComponentMap: Partial>> = {
+ /*
+ 注意:如果追加新的子组件,请保持以 ASCII 排序。
+ NOTICE: If you add new child component, please keep ASCII order.
+ */
+ [ACME_HTTP01_PROVIDERS.LOCAL]: BizApplyNodeConfigFieldsProviderLocal,
+ [ACME_HTTP01_PROVIDERS.SSH]: BizApplyNodeConfigFieldsProviderSSH,
+};
+
+const useComponent = (
+ challenge: "dns-01" | "http-01",
+ provider: string,
+ { initProps, deps = [] }: { initProps?: (provider: string) => any; deps?: unknown[] }
+) => {
+ const initComponent = () => {
+ const Component =
+ challenge === "dns-01"
+ ? acmeDns01ProviderComponentMap[provider as ACMEDns01ProviderType]
+ : challenge === "http-01"
+ ? acmeHttp01ProviderComponentMap[provider as ACMEHttp01ProviderType]
+ : void 0;
+ if (!Component) return null;
+
+ const props = initProps?.(provider);
+ if (props) {
+ return ;
+ }
+
+ return ;
+ };
+
+ const [component, setComponent] = useState(() => initComponent());
+
+ useEffect(() => setComponent(initComponent()), [challenge, provider]);
+ useEffect(() => setComponent(initComponent()), deps);
+
+ return component;
+};
+
+const _default = {
+ useComponent,
+};
+
+export default _default;
diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx
index 58d167b60..28b3c4026 100644
--- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx
@@ -1,7 +1,7 @@
import { memo, useEffect, useMemo, useState } from "react";
import { getI18n, useTranslation } from "react-i18next";
import { Link } from "react-router";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { IconChevronRight, IconCircleMinus, IconPlus } from "@tabler/icons-react";
import { useControllableValue, useMount } from "ahooks";
import {
@@ -33,7 +33,7 @@ import CAProviderSelect from "@/components/provider/CAProviderSelect";
import Show from "@/components/Show";
import TextFileInput from "@/components/TextFileInput";
import { type AccessModel } from "@/domain/access";
-import { ACME_DNS01_PROVIDERS, ACME_HTTP01_PROVIDERS, acmeDns01ProvidersMap, acmeHttp01ProvidersMap, caProvidersMap } from "@/domain/provider";
+import { acmeDns01ProvidersMap, acmeHttp01ProvidersMap, caProvidersMap } from "@/domain/provider";
import { type WorkflowNodeConfigForBizApply, defaultNodeConfigForBizApply } from "@/domain/workflow";
import { useAntdForm, useZustandShallowSelector } from "@/hooks";
import { useAccessesStore } from "@/stores/access";
@@ -42,13 +42,7 @@ import { getErrMsg } from "@/utils/error";
import { validDomainName, validIPv4Address, validIPv6Address } from "@/utils/validators";
import { FormNestedFieldsContextProvider, NodeFormContextProvider } from "./_context";
-import BizApplyNodeConfigFieldsProviderAliyunESA from "./BizApplyNodeConfigFieldsProviderAliyunESA";
-import BizApplyNodeConfigFieldsProviderAWSRoute53 from "./BizApplyNodeConfigFieldsProviderAWSRoute53";
-import BizApplyNodeConfigFieldsProviderHuaweiCloudDNS from "./BizApplyNodeConfigFieldsProviderHuaweiCloudDNS";
-import BizApplyNodeConfigFieldsProviderJDCloudDNS from "./BizApplyNodeConfigFieldsProviderJDCloudDNS";
-import BizApplyNodeConfigFieldsProviderLocal from "./BizApplyNodeConfigFieldsProviderLocal";
-import BizApplyNodeConfigFieldsProviderSSH from "./BizApplyNodeConfigFieldsProviderSSH";
-import BizApplyNodeConfigFieldsProviderTencentCloudEO from "./BizApplyNodeConfigFieldsProviderTencentCloudEO";
+import BizApplyNodeConfigFieldsProvider from "./BizApplyNodeConfigFieldsProvider";
import { NodeType } from "../nodes/typings";
const MULTIPLE_INPUT_SEPARATOR = ";";
@@ -85,25 +79,28 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
};
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForBizApply | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForBizApply | undefined;
}, [node]);
const formSchema = getSchema({ i18n });
+ type FormSchema = z.infer;
const formRule = createSchemaFieldRule(formSchema);
- const { form: formInst, formProps } = useAntdForm>({
+ const { form: formInst, formProps } = useAntdForm({
form: props.form,
name: "workflowNodeBizApplyConfigForm",
initialValues: initialValues ?? getInitialValues(),
});
- const fieldChallengeType = Form.useWatch("challengeType", { form: formInst, preserve: true });
+ const fieldChallengeType = Form.useWatch("challengeType", { form: formInst, preserve: true });
const fieldProvider = Form.useWatch("provider", { form: formInst, preserve: true });
const fieldProviderAccessId = Form.useWatch("providerAccessId", { form: formInst, preserve: true });
const fieldKeySource = Form.useWatch("keySource", { form: formInst, preserve: true });
const fieldCAProvider = Form.useWatch("caProvider", { form: formInst, preserve: true });
const fieldCAProviderAccessId = Form.useWatch("caProviderAccessId", { form: formInst, preserve: true });
- const resetFieldIfInvalid = (field: keyof z.infer) => {
+ const renderNestedFieldProviderComponent = BizApplyNodeConfigFieldsProvider.useComponent(fieldChallengeType, fieldProvider, {});
+
+ const resetFieldIfInvalid = (field: keyof FormSchema) => {
const fieldSchame = formSchema.pick({ [field]: true });
const fieldValue = formInst.getFieldValue(field);
if (!fieldSchame.safeParse({ [field]: fieldValue }).success) {
@@ -111,61 +108,14 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
}
};
- const NestedProviderConfigFields = useMemo(() => {
- /*
- 注意:如果追加新的子组件,请保持以 ASCII 排序。
- NOTICE: If you add new child component, please keep ASCII order.
- */
- switch (fieldChallengeType) {
- case CHALLENGE_TYPE_DNS01:
- {
- switch (fieldProvider) {
- case ACME_DNS01_PROVIDERS.ALIYUN_ESA: {
- return BizApplyNodeConfigFieldsProviderAliyunESA;
- }
- case ACME_DNS01_PROVIDERS.AWS:
- case ACME_DNS01_PROVIDERS.AWS_ROUTE53: {
- return BizApplyNodeConfigFieldsProviderAWSRoute53;
- }
- case ACME_DNS01_PROVIDERS.HUAWEICLOUD:
- case ACME_DNS01_PROVIDERS.HUAWEICLOUD_DNS: {
- return BizApplyNodeConfigFieldsProviderHuaweiCloudDNS;
- }
- case ACME_DNS01_PROVIDERS.JDCLOUD:
- case ACME_DNS01_PROVIDERS.JDCLOUD_DNS: {
- return BizApplyNodeConfigFieldsProviderJDCloudDNS;
- }
- case ACME_DNS01_PROVIDERS.TENCENTCLOUD_EO: {
- return BizApplyNodeConfigFieldsProviderTencentCloudEO;
- }
- }
- }
- break;
-
- case CHALLENGE_TYPE_HTTP01:
- switch (fieldProvider) {
- case ACME_HTTP01_PROVIDERS.LOCAL: {
- return BizApplyNodeConfigFieldsProviderLocal;
- }
- case ACME_HTTP01_PROVIDERS.SSH: {
- return BizApplyNodeConfigFieldsProviderSSH;
- }
- }
- break;
- }
- }, [fieldChallengeType, fieldProvider]);
-
- const [showProviderAccess, setShowProviderAccess] = useState(false);
- useEffect(() => {
+ const showProviderAccess = useMemo(() => {
// 内置的质询提供商(如本地主机)无需显示授权信息字段
switch (fieldChallengeType) {
case CHALLENGE_TYPE_DNS01:
{
if (fieldProvider) {
const provider = acmeDns01ProvidersMap.get(fieldProvider);
- setShowProviderAccess(!provider?.builtin);
- } else {
- setShowProviderAccess(false);
+ return !provider?.builtin;
}
}
break;
@@ -174,30 +124,23 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
{
if (fieldProvider) {
const provider = acmeHttp01ProvidersMap.get(fieldProvider);
- setShowProviderAccess(!provider?.builtin);
- } else {
- setShowProviderAccess(false);
+ return !provider?.builtin;
}
}
break;
-
- default:
- {
- setShowProviderAccess(false);
- }
- break;
}
+
+ return false;
}, [fieldChallengeType, fieldProvider]);
- const [showCAProviderAccess, setShowCAProviderAccess] = useState(false);
- useEffect(() => {
+ const showCAProviderAccess = useMemo(() => {
// 内置的 CA 提供商(如 Let's Encrypt)无需显示授权信息字段
if (fieldCAProvider) {
const provider = caProvidersMap.get(fieldCAProvider);
- setShowCAProviderAccess(!provider?.builtin);
- } else {
- setShowCAProviderAccess(false);
+ return !provider?.builtin;
}
+
+ return false;
}, [fieldCAProvider]);
useEffect(() => {
@@ -460,7 +403,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
- {NestedProviderConfigFields && }
+ {renderNestedFieldProviderComponent && <>{renderNestedFieldProviderComponent}>}
@@ -700,7 +643,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
})
.every((e) => validDomainName(e, { allowWildcard: true }));
}, t("common.errmsg.domain_invalid")),
contactEmail: z.email(t("common.errmsg.email_invalid")),
- challengeType: z.string(t("workflow_node.apply.form.challenge_type.placeholder")).nonempty(t("workflow_node.apply.form.challenge_type.placeholder")),
+ challengeType: z.enum([CHALLENGE_TYPE_DNS01, CHALLENGE_TYPE_HTTP01], t("workflow_node.apply.form.challenge_type.placeholder")),
provider: z.string(t("workflow_node.apply.form.provider.placeholder")).nonempty(t("workflow_node.apply.form.provider.placeholder")),
providerAccessId: z.string(t("workflow_node.apply.form.provider_access.placeholder")).nullish(),
providerConfig: z.any().nullish(),
@@ -944,13 +887,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
acmeProfile: z.string().nullish(),
disableFollowCNAME: z.boolean().nullish(),
disableARI: z.boolean().nullish(),
- skipBeforeExpiryDays: z.preprocess(
- (v) => Number(v),
- z
- .number()
- .int(t("workflow_node.apply.form.skip_before_expiry_days.placeholder"))
- .gte(1, t("workflow_node.apply.form.skip_before_expiry_days.placeholder"))
- ),
+ skipBeforeExpiryDays: z.coerce
+ .number()
+ .int(t("workflow_node.apply.form.skip_before_expiry_days.placeholder"))
+ .nonnegative(t("workflow_node.apply.form.skip_before_expiry_days.placeholder")),
})
.superRefine((values, ctx) => {
if (values.domains) {
diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx
new file mode 100644
index 000000000..b1278a1ae
--- /dev/null
+++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProvider.tsx
@@ -0,0 +1,228 @@
+import { useEffect, useState } from "react";
+
+import { DEPLOYMENT_PROVIDERS, type DeploymentProviderType } from "@/domain/provider";
+
+import BizDeployNodeConfigFieldsProvider1PanelConsole from "./BizDeployNodeConfigFieldsProvider1PanelConsole";
+import BizDeployNodeConfigFieldsProvider1PanelSite from "./BizDeployNodeConfigFieldsProvider1PanelSite";
+import BizDeployNodeConfigFieldsProviderAliyunALB from "./BizDeployNodeConfigFieldsProviderAliyunALB";
+import BizDeployNodeConfigFieldsProviderAliyunAPIGW from "./BizDeployNodeConfigFieldsProviderAliyunAPIGW";
+import BizDeployNodeConfigFieldsProviderAliyunCAS from "./BizDeployNodeConfigFieldsProviderAliyunCAS";
+import BizDeployNodeConfigFieldsProviderAliyunCASDeploy from "./BizDeployNodeConfigFieldsProviderAliyunCASDeploy";
+import BizDeployNodeConfigFieldsProviderAliyunCDN from "./BizDeployNodeConfigFieldsProviderAliyunCDN";
+import BizDeployNodeConfigFieldsProviderAliyunCLB from "./BizDeployNodeConfigFieldsProviderAliyunCLB";
+import BizDeployNodeConfigFieldsProviderAliyunDCDN from "./BizDeployNodeConfigFieldsProviderAliyunDCDN";
+import BizDeployNodeConfigFieldsProviderAliyunDDoS from "./BizDeployNodeConfigFieldsProviderAliyunDDoS";
+import BizDeployNodeConfigFieldsProviderAliyunESA from "./BizDeployNodeConfigFieldsProviderAliyunESA";
+import BizDeployNodeConfigFieldsProviderAliyunFC from "./BizDeployNodeConfigFieldsProviderAliyunFC";
+import BizDeployNodeConfigFieldsProviderAliyunGA from "./BizDeployNodeConfigFieldsProviderAliyunGA";
+import BizDeployNodeConfigFieldsProviderAliyunLive from "./BizDeployNodeConfigFieldsProviderAliyunLive";
+import BizDeployNodeConfigFieldsProviderAliyunNLB from "./BizDeployNodeConfigFieldsProviderAliyunNLB";
+import BizDeployNodeConfigFieldsProviderAliyunOSS from "./BizDeployNodeConfigFieldsProviderAliyunOSS";
+import BizDeployNodeConfigFieldsProviderAliyunVOD from "./BizDeployNodeConfigFieldsProviderAliyunVOD";
+import BizDeployNodeConfigFieldsProviderAliyunWAF from "./BizDeployNodeConfigFieldsProviderAliyunWAF";
+import BizDeployNodeConfigFieldsProviderAPISIX from "./BizDeployNodeConfigFieldsProviderAPISIX";
+import BizDeployNodeConfigFieldsProviderAWSACM from "./BizDeployNodeConfigFieldsProviderAWSACM";
+import BizDeployNodeConfigFieldsProviderAWSCloudFront from "./BizDeployNodeConfigFieldsProviderAWSCloudFront";
+import BizDeployNodeConfigFieldsProviderAWSIAM from "./BizDeployNodeConfigFieldsProviderAWSIAM";
+import BizDeployNodeConfigFieldsProviderAzureKeyVault from "./BizDeployNodeConfigFieldsProviderAzureKeyVault";
+import BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB from "./BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB";
+import BizDeployNodeConfigFieldsProviderBaiduCloudBLB from "./BizDeployNodeConfigFieldsProviderBaiduCloudBLB";
+import BizDeployNodeConfigFieldsProviderBaiduCloudCDN from "./BizDeployNodeConfigFieldsProviderBaiduCloudCDN";
+import BizDeployNodeConfigFieldsProviderBaishanCDN from "./BizDeployNodeConfigFieldsProviderBaishanCDN";
+import BizDeployNodeConfigFieldsProviderBaotaPanelConsole from "./BizDeployNodeConfigFieldsProviderBaotaPanelConsole";
+import BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole from "./BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole";
+import BizDeployNodeConfigFieldsProviderBaotaPanelGoSite from "./BizDeployNodeConfigFieldsProviderBaotaPanelGoSite";
+import BizDeployNodeConfigFieldsProviderBaotaPanelSite from "./BizDeployNodeConfigFieldsProviderBaotaPanelSite";
+import BizDeployNodeConfigFieldsProviderBaotaWAFSite from "./BizDeployNodeConfigFieldsProviderBaotaWAFSite";
+import BizDeployNodeConfigFieldsProviderBunnyCDN from "./BizDeployNodeConfigFieldsProviderBunnyCDN";
+import BizDeployNodeConfigFieldsProviderBytePlusCDN from "./BizDeployNodeConfigFieldsProviderBytePlusCDN";
+import BizDeployNodeConfigFieldsProviderCdnfly from "./BizDeployNodeConfigFieldsProviderCdnfly";
+import BizDeployNodeConfigFieldsProviderCTCCCloudAO from "./BizDeployNodeConfigFieldsProviderCTCCCloudAO";
+import BizDeployNodeConfigFieldsProviderCTCCCloudCDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudCDN";
+import BizDeployNodeConfigFieldsProviderCTCCCloudELB from "./BizDeployNodeConfigFieldsProviderCTCCCloudELB";
+import BizDeployNodeConfigFieldsProviderCTCCCloudICDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudICDN";
+import BizDeployNodeConfigFieldsProviderCTCCCloudLVDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudLVDN";
+import BizDeployNodeConfigFieldsProviderDogeCloudCDN from "./BizDeployNodeConfigFieldsProviderDogeCloudCDN";
+import BizDeployNodeConfigFieldsProviderFlexCDN from "./BizDeployNodeConfigFieldsProviderFlexCDN";
+import BizDeployNodeConfigFieldsProviderGcoreCDN from "./BizDeployNodeConfigFieldsProviderGcoreCDN";
+import BizDeployNodeConfigFieldsProviderGoEdge from "./BizDeployNodeConfigFieldsProviderGoEdge";
+import BizDeployNodeConfigFieldsProviderHuaweiCloudCDN from "./BizDeployNodeConfigFieldsProviderHuaweiCloudCDN";
+import BizDeployNodeConfigFieldsProviderHuaweiCloudELB from "./BizDeployNodeConfigFieldsProviderHuaweiCloudELB";
+import BizDeployNodeConfigFieldsProviderHuaweiCloudOBS from "./BizDeployNodeConfigFieldsProviderHuaweiCloudOBS";
+import BizDeployNodeConfigFieldsProviderHuaweiCloudWAF from "./BizDeployNodeConfigFieldsProviderHuaweiCloudWAF";
+import BizDeployNodeConfigFieldsProviderJDCloudALB from "./BizDeployNodeConfigFieldsProviderJDCloudALB";
+import BizDeployNodeConfigFieldsProviderJDCloudCDN from "./BizDeployNodeConfigFieldsProviderJDCloudCDN";
+import BizDeployNodeConfigFieldsProviderJDCloudLive from "./BizDeployNodeConfigFieldsProviderJDCloudLive";
+import BizDeployNodeConfigFieldsProviderJDCloudVOD from "./BizDeployNodeConfigFieldsProviderJDCloudVOD";
+import BizDeployNodeConfigFieldsProviderKong from "./BizDeployNodeConfigFieldsProviderKong";
+import BizDeployNodeConfigFieldsProviderKubernetesSecret from "./BizDeployNodeConfigFieldsProviderKubernetesSecret";
+import BizDeployNodeConfigFieldsProviderLeCDN from "./BizDeployNodeConfigFieldsProviderLeCDN";
+import BizDeployNodeConfigFieldsProviderLocal from "./BizDeployNodeConfigFieldsProviderLocal";
+import BizDeployNodeConfigFieldsProviderNetlifySite from "./BizDeployNodeConfigFieldsProviderNetlifySite";
+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 BizDeployNodeConfigFieldsProviderSafeLine from "./BizDeployNodeConfigFieldsProviderSafeLine";
+import BizDeployNodeConfigFieldsProviderSSH from "./BizDeployNodeConfigFieldsProviderSSH";
+import BizDeployNodeConfigFieldsProviderTencentCloudCDN from "./BizDeployNodeConfigFieldsProviderTencentCloudCDN";
+import BizDeployNodeConfigFieldsProviderTencentCloudCLB from "./BizDeployNodeConfigFieldsProviderTencentCloudCLB";
+import BizDeployNodeConfigFieldsProviderTencentCloudCOS from "./BizDeployNodeConfigFieldsProviderTencentCloudCOS";
+import BizDeployNodeConfigFieldsProviderTencentCloudCSS from "./BizDeployNodeConfigFieldsProviderTencentCloudCSS";
+import BizDeployNodeConfigFieldsProviderTencentCloudECDN from "./BizDeployNodeConfigFieldsProviderTencentCloudECDN";
+import BizDeployNodeConfigFieldsProviderTencentCloudEO from "./BizDeployNodeConfigFieldsProviderTencentCloudEO";
+import BizDeployNodeConfigFieldsProviderTencentCloudGAAP from "./BizDeployNodeConfigFieldsProviderTencentCloudGAAP";
+import BizDeployNodeConfigFieldsProviderTencentCloudSCF from "./BizDeployNodeConfigFieldsProviderTencentCloudSCF";
+import BizDeployNodeConfigFieldsProviderTencentCloudSSL from "./BizDeployNodeConfigFieldsProviderTencentCloudSSL";
+import BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy from "./BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy";
+import BizDeployNodeConfigFieldsProviderTencentCloudSSLUpdate from "./BizDeployNodeConfigFieldsProviderTencentCloudSSLUpdate";
+import BizDeployNodeConfigFieldsProviderTencentCloudVOD from "./BizDeployNodeConfigFieldsProviderTencentCloudVOD";
+import BizDeployNodeConfigFieldsProviderTencentCloudWAF from "./BizDeployNodeConfigFieldsProviderTencentCloudWAF";
+import BizDeployNodeConfigFieldsProviderUCloudUCDN from "./BizDeployNodeConfigFieldsProviderUCloudUCDN";
+import BizDeployNodeConfigFieldsProviderUCloudUS3 from "./BizDeployNodeConfigFieldsProviderUCloudUS3";
+import BizDeployNodeConfigFieldsProviderUniCloudWebHost from "./BizDeployNodeConfigFieldsProviderUniCloudWebHost";
+import BizDeployNodeConfigFieldsProviderUpyunCDN from "./BizDeployNodeConfigFieldsProviderUpyunCDN";
+import BizDeployNodeConfigFieldsProviderUpyunFile from "./BizDeployNodeConfigFieldsProviderUpyunFile";
+import BizDeployNodeConfigFieldsProviderVolcEngineALB from "./BizDeployNodeConfigFieldsProviderVolcEngineALB";
+import BizDeployNodeConfigFieldsProviderVolcEngineCDN from "./BizDeployNodeConfigFieldsProviderVolcEngineCDN";
+import BizDeployNodeConfigFieldsProviderVolcEngineCertCenter from "./BizDeployNodeConfigFieldsProviderVolcEngineCertCenter";
+import BizDeployNodeConfigFieldsProviderVolcEngineCLB from "./BizDeployNodeConfigFieldsProviderVolcEngineCLB";
+import BizDeployNodeConfigFieldsProviderVolcEngineDCDN from "./BizDeployNodeConfigFieldsProviderVolcEngineDCDN";
+import BizDeployNodeConfigFieldsProviderVolcEngineImageX from "./BizDeployNodeConfigFieldsProviderVolcEngineImageX";
+import BizDeployNodeConfigFieldsProviderVolcEngineLive from "./BizDeployNodeConfigFieldsProviderVolcEngineLive";
+import BizDeployNodeConfigFieldsProviderVolcEngineTOS from "./BizDeployNodeConfigFieldsProviderVolcEngineTOS";
+import BizDeployNodeConfigFieldsProviderWangsuCDN from "./BizDeployNodeConfigFieldsProviderWangsuCDN";
+import BizDeployNodeConfigFieldsProviderWangsuCDNPro from "./BizDeployNodeConfigFieldsProviderWangsuCDNPro";
+import BizDeployNodeConfigFieldsProviderWangsuCertificate from "./BizDeployNodeConfigFieldsProviderWangsuCertificate";
+import BizDeployNodeConfigFieldsProviderWebhook from "./BizDeployNodeConfigFieldsProviderWebhook";
+
+const providerComponentMap: Partial>> = {
+ /*
+ 注意:如果追加新的子组件,请保持以 ASCII 排序。
+ NOTICE: If you add new child component, please keep ASCII order.
+ */
+ [DEPLOYMENT_PROVIDERS["1PANEL_CONSOLE"]]: BizDeployNodeConfigFieldsProvider1PanelConsole,
+ [DEPLOYMENT_PROVIDERS["1PANEL_SITE"]]: BizDeployNodeConfigFieldsProvider1PanelSite,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_ALB]: BizDeployNodeConfigFieldsProviderAliyunALB,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_APIGW]: BizDeployNodeConfigFieldsProviderAliyunAPIGW,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_CAS]: BizDeployNodeConfigFieldsProviderAliyunCAS,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_CAS_DEPLOY]: BizDeployNodeConfigFieldsProviderAliyunCASDeploy,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_CLB]: BizDeployNodeConfigFieldsProviderAliyunCLB,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_CDN]: BizDeployNodeConfigFieldsProviderAliyunCDN,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_DCDN]: BizDeployNodeConfigFieldsProviderAliyunDCDN,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_DDOS]: BizDeployNodeConfigFieldsProviderAliyunDDoS,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_ESA]: BizDeployNodeConfigFieldsProviderAliyunESA,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_FC]: BizDeployNodeConfigFieldsProviderAliyunFC,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_GA]: BizDeployNodeConfigFieldsProviderAliyunGA,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_LIVE]: BizDeployNodeConfigFieldsProviderAliyunLive,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_NLB]: BizDeployNodeConfigFieldsProviderAliyunNLB,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_OSS]: BizDeployNodeConfigFieldsProviderAliyunOSS,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_VOD]: BizDeployNodeConfigFieldsProviderAliyunVOD,
+ [DEPLOYMENT_PROVIDERS.ALIYUN_WAF]: BizDeployNodeConfigFieldsProviderAliyunWAF,
+ [DEPLOYMENT_PROVIDERS.APISIX]: BizDeployNodeConfigFieldsProviderAPISIX,
+ [DEPLOYMENT_PROVIDERS.AWS_ACM]: BizDeployNodeConfigFieldsProviderAWSACM,
+ [DEPLOYMENT_PROVIDERS.AWS_CLOUDFRONT]: BizDeployNodeConfigFieldsProviderAWSCloudFront,
+ [DEPLOYMENT_PROVIDERS.AWS_IAM]: BizDeployNodeConfigFieldsProviderAWSIAM,
+ [DEPLOYMENT_PROVIDERS.AZURE_KEYVAULT]: BizDeployNodeConfigFieldsProviderAzureKeyVault,
+ [DEPLOYMENT_PROVIDERS.BAIDUCLOUD_APPBLB]: BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB,
+ [DEPLOYMENT_PROVIDERS.BAIDUCLOUD_BLB]: BizDeployNodeConfigFieldsProviderBaiduCloudBLB,
+ [DEPLOYMENT_PROVIDERS.BAIDUCLOUD_CDN]: BizDeployNodeConfigFieldsProviderBaiduCloudCDN,
+ [DEPLOYMENT_PROVIDERS.BAISHAN_CDN]: BizDeployNodeConfigFieldsProviderBaishanCDN,
+ [DEPLOYMENT_PROVIDERS.BAOTAPANEL_CONSOLE]: BizDeployNodeConfigFieldsProviderBaotaPanelConsole,
+ [DEPLOYMENT_PROVIDERS.BAOTAPANEL_SITE]: BizDeployNodeConfigFieldsProviderBaotaPanelSite,
+ [DEPLOYMENT_PROVIDERS.BAOTAPANELGO_CONSOLE]: BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole,
+ [DEPLOYMENT_PROVIDERS.BAOTAPANELGO_SITE]: BizDeployNodeConfigFieldsProviderBaotaPanelGoSite,
+ [DEPLOYMENT_PROVIDERS.BAOTAWAF_SITE]: BizDeployNodeConfigFieldsProviderBaotaWAFSite,
+ [DEPLOYMENT_PROVIDERS.BUNNY_CDN]: BizDeployNodeConfigFieldsProviderBunnyCDN,
+ [DEPLOYMENT_PROVIDERS.BYTEPLUS_CDN]: BizDeployNodeConfigFieldsProviderBytePlusCDN,
+ [DEPLOYMENT_PROVIDERS.CDNFLY]: BizDeployNodeConfigFieldsProviderCdnfly,
+ [DEPLOYMENT_PROVIDERS.CTCCCLOUD_AO]: BizDeployNodeConfigFieldsProviderCTCCCloudAO,
+ [DEPLOYMENT_PROVIDERS.CTCCCLOUD_CDN]: BizDeployNodeConfigFieldsProviderCTCCCloudCDN,
+ [DEPLOYMENT_PROVIDERS.CTCCCLOUD_ELB]: BizDeployNodeConfigFieldsProviderCTCCCloudELB,
+ [DEPLOYMENT_PROVIDERS.CTCCCLOUD_ICDN]: BizDeployNodeConfigFieldsProviderCTCCCloudICDN,
+ [DEPLOYMENT_PROVIDERS.CTCCCLOUD_LVDN]: BizDeployNodeConfigFieldsProviderCTCCCloudLVDN,
+ [DEPLOYMENT_PROVIDERS.DOGECLOUD_CDN]: BizDeployNodeConfigFieldsProviderDogeCloudCDN,
+ [DEPLOYMENT_PROVIDERS.FLEXCDN]: BizDeployNodeConfigFieldsProviderFlexCDN,
+ [DEPLOYMENT_PROVIDERS.GCORE_CDN]: BizDeployNodeConfigFieldsProviderGcoreCDN,
+ [DEPLOYMENT_PROVIDERS.GOEDGE]: BizDeployNodeConfigFieldsProviderGoEdge,
+ [DEPLOYMENT_PROVIDERS.HUAWEICLOUD_CDN]: BizDeployNodeConfigFieldsProviderHuaweiCloudCDN,
+ [DEPLOYMENT_PROVIDERS.HUAWEICLOUD_ELB]: BizDeployNodeConfigFieldsProviderHuaweiCloudELB,
+ [DEPLOYMENT_PROVIDERS.HUAWEICLOUD_OBS]: BizDeployNodeConfigFieldsProviderHuaweiCloudOBS,
+ [DEPLOYMENT_PROVIDERS.HUAWEICLOUD_WAF]: BizDeployNodeConfigFieldsProviderHuaweiCloudWAF,
+ [DEPLOYMENT_PROVIDERS.JDCLOUD_ALB]: BizDeployNodeConfigFieldsProviderJDCloudALB,
+ [DEPLOYMENT_PROVIDERS.JDCLOUD_CDN]: BizDeployNodeConfigFieldsProviderJDCloudCDN,
+ [DEPLOYMENT_PROVIDERS.JDCLOUD_LIVE]: BizDeployNodeConfigFieldsProviderJDCloudLive,
+ [DEPLOYMENT_PROVIDERS.JDCLOUD_VOD]: BizDeployNodeConfigFieldsProviderJDCloudVOD,
+ [DEPLOYMENT_PROVIDERS.KONG]: BizDeployNodeConfigFieldsProviderKong,
+ [DEPLOYMENT_PROVIDERS.KUBERNETES_SECRET]: BizDeployNodeConfigFieldsProviderKubernetesSecret,
+ [DEPLOYMENT_PROVIDERS.LECDN]: BizDeployNodeConfigFieldsProviderLeCDN,
+ [DEPLOYMENT_PROVIDERS.LOCAL]: BizDeployNodeConfigFieldsProviderLocal,
+ [DEPLOYMENT_PROVIDERS.NETLIFY_SITE]: BizDeployNodeConfigFieldsProviderNetlifySite,
+ [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]: BizDeployNodeConfigFieldsProviderSafeLine,
+ [DEPLOYMENT_PROVIDERS.SSH]: BizDeployNodeConfigFieldsProviderSSH,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CDN]: BizDeployNodeConfigFieldsProviderTencentCloudCDN,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CLB]: BizDeployNodeConfigFieldsProviderTencentCloudCLB,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_COS]: BizDeployNodeConfigFieldsProviderTencentCloudCOS,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CSS]: BizDeployNodeConfigFieldsProviderTencentCloudCSS,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_ECDN]: BizDeployNodeConfigFieldsProviderTencentCloudECDN,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_EO]: BizDeployNodeConfigFieldsProviderTencentCloudEO,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_GAAP]: BizDeployNodeConfigFieldsProviderTencentCloudGAAP,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SCF]: BizDeployNodeConfigFieldsProviderTencentCloudSCF,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL]: BizDeployNodeConfigFieldsProviderTencentCloudSSL,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL_DEPLOY]: BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL_UPDATE]: BizDeployNodeConfigFieldsProviderTencentCloudSSLUpdate,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_VOD]: BizDeployNodeConfigFieldsProviderTencentCloudVOD,
+ [DEPLOYMENT_PROVIDERS.TENCENTCLOUD_WAF]: BizDeployNodeConfigFieldsProviderTencentCloudWAF,
+ [DEPLOYMENT_PROVIDERS.UCLOUD_UCDN]: BizDeployNodeConfigFieldsProviderUCloudUCDN,
+ [DEPLOYMENT_PROVIDERS.UCLOUD_US3]: BizDeployNodeConfigFieldsProviderUCloudUS3,
+ [DEPLOYMENT_PROVIDERS.UNICLOUD_WEBHOST]: BizDeployNodeConfigFieldsProviderUniCloudWebHost,
+ [DEPLOYMENT_PROVIDERS.UPYUN_CDN]: BizDeployNodeConfigFieldsProviderUpyunCDN,
+ [DEPLOYMENT_PROVIDERS.UPYUN_FILE]: BizDeployNodeConfigFieldsProviderUpyunFile,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_ALB]: BizDeployNodeConfigFieldsProviderVolcEngineALB,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_CDN]: BizDeployNodeConfigFieldsProviderVolcEngineCDN,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_CERTCENTER]: BizDeployNodeConfigFieldsProviderVolcEngineCertCenter,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_CLB]: BizDeployNodeConfigFieldsProviderVolcEngineCLB,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_DCDN]: BizDeployNodeConfigFieldsProviderVolcEngineDCDN,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_IMAGEX]: BizDeployNodeConfigFieldsProviderVolcEngineImageX,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_LIVE]: BizDeployNodeConfigFieldsProviderVolcEngineLive,
+ [DEPLOYMENT_PROVIDERS.VOLCENGINE_TOS]: BizDeployNodeConfigFieldsProviderVolcEngineTOS,
+ [DEPLOYMENT_PROVIDERS.WANGSU_CDN]: BizDeployNodeConfigFieldsProviderWangsuCDN,
+ [DEPLOYMENT_PROVIDERS.WANGSU_CDNPRO]: BizDeployNodeConfigFieldsProviderWangsuCDNPro,
+ [DEPLOYMENT_PROVIDERS.WANGSU_CERTIFICATE]: BizDeployNodeConfigFieldsProviderWangsuCertificate,
+ [DEPLOYMENT_PROVIDERS.WEBHOOK]: BizDeployNodeConfigFieldsProviderWebhook,
+};
+
+const useComponent = (provider: string, { initProps, deps = [] }: { initProps?: (provider: string) => any; deps?: unknown[] }) => {
+ const initComponent = () => {
+ const Component = providerComponentMap[provider as DeploymentProviderType];
+ if (!Component) return null;
+
+ const props = initProps?.(provider);
+ if (props) {
+ return ;
+ }
+
+ return ;
+ };
+
+ const [component, setComponent] = useState(() => initComponent());
+
+ useEffect(() => setComponent(initComponent()), [provider]);
+ useEffect(() => setComponent(initComponent()), deps);
+
+ return component;
+};
+
+const _default = {
+ useComponent,
+};
+
+export default _default;
diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderBaotaWAFSite.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderBaotaWAFSite.tsx
index d604dc111..c21a77fd9 100644
--- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderBaotaWAFSite.tsx
+++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderBaotaWAFSite.tsx
@@ -53,13 +53,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
return z.object({
siteName: z.string().nonempty(t("workflow_node.deploy.form.baotawaf_site_name.placeholder")),
- sitePort: z.preprocess(
- (v) => Number(v),
- z
- .number()
- .int(t("workflow_node.deploy.form.baotawaf_site_port.placeholder"))
- .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
- ),
+ sitePort: z.coerce
+ .number()
+ .int(t("workflow_node.deploy.form.baotawaf_site_port.placeholder"))
+ .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
});
};
diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx
index e12ca8fd3..169fb5a80 100644
--- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx
+++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderLocal.tsx
@@ -429,22 +429,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
.string()
.max(256, t("common.errmsg.string_max", { max: 256 }))
.nullish(),
- pfxPassword: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- jksAlias: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- jksKeypass: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- jksStorepass: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
+ pfxPassword: z.string().nullish(),
+ jksAlias: z.string().nullish(),
+ jksKeypass: z.string().nullish(),
+ jksStorepass: z.string().nullish(),
shellEnv: z.literal([SHELLENV_SH, SHELLENV_CMD, SHELLENV_POWERSHELL], t("workflow_node.deploy.form.local_shell_env.placeholder")),
preCommand: z
.string()
diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderSSH.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderSSH.tsx
index a6a57f68f..5f22c2950 100644
--- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderSSH.tsx
+++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFieldsProviderSSH.tsx
@@ -471,22 +471,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
.string()
.max(256, t("common.errmsg.string_max", { max: 256 }))
.nullish(),
- pfxPassword: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- jksAlias: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- jksKeypass: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- jksStorepass: z
- .string()
- .max(64, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
+ pfxPassword: z.string().nullish(),
+ jksAlias: z.string().nullish(),
+ jksKeypass: z.string().nullish(),
+ jksStorepass: z.string().nullish(),
preCommand: z
.string()
.max(20480, t("common.errmsg.string_max", { max: 20480 }))
diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx
index cc0699862..54d9def2e 100644
--- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx
@@ -1,6 +1,6 @@
-import { useEffect, useMemo, useState } from "react";
+import { useEffect, useMemo } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { IconPlus } from "@tabler/icons-react";
import { type AnchorProps, Button, Divider, Flex, Form, type FormInstance, Select, Switch, Typography, theme } from "antd";
import { createSchemaFieldRule } from "antd-zod";
@@ -12,108 +12,14 @@ import DeploymentProviderPicker from "@/components/provider/DeploymentProviderPi
import DeploymentProviderSelect from "@/components/provider/DeploymentProviderSelect";
import Show from "@/components/Show";
import { type AccessModel } from "@/domain/access";
-import { DEPLOYMENT_PROVIDERS, deploymentProvidersMap } from "@/domain/provider";
+import { deploymentProvidersMap } from "@/domain/provider";
import { type WorkflowNodeConfigForBizDeploy, defaultNodeConfigForBizDeploy } from "@/domain/workflow";
import { useAntdForm, useZustandShallowSelector } from "@/hooks";
import { useAccessesStore } from "@/stores/access";
import { getAllPreviousNodes } from "../_util";
import { FormNestedFieldsContextProvider, NodeFormContextProvider } from "./_context";
-import BizDeployNodeConfigFieldsProvider1PanelConsole from "./BizDeployNodeConfigFieldsProvider1PanelConsole";
-import BizDeployNodeConfigFieldsProvider1PanelSite from "./BizDeployNodeConfigFieldsProvider1PanelSite";
-import BizDeployNodeConfigFieldsProviderAliyunALB from "./BizDeployNodeConfigFieldsProviderAliyunALB";
-import BizDeployNodeConfigFieldsProviderAliyunAPIGW from "./BizDeployNodeConfigFieldsProviderAliyunAPIGW";
-import BizDeployNodeConfigFieldsProviderAliyunCAS from "./BizDeployNodeConfigFieldsProviderAliyunCAS";
-import BizDeployNodeConfigFieldsProviderAliyunCASDeploy from "./BizDeployNodeConfigFieldsProviderAliyunCASDeploy";
-import BizDeployNodeConfigFieldsProviderAliyunCDN from "./BizDeployNodeConfigFieldsProviderAliyunCDN";
-import BizDeployNodeConfigFieldsProviderAliyunCLB from "./BizDeployNodeConfigFieldsProviderAliyunCLB";
-import BizDeployNodeConfigFieldsProviderAliyunDCDN from "./BizDeployNodeConfigFieldsProviderAliyunDCDN";
-import BizDeployNodeConfigFieldsProviderAliyunDDoS from "./BizDeployNodeConfigFieldsProviderAliyunDDoS";
-import BizDeployNodeConfigFieldsProviderAliyunESA from "./BizDeployNodeConfigFieldsProviderAliyunESA";
-import BizDeployNodeConfigFieldsProviderAliyunFC from "./BizDeployNodeConfigFieldsProviderAliyunFC";
-import BizDeployNodeConfigFieldsProviderAliyunGA from "./BizDeployNodeConfigFieldsProviderAliyunGA";
-import BizDeployNodeConfigFieldsProviderAliyunLive from "./BizDeployNodeConfigFieldsProviderAliyunLive";
-import BizDeployNodeConfigFieldsProviderAliyunNLB from "./BizDeployNodeConfigFieldsProviderAliyunNLB";
-import BizDeployNodeConfigFieldsProviderAliyunOSS from "./BizDeployNodeConfigFieldsProviderAliyunOSS";
-import BizDeployNodeConfigFieldsProviderAliyunVOD from "./BizDeployNodeConfigFieldsProviderAliyunVOD";
-import BizDeployNodeConfigFieldsProviderAliyunWAF from "./BizDeployNodeConfigFieldsProviderAliyunWAF";
-import BizDeployNodeConfigFieldsProviderAPISIX from "./BizDeployNodeConfigFieldsProviderAPISIX";
-import BizDeployNodeConfigFieldsProviderAWSACM from "./BizDeployNodeConfigFieldsProviderAWSACM";
-import BizDeployNodeConfigFieldsProviderAWSCloudFront from "./BizDeployNodeConfigFieldsProviderAWSCloudFront";
-import BizDeployNodeConfigFieldsProviderAWSIAM from "./BizDeployNodeConfigFieldsProviderAWSIAM";
-import BizDeployNodeConfigFieldsProviderAzureKeyVault from "./BizDeployNodeConfigFieldsProviderAzureKeyVault";
-import BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB from "./BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB";
-import BizDeployNodeConfigFieldsProviderBaiduCloudBLB from "./BizDeployNodeConfigFieldsProviderBaiduCloudBLB";
-import BizDeployNodeConfigFieldsProviderBaiduCloudCDN from "./BizDeployNodeConfigFieldsProviderBaiduCloudCDN";
-import BizDeployNodeConfigFieldsProviderBaishanCDN from "./BizDeployNodeConfigFieldsProviderBaishanCDN";
-import BizDeployNodeConfigFieldsProviderBaotaPanelConsole from "./BizDeployNodeConfigFieldsProviderBaotaPanelConsole";
-import BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole from "./BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole";
-import BizDeployNodeConfigFieldsProviderBaotaPanelGoSite from "./BizDeployNodeConfigFieldsProviderBaotaPanelGoSite";
-import BizDeployNodeConfigFieldsProviderBaotaPanelSite from "./BizDeployNodeConfigFieldsProviderBaotaPanelSite";
-import BizDeployNodeConfigFieldsProviderBaotaWAFSite from "./BizDeployNodeConfigFieldsProviderBaotaWAFSite";
-import BizDeployNodeConfigFieldsProviderBunnyCDN from "./BizDeployNodeConfigFieldsProviderBunnyCDN";
-import BizDeployNodeConfigFieldsProviderBytePlusCDN from "./BizDeployNodeConfigFieldsProviderBytePlusCDN";
-import BizDeployNodeConfigFieldsProviderCdnfly from "./BizDeployNodeConfigFieldsProviderCdnfly";
-import BizDeployNodeConfigFieldsProviderCTCCCloudAO from "./BizDeployNodeConfigFieldsProviderCTCCCloudAO";
-import BizDeployNodeConfigFieldsProviderCTCCCloudCDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudCDN";
-import BizDeployNodeConfigFieldsProviderCTCCCloudELB from "./BizDeployNodeConfigFieldsProviderCTCCCloudELB";
-import BizDeployNodeConfigFieldsProviderCTCCCloudICDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudICDN";
-import BizDeployNodeConfigFieldsProviderCTCCCloudLVDN from "./BizDeployNodeConfigFieldsProviderCTCCCloudLVDN";
-import BizDeployNodeConfigFieldsProviderDogeCloudCDN from "./BizDeployNodeConfigFieldsProviderDogeCloudCDN";
-import BizDeployNodeConfigFieldsProviderFlexCDN from "./BizDeployNodeConfigFieldsProviderFlexCDN";
-import BizDeployNodeConfigFieldsProviderGcoreCDN from "./BizDeployNodeConfigFieldsProviderGcoreCDN";
-import BizDeployNodeConfigFieldsProviderGoEdge from "./BizDeployNodeConfigFieldsProviderGoEdge";
-import BizDeployNodeConfigFieldsProviderHuaweiCloudCDN from "./BizDeployNodeConfigFieldsProviderHuaweiCloudCDN";
-import BizDeployNodeConfigFieldsProviderHuaweiCloudELB from "./BizDeployNodeConfigFieldsProviderHuaweiCloudELB";
-import BizDeployNodeConfigFieldsProviderHuaweiCloudOBS from "./BizDeployNodeConfigFieldsProviderHuaweiCloudOBS";
-import BizDeployNodeConfigFieldsProviderHuaweiCloudWAF from "./BizDeployNodeConfigFieldsProviderHuaweiCloudWAF";
-import BizDeployNodeConfigFieldsProviderJDCloudALB from "./BizDeployNodeConfigFieldsProviderJDCloudALB";
-import BizDeployNodeConfigFieldsProviderJDCloudCDN from "./BizDeployNodeConfigFieldsProviderJDCloudCDN";
-import BizDeployNodeConfigFieldsProviderJDCloudLive from "./BizDeployNodeConfigFieldsProviderJDCloudLive";
-import BizDeployNodeConfigFieldsProviderJDCloudVOD from "./BizDeployNodeConfigFieldsProviderJDCloudVOD";
-import BizDeployNodeConfigFieldsProviderKong from "./BizDeployNodeConfigFieldsProviderKong";
-import BizDeployNodeConfigFieldsProviderKubernetesSecret from "./BizDeployNodeConfigFieldsProviderKubernetesSecret";
-import BizDeployNodeConfigFieldsProviderLeCDN from "./BizDeployNodeConfigFieldsProviderLeCDN";
-import BizDeployNodeConfigFieldsProviderLocal from "./BizDeployNodeConfigFieldsProviderLocal";
-import BizDeployNodeConfigFieldsProviderNetlifySite from "./BizDeployNodeConfigFieldsProviderNetlifySite";
-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 BizDeployNodeConfigFieldsProviderSafeLine from "./BizDeployNodeConfigFieldsProviderSafeLine";
-import BizDeployNodeConfigFieldsProviderSSH from "./BizDeployNodeConfigFieldsProviderSSH";
-import BizDeployNodeConfigFieldsProviderTencentCloudCDN from "./BizDeployNodeConfigFieldsProviderTencentCloudCDN";
-import BizDeployNodeConfigFieldsProviderTencentCloudCLB from "./BizDeployNodeConfigFieldsProviderTencentCloudCLB";
-import BizDeployNodeConfigFieldsProviderTencentCloudCOS from "./BizDeployNodeConfigFieldsProviderTencentCloudCOS";
-import BizDeployNodeConfigFieldsProviderTencentCloudCSS from "./BizDeployNodeConfigFieldsProviderTencentCloudCSS";
-import BizDeployNodeConfigFieldsProviderTencentCloudECDN from "./BizDeployNodeConfigFieldsProviderTencentCloudECDN";
-import BizDeployNodeConfigFieldsProviderTencentCloudEO from "./BizDeployNodeConfigFieldsProviderTencentCloudEO";
-import BizDeployNodeConfigFieldsProviderTencentCloudGAAP from "./BizDeployNodeConfigFieldsProviderTencentCloudGAAP";
-import BizDeployNodeConfigFieldsProviderTencentCloudSCF from "./BizDeployNodeConfigFieldsProviderTencentCloudSCF";
-import BizDeployNodeConfigFieldsProviderTencentCloudSSL from "./BizDeployNodeConfigFieldsProviderTencentCloudSSL";
-import BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy from "./BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy";
-import BizDeployNodeConfigFieldsProviderTencentCloudSSLUpdate from "./BizDeployNodeConfigFieldsProviderTencentCloudSSLUpdate";
-import BizDeployNodeConfigFieldsProviderTencentCloudVOD from "./BizDeployNodeConfigFieldsProviderTencentCloudVOD";
-import BizDeployNodeConfigFieldsProviderTencentCloudWAF from "./BizDeployNodeConfigFieldsProviderTencentCloudWAF";
-import BizDeployNodeConfigFieldsProviderUCloudUCDN from "./BizDeployNodeConfigFieldsProviderUCloudUCDN";
-import BizDeployNodeConfigFieldsProviderUCloudUS3 from "./BizDeployNodeConfigFieldsProviderUCloudUS3";
-import BizDeployNodeConfigFieldsProviderUniCloudWebHost from "./BizDeployNodeConfigFieldsProviderUniCloudWebHost";
-import BizDeployNodeConfigFieldsProviderUpyunCDN from "./BizDeployNodeConfigFieldsProviderUpyunCDN";
-import BizDeployNodeConfigFieldsProviderUpyunFile from "./BizDeployNodeConfigFieldsProviderUpyunFile";
-import BizDeployNodeConfigFieldsProviderVolcEngineALB from "./BizDeployNodeConfigFieldsProviderVolcEngineALB";
-import BizDeployNodeConfigFieldsProviderVolcEngineCDN from "./BizDeployNodeConfigFieldsProviderVolcEngineCDN";
-import BizDeployNodeConfigFieldsProviderVolcEngineCertCenter from "./BizDeployNodeConfigFieldsProviderVolcEngineCertCenter";
-import BizDeployNodeConfigFieldsProviderVolcEngineCLB from "./BizDeployNodeConfigFieldsProviderVolcEngineCLB";
-import BizDeployNodeConfigFieldsProviderVolcEngineDCDN from "./BizDeployNodeConfigFieldsProviderVolcEngineDCDN";
-import BizDeployNodeConfigFieldsProviderVolcEngineImageX from "./BizDeployNodeConfigFieldsProviderVolcEngineImageX";
-import BizDeployNodeConfigFieldsProviderVolcEngineLive from "./BizDeployNodeConfigFieldsProviderVolcEngineLive";
-import BizDeployNodeConfigFieldsProviderVolcEngineTOS from "./BizDeployNodeConfigFieldsProviderVolcEngineTOS";
-import BizDeployNodeConfigFieldsProviderWangsuCDN from "./BizDeployNodeConfigFieldsProviderWangsuCDN";
-import BizDeployNodeConfigFieldsProviderWangsuCDNPro from "./BizDeployNodeConfigFieldsProviderWangsuCDNPro";
-import BizDeployNodeConfigFieldsProviderWangsuCertificate from "./BizDeployNodeConfigFieldsProviderWangsuCertificate";
-import BizDeployNodeConfigFieldsProviderWebhook from "./BizDeployNodeConfigFieldsProviderWebhook";
+import BizDeployNodeConfigFieldsProvider from "./BizDeployNodeConfigFieldsProvider";
import { NodeType } from "../nodes/typings";
export interface BizDeployNodeConfigFormProps {
@@ -137,7 +43,7 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
};
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForBizDeploy | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForBizDeploy | undefined;
}, [node]);
const formSchema = getSchema({ i18n }).superRefine((values, ctx) => {
@@ -166,315 +72,22 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
.filter((node) => node.flowNodeType === NodeType.BizApply || node.flowNodeType === NodeType.BizUpload)
.map((node) => {
return {
- label: getNodeForm(node)?.getValueIn("name"),
+ label: node.form?.getValueIn("name"),
value: node.id,
};
});
}, [node]);
- const [showProviderAccess, setShowProviderAccess] = useState(false);
- useEffect(() => {
+ const renderNestedFieldProviderComponent = BizDeployNodeConfigFieldsProvider.useComponent(fieldProvider, {});
+
+ const showProviderAccess = useMemo(() => {
// 内置的部署提供商(如本地部署)无需显示授权信息字段
if (fieldProvider) {
const provider = deploymentProvidersMap.get(fieldProvider);
- setShowProviderAccess(!provider?.builtin);
- } else {
- setShowProviderAccess(false);
+ return !provider?.builtin;
}
- }, [fieldProvider]);
- const NestedProviderConfigFields = useMemo(() => {
- /*
- 注意:如果追加新的子组件,请保持以 ASCII 排序。
- NOTICE: If you add new child component, please keep ASCII order.
- */
- switch (fieldProvider) {
- case DEPLOYMENT_PROVIDERS["1PANEL_CONSOLE"]: {
- return BizDeployNodeConfigFieldsProvider1PanelConsole;
- }
- case DEPLOYMENT_PROVIDERS["1PANEL_SITE"]: {
- return BizDeployNodeConfigFieldsProvider1PanelSite;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_ALB: {
- return BizDeployNodeConfigFieldsProviderAliyunALB;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_APIGW: {
- return BizDeployNodeConfigFieldsProviderAliyunAPIGW;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_CAS: {
- return BizDeployNodeConfigFieldsProviderAliyunCAS;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_CAS_DEPLOY: {
- return BizDeployNodeConfigFieldsProviderAliyunCASDeploy;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_CLB: {
- return BizDeployNodeConfigFieldsProviderAliyunCLB;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_CDN: {
- return BizDeployNodeConfigFieldsProviderAliyunCDN;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_DCDN: {
- return BizDeployNodeConfigFieldsProviderAliyunDCDN;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_DDOS: {
- return BizDeployNodeConfigFieldsProviderAliyunDDoS;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_ESA: {
- return BizDeployNodeConfigFieldsProviderAliyunESA;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_FC: {
- return BizDeployNodeConfigFieldsProviderAliyunFC;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_GA: {
- return BizDeployNodeConfigFieldsProviderAliyunGA;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_LIVE: {
- return BizDeployNodeConfigFieldsProviderAliyunLive;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_NLB: {
- return BizDeployNodeConfigFieldsProviderAliyunNLB;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_OSS: {
- return BizDeployNodeConfigFieldsProviderAliyunOSS;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_VOD: {
- return BizDeployNodeConfigFieldsProviderAliyunVOD;
- }
- case DEPLOYMENT_PROVIDERS.ALIYUN_WAF: {
- return BizDeployNodeConfigFieldsProviderAliyunWAF;
- }
- case DEPLOYMENT_PROVIDERS.APISIX: {
- return BizDeployNodeConfigFieldsProviderAPISIX;
- }
- case DEPLOYMENT_PROVIDERS.AWS_ACM: {
- return BizDeployNodeConfigFieldsProviderAWSACM;
- }
- case DEPLOYMENT_PROVIDERS.AWS_CLOUDFRONT: {
- return BizDeployNodeConfigFieldsProviderAWSCloudFront;
- }
- case DEPLOYMENT_PROVIDERS.AWS_IAM: {
- return BizDeployNodeConfigFieldsProviderAWSIAM;
- }
- case DEPLOYMENT_PROVIDERS.AZURE_KEYVAULT: {
- return BizDeployNodeConfigFieldsProviderAzureKeyVault;
- }
- case DEPLOYMENT_PROVIDERS.BAIDUCLOUD_APPBLB: {
- return BizDeployNodeConfigFieldsProviderBaiduCloudAppBLB;
- }
- case DEPLOYMENT_PROVIDERS.BAIDUCLOUD_BLB: {
- return BizDeployNodeConfigFieldsProviderBaiduCloudBLB;
- }
- case DEPLOYMENT_PROVIDERS.BAIDUCLOUD_CDN: {
- return BizDeployNodeConfigFieldsProviderBaiduCloudCDN;
- }
- case DEPLOYMENT_PROVIDERS.BAISHAN_CDN: {
- return BizDeployNodeConfigFieldsProviderBaishanCDN;
- }
- case DEPLOYMENT_PROVIDERS.BAOTAPANEL_CONSOLE: {
- return BizDeployNodeConfigFieldsProviderBaotaPanelConsole;
- }
- case DEPLOYMENT_PROVIDERS.BAOTAPANEL_SITE: {
- return BizDeployNodeConfigFieldsProviderBaotaPanelSite;
- }
- case DEPLOYMENT_PROVIDERS.BAOTAPANELGO_CONSOLE: {
- return BizDeployNodeConfigFieldsProviderBaotaPanelGoConsole;
- }
- case DEPLOYMENT_PROVIDERS.BAOTAPANELGO_SITE: {
- return BizDeployNodeConfigFieldsProviderBaotaPanelGoSite;
- }
- case DEPLOYMENT_PROVIDERS.BAOTAWAF_SITE: {
- return BizDeployNodeConfigFieldsProviderBaotaWAFSite;
- }
- case DEPLOYMENT_PROVIDERS.BUNNY_CDN: {
- return BizDeployNodeConfigFieldsProviderBunnyCDN;
- }
- case DEPLOYMENT_PROVIDERS.BYTEPLUS_CDN: {
- return BizDeployNodeConfigFieldsProviderBytePlusCDN;
- }
- case DEPLOYMENT_PROVIDERS.CDNFLY: {
- return BizDeployNodeConfigFieldsProviderCdnfly;
- }
- case DEPLOYMENT_PROVIDERS.CTCCCLOUD_AO: {
- return BizDeployNodeConfigFieldsProviderCTCCCloudAO;
- }
- case DEPLOYMENT_PROVIDERS.CTCCCLOUD_CDN: {
- return BizDeployNodeConfigFieldsProviderCTCCCloudCDN;
- }
- case DEPLOYMENT_PROVIDERS.CTCCCLOUD_ELB: {
- return BizDeployNodeConfigFieldsProviderCTCCCloudELB;
- }
- case DEPLOYMENT_PROVIDERS.CTCCCLOUD_ICDN: {
- return BizDeployNodeConfigFieldsProviderCTCCCloudICDN;
- }
- case DEPLOYMENT_PROVIDERS.CTCCCLOUD_LVDN: {
- return BizDeployNodeConfigFieldsProviderCTCCCloudLVDN;
- }
- case DEPLOYMENT_PROVIDERS.DOGECLOUD_CDN: {
- return BizDeployNodeConfigFieldsProviderDogeCloudCDN;
- }
- case DEPLOYMENT_PROVIDERS.FLEXCDN: {
- return BizDeployNodeConfigFieldsProviderFlexCDN;
- }
- case DEPLOYMENT_PROVIDERS.GCORE_CDN: {
- return BizDeployNodeConfigFieldsProviderGcoreCDN;
- }
- case DEPLOYMENT_PROVIDERS.GOEDGE: {
- return BizDeployNodeConfigFieldsProviderGoEdge;
- }
- case DEPLOYMENT_PROVIDERS.HUAWEICLOUD_CDN: {
- return BizDeployNodeConfigFieldsProviderHuaweiCloudCDN;
- }
- case DEPLOYMENT_PROVIDERS.HUAWEICLOUD_ELB: {
- return BizDeployNodeConfigFieldsProviderHuaweiCloudELB;
- }
- case DEPLOYMENT_PROVIDERS.HUAWEICLOUD_OBS: {
- return BizDeployNodeConfigFieldsProviderHuaweiCloudOBS;
- }
- case DEPLOYMENT_PROVIDERS.HUAWEICLOUD_WAF: {
- return BizDeployNodeConfigFieldsProviderHuaweiCloudWAF;
- }
- case DEPLOYMENT_PROVIDERS.JDCLOUD_ALB: {
- return BizDeployNodeConfigFieldsProviderJDCloudALB;
- }
- case DEPLOYMENT_PROVIDERS.JDCLOUD_CDN: {
- return BizDeployNodeConfigFieldsProviderJDCloudCDN;
- }
- case DEPLOYMENT_PROVIDERS.JDCLOUD_LIVE: {
- return BizDeployNodeConfigFieldsProviderJDCloudLive;
- }
- case DEPLOYMENT_PROVIDERS.JDCLOUD_VOD: {
- return BizDeployNodeConfigFieldsProviderJDCloudVOD;
- }
- case DEPLOYMENT_PROVIDERS.KONG: {
- return BizDeployNodeConfigFieldsProviderKong;
- }
- case DEPLOYMENT_PROVIDERS.KUBERNETES_SECRET: {
- return BizDeployNodeConfigFieldsProviderKubernetesSecret;
- }
- case DEPLOYMENT_PROVIDERS.LECDN: {
- return BizDeployNodeConfigFieldsProviderLeCDN;
- }
- case DEPLOYMENT_PROVIDERS.LOCAL: {
- return BizDeployNodeConfigFieldsProviderLocal;
- }
- case DEPLOYMENT_PROVIDERS.NETLIFY_SITE: {
- return BizDeployNodeConfigFieldsProviderNetlifySite;
- }
- case DEPLOYMENT_PROVIDERS.PROXMOXVE: {
- return BizDeployNodeConfigFieldsProviderProxmoxVE;
- }
- case DEPLOYMENT_PROVIDERS.QINIU_CDN: {
- return BizDeployNodeConfigFieldsProviderQiniuCDN;
- }
- case DEPLOYMENT_PROVIDERS.QINIU_KODO: {
- return BizDeployNodeConfigFieldsProviderQiniuKodo;
- }
- case DEPLOYMENT_PROVIDERS.QINIU_PILI: {
- return BizDeployNodeConfigFieldsProviderQiniuPili;
- }
- case DEPLOYMENT_PROVIDERS.RAINYUN_RCDN: {
- return BizDeployNodeConfigFieldsProviderRainYunRCDN;
- }
- case DEPLOYMENT_PROVIDERS.RATPANEL_SITE: {
- return BizDeployNodeConfigFieldsProviderRatPanelSite;
- }
- case DEPLOYMENT_PROVIDERS.SAFELINE: {
- return BizDeployNodeConfigFieldsProviderSafeLine;
- }
- case DEPLOYMENT_PROVIDERS.SSH: {
- return BizDeployNodeConfigFieldsProviderSSH;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CDN: {
- return BizDeployNodeConfigFieldsProviderTencentCloudCDN;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CLB: {
- return BizDeployNodeConfigFieldsProviderTencentCloudCLB;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_COS: {
- return BizDeployNodeConfigFieldsProviderTencentCloudCOS;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_CSS: {
- return BizDeployNodeConfigFieldsProviderTencentCloudCSS;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_ECDN: {
- return BizDeployNodeConfigFieldsProviderTencentCloudECDN;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_EO: {
- return BizDeployNodeConfigFieldsProviderTencentCloudEO;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_GAAP: {
- return BizDeployNodeConfigFieldsProviderTencentCloudGAAP;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SCF: {
- return BizDeployNodeConfigFieldsProviderTencentCloudSCF;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL: {
- return BizDeployNodeConfigFieldsProviderTencentCloudSSL;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL_DEPLOY: {
- return BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_SSL_UPDATE: {
- return BizDeployNodeConfigFieldsProviderTencentCloudSSLUpdate;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_VOD: {
- return BizDeployNodeConfigFieldsProviderTencentCloudVOD;
- }
- case DEPLOYMENT_PROVIDERS.TENCENTCLOUD_WAF: {
- return BizDeployNodeConfigFieldsProviderTencentCloudWAF;
- }
- case DEPLOYMENT_PROVIDERS.UCLOUD_UCDN: {
- return BizDeployNodeConfigFieldsProviderUCloudUCDN;
- }
- case DEPLOYMENT_PROVIDERS.UCLOUD_US3: {
- return BizDeployNodeConfigFieldsProviderUCloudUS3;
- }
- case DEPLOYMENT_PROVIDERS.UNICLOUD_WEBHOST: {
- return BizDeployNodeConfigFieldsProviderUniCloudWebHost;
- }
- case DEPLOYMENT_PROVIDERS.UPYUN_CDN: {
- return BizDeployNodeConfigFieldsProviderUpyunCDN;
- }
- case DEPLOYMENT_PROVIDERS.UPYUN_FILE: {
- return BizDeployNodeConfigFieldsProviderUpyunFile;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_ALB: {
- return BizDeployNodeConfigFieldsProviderVolcEngineALB;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_CDN: {
- return BizDeployNodeConfigFieldsProviderVolcEngineCDN;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_CERTCENTER: {
- return BizDeployNodeConfigFieldsProviderVolcEngineCertCenter;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_CLB: {
- return BizDeployNodeConfigFieldsProviderVolcEngineCLB;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_DCDN: {
- return BizDeployNodeConfigFieldsProviderVolcEngineDCDN;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_IMAGEX: {
- return BizDeployNodeConfigFieldsProviderVolcEngineImageX;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_LIVE: {
- return BizDeployNodeConfigFieldsProviderVolcEngineLive;
- }
- case DEPLOYMENT_PROVIDERS.VOLCENGINE_TOS: {
- return BizDeployNodeConfigFieldsProviderVolcEngineTOS;
- }
- case DEPLOYMENT_PROVIDERS.WANGSU_CDN: {
- return BizDeployNodeConfigFieldsProviderWangsuCDN;
- }
- case DEPLOYMENT_PROVIDERS.WANGSU_CDNPRO: {
- return BizDeployNodeConfigFieldsProviderWangsuCDNPro;
- }
- case DEPLOYMENT_PROVIDERS.WANGSU_CERTIFICATE: {
- return BizDeployNodeConfigFieldsProviderWangsuCertificate;
- }
- case DEPLOYMENT_PROVIDERS.WEBHOOK: {
- return BizDeployNodeConfigFieldsProviderWebhook;
- }
- }
+ return false;
}, [fieldProvider]);
useEffect(() => {
@@ -599,7 +212,7 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
- {NestedProviderConfigFields && }
+ {renderNestedFieldProviderComponent && <>{renderNestedFieldProviderComponent}>}
diff --git a/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx
index 97730063a..5c209ed97 100644
--- a/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx
@@ -1,6 +1,6 @@
import { useMemo } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { type AnchorProps, Form, type FormInstance, Input, InputNumber } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
@@ -26,7 +26,7 @@ const BizMonitorNodeConfigForm = ({ node, ...props }: BizMonitorNodeConfigFormPr
const { i18n, t } = useTranslation();
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForBizMonitor | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForBizMonitor | undefined;
}, [node]);
const formSchema = getSchema({ i18n });
@@ -93,13 +93,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
host: z.string(t("workflow_node.monitor.form.host.placeholder")).refine((v) => {
return validDomainName(v) || validIPv4Address(v) || validIPv6Address(v);
}, t("common.errmsg.host_invalid")),
- port: z.preprocess(
- (v) => Number(v),
- z
- .number()
- .int(t("workflow_node.monitor.form.port.placeholder"))
- .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid"))
- ),
+ port: z.coerce
+ .number()
+ .int(t("workflow_node.monitor.form.port.placeholder"))
+ .refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
domain: z
.string()
.nullish()
diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFieldsProvider.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFieldsProvider.tsx
new file mode 100644
index 000000000..f62347aa8
--- /dev/null
+++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFieldsProvider.tsx
@@ -0,0 +1,50 @@
+import { useEffect, useState } from "react";
+
+import { NOTIFICATION_PROVIDERS, type NotificationProviderType } from "@/domain/provider";
+
+import BizNotifyNodeConfigFieldsProviderDiscordBot from "./BizNotifyNodeConfigFieldsProviderDiscordBot";
+import BizNotifyNodeConfigFieldsProviderEmail from "./BizNotifyNodeConfigFieldsProviderEmail";
+import BizNotifyNodeConfigFieldsProviderMattermost from "./BizNotifyNodeConfigFieldsProviderMattermost";
+import BizNotifyNodeConfigFieldsProviderSlackBot from "./BizNotifyNodeConfigFieldsProviderSlackBot";
+import BizNotifyNodeConfigFieldsProviderTelegramBot from "./BizNotifyNodeConfigFieldsProviderTelegramBot";
+import BizNotifyNodeConfigFieldsProviderWebhook from "./BizNotifyNodeConfigFieldsProviderWebhook";
+
+const providerComponentMap: Partial>> = {
+ /*
+ 注意:如果追加新的子组件,请保持以 ASCII 排序。
+ NOTICE: If you add new child component, please keep ASCII order.
+ */
+ [NOTIFICATION_PROVIDERS.DISCORDBOT]: BizNotifyNodeConfigFieldsProviderDiscordBot,
+ [NOTIFICATION_PROVIDERS.EMAIL]: BizNotifyNodeConfigFieldsProviderEmail,
+ [NOTIFICATION_PROVIDERS.MATTERMOST]: BizNotifyNodeConfigFieldsProviderMattermost,
+ [NOTIFICATION_PROVIDERS.SLACKBOT]: BizNotifyNodeConfigFieldsProviderSlackBot,
+ [NOTIFICATION_PROVIDERS.TELEGRAMBOT]: BizNotifyNodeConfigFieldsProviderTelegramBot,
+ [NOTIFICATION_PROVIDERS.WEBHOOK]: BizNotifyNodeConfigFieldsProviderWebhook,
+};
+
+const useComponent = (provider: string, { initProps, deps = [] }: { initProps?: (provider: string) => any; deps?: unknown[] }) => {
+ const initComponent = () => {
+ const Component = providerComponentMap[provider as NotificationProviderType];
+ if (!Component) return null;
+
+ const props = initProps?.(provider);
+ if (props) {
+ return ;
+ }
+
+ return ;
+ };
+
+ const [component, setComponent] = useState(() => initComponent());
+
+ useEffect(() => setComponent(initComponent()), [provider]);
+ useEffect(() => setComponent(initComponent()), deps);
+
+ return component;
+};
+
+const _default = {
+ useComponent,
+};
+
+export default _default;
diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx
index 0cca99e74..962a98be0 100644
--- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx
@@ -1,6 +1,6 @@
import { useEffect, useMemo } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { IconPlus } from "@tabler/icons-react";
import { type AnchorProps, Button, Divider, Flex, Form, type FormInstance, Input, Switch, Typography } from "antd";
import { createSchemaFieldRule } from "antd-zod";
@@ -13,18 +13,13 @@ import NotificationProviderSelect from "@/components/provider/NotificationProvid
import Show from "@/components/Show";
import Tips from "@/components/Tips";
import { type AccessModel } from "@/domain/access";
-import { NOTIFICATION_PROVIDERS, notificationProvidersMap } from "@/domain/provider";
+import { notificationProvidersMap } from "@/domain/provider";
import { type WorkflowNodeConfigForBizNotify, defaultNodeConfigForBizNotify } from "@/domain/workflow";
import { useAntdForm, useZustandShallowSelector } from "@/hooks";
import { useAccessesStore } from "@/stores/access";
import { FormNestedFieldsContextProvider, NodeFormContextProvider } from "./_context";
-import BizNotifyNodeConfigFieldsProviderDiscordBot from "./BizNotifyNodeConfigFieldsProviderDiscordBot";
-import BizNotifyNodeConfigFieldsProviderEmail from "./BizNotifyNodeConfigFieldsProviderEmail";
-import BizNotifyNodeConfigFieldsProviderMattermost from "./BizNotifyNodeConfigFieldsProviderMattermost";
-import BizNotifyNodeConfigFieldsProviderSlackBot from "./BizNotifyNodeConfigFieldsProviderSlackBot";
-import BizNotifyNodeConfigFieldsProviderTelegramBot from "./BizNotifyNodeConfigFieldsProviderTelegramBot";
-import BizNotifyNodeConfigFieldsProviderWebhook from "./BizNotifyNodeConfigFieldsProviderWebhook";
+import BizNotifyNodeConfigFieldsProvider from "./BizNotifyNodeConfigFieldsProvider";
import { NodeType } from "../nodes/typings";
export interface BizNotifyNodeConfigFormProps {
@@ -46,7 +41,7 @@ const BizNotifyNodeConfigForm = ({ node, ...props }: BizNotifyNodeConfigFormProp
};
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForBizNotify | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForBizNotify | undefined;
}, [node]);
const formSchema = getSchema({ i18n });
@@ -60,32 +55,7 @@ const BizNotifyNodeConfigForm = ({ node, ...props }: BizNotifyNodeConfigFormProp
const fieldProvider = Form.useWatch("provider", { form: formInst, preserve: true });
const fieldProviderAccessId = Form.useWatch("providerAccessId", { form: formInst, preserve: true });
- const NestedProviderConfigFields = useMemo(() => {
- /*
- 注意:如果追加新的子组件,请保持以 ASCII 排序。
- NOTICE: If you add new child component, please keep ASCII order.
- */
- switch (fieldProvider) {
- case NOTIFICATION_PROVIDERS.DISCORDBOT: {
- return BizNotifyNodeConfigFieldsProviderDiscordBot;
- }
- case NOTIFICATION_PROVIDERS.EMAIL: {
- return BizNotifyNodeConfigFieldsProviderEmail;
- }
- case NOTIFICATION_PROVIDERS.MATTERMOST: {
- return BizNotifyNodeConfigFieldsProviderMattermost;
- }
- case NOTIFICATION_PROVIDERS.SLACKBOT: {
- return BizNotifyNodeConfigFieldsProviderSlackBot;
- }
- case NOTIFICATION_PROVIDERS.TELEGRAMBOT: {
- return BizNotifyNodeConfigFieldsProviderTelegramBot;
- }
- case NOTIFICATION_PROVIDERS.WEBHOOK: {
- return BizNotifyNodeConfigFieldsProviderWebhook;
- }
- }
- }, [fieldProvider]);
+ const renderNestedFieldProviderComponent = BizNotifyNodeConfigFieldsProvider.useComponent(fieldProvider, {});
useEffect(() => {
// 如果未选择通知渠道,则清空授权信息
@@ -199,7 +169,7 @@ const BizNotifyNodeConfigForm = ({ node, ...props }: BizNotifyNodeConfigFormProp
- {NestedProviderConfigFields && }
+ {renderNestedFieldProviderComponent && <>{renderNestedFieldProviderComponent}>}
@@ -251,14 +221,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
const { t } = i18n;
return z.object({
- subject: z
- .string()
- .min(1, t("workflow_node.notify.form.subject.placeholder"))
- .max(20480, t("common.errmsg.string_max", { max: 20480 })),
- message: z
- .string()
- .min(1, t("workflow_node.notify.form.message.placeholder"))
- .max(20480, t("common.errmsg.string_max", { max: 20480 })),
+ subject: z.string().nonempty(t("workflow_node.notify.form.subject.placeholder")),
+ message: z.string().nonempty(t("workflow_node.notify.form.message.placeholder")),
provider: z.string(t("workflow_node.notify.form.provider.placeholder")).nonempty(t("workflow_node.notify.form.provider.placeholder")),
providerAccessId: z.string(t("workflow_node.notify.form.provider_access.placeholder")).nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
providerConfig: z.any().nullish(),
diff --git a/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx
index 58876eed5..96da60f01 100644
--- a/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx
@@ -1,6 +1,6 @@
import { useMemo } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { type AnchorProps, Form, type FormInstance, Input, Radio } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
@@ -33,7 +33,7 @@ const BizUploadNodeConfigForm = ({ node, ...props }: BizUploadNodeConfigFormProp
const { i18n, t } = useTranslation();
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForBizUpload | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForBizUpload | undefined;
}, [node]);
const formSchema = getSchema({ i18n });
@@ -197,8 +197,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
return z
.object({
source: z.enum([UPLOAD_SOURCE_FORM, UPLOAD_SOURCE_LOCAL, UPLOAD_SOURCE_URL], t("workflow_node.upload.form.source.placeholder")),
- certificate: z.string().max(20480, t("common.errmsg.string_max", { max: 20480 })),
- privateKey: z.string().max(20480, t("common.errmsg.string_max", { max: 20480 })),
+ certificate: z.string().nonempty(),
+ privateKey: z.string().nonempty(),
domains: z.string().nullish(),
})
.superRefine((values, ctx) => {
diff --git a/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigExprInputBox.tsx b/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigExprInputBox.tsx
index 870678404..6584956ff 100644
--- a/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigExprInputBox.tsx
+++ b/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigExprInputBox.tsx
@@ -1,6 +1,5 @@
import { forwardRef, useEffect, useImperativeHandle, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
-import { getNodeForm } from "@flowgram.ai/fixed-layout-editor";
import { IconCircleMinus, IconCirclePlus } from "@tabler/icons-react";
import { useControllableValue } from "ahooks";
import { Button, Form, Input, Radio, Select, theme } from "antd";
@@ -171,7 +170,7 @@ const BranchBlockNodeConfigExprInputBox = forwardRef node.flowNodeType === NodeType.BizApply || node.flowNodeType === NodeType.BizUpload || node.flowNodeType === NodeType.BizMonitor)
.map((node) => {
- const form = getNodeForm(node);
+ const form = node.form;
const group = {
data: {
name: form?.getValueIn("name"),
diff --git a/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx
index 6e6f23576..930b80185 100644
--- a/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx
@@ -1,6 +1,6 @@
import { useMemo, useRef } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { type AnchorProps, Form, type FormInstance } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
@@ -35,7 +35,7 @@ const BranchBlockNodeConfigForm = ({ node, ...props }: BranchBlockNodeConfigForm
const { i18n, t } = useTranslation();
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForBranchBlock | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForBranchBlock | undefined;
}, [node]);
const formSchema = getSchema({ i18n }).superRefine(async (values, ctx) => {
diff --git a/ui/src/components/workflow/designer/forms/DelayNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/DelayNodeConfigForm.tsx
index 6b5edb607..beba1f09e 100644
--- a/ui/src/components/workflow/designer/forms/DelayNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/DelayNodeConfigForm.tsx
@@ -1,6 +1,6 @@
import { useMemo } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { type AnchorProps, Form, type FormInstance, InputNumber } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
@@ -24,7 +24,7 @@ const DelayNodeConfigForm = ({ node, ...props }: DelayNodeConfigFormProps) => {
const { i18n, t } = useTranslation();
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForDelay | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForDelay | undefined;
}, [node]);
const formSchema = getSchema({ i18n });
@@ -74,13 +74,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType })
const { t } = i18n;
return z.object({
- wait: z.preprocess(
- (v) => Number(v),
- z
- .number(t("workflow_node.delay.form.wait.placeholder"))
- .int(t("workflow_node.delay.form.wait.placeholder"))
- .gte(1, t("workflow_node.delay.form.wait.placeholder"))
- ),
+ wait: z.coerce
+ .number(t("workflow_node.delay.form.wait.placeholder"))
+ .int(t("workflow_node.delay.form.wait.placeholder"))
+ .positive(t("workflow_node.delay.form.wait.placeholder")),
});
};
diff --git a/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx
index 4ac3d5127..108de80b9 100644
--- a/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx
+++ b/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx
@@ -1,6 +1,6 @@
import { useEffect, useMemo, useState } from "react";
import { getI18n, useTranslation } from "react-i18next";
-import { type FlowNodeEntity, getNodeForm } from "@flowgram.ai/fixed-layout-editor";
+import { type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
import { IconDice6 } from "@tabler/icons-react";
import { type AnchorProps, Button, Form, type FormInstance, Input, Radio, Space } from "antd";
import { createSchemaFieldRule } from "antd-zod";
@@ -29,7 +29,7 @@ const StartNodeConfigForm = ({ node, ...props }: StartNodeConfigFormProps) => {
const { i18n, t } = useTranslation();
const initialValues = useMemo(() => {
- return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForStart | undefined;
+ return node.form?.getValueIn("config") as WorkflowNodeConfigForStart | undefined;
}, [node]);
const formSchema = getSchema({ i18n });
diff --git a/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx b/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx
index 4e71ba6fa..3606820a2 100644
--- a/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx
+++ b/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx
@@ -31,6 +31,7 @@ export const BizApplyNodeRegistry: NodeRegistry = {
["config"]: ({ value }) => {
const res = BizApplyNodeConfigForm.getSchema({}).safeParse(value);
if (!res.success) {
+ console.log(res);
return {
message: res.error.message,
level: FeedbackLevel.Error,
diff --git a/ui/src/domain/provider.ts b/ui/src/domain/provider.ts
index 50f716634..1e10f03ec 100644
--- a/ui/src/domain/provider.ts
+++ b/ui/src/domain/provider.ts
@@ -57,6 +57,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
GOEDGE: "goedge",
GOOGLETRUSTSERVICES: "googletrustservices",
HETZNER: "hetzner",
+ HOSTINGDE: "hostingDE",
HOSTINGER: "hostinger",
HUAWEICLOUD: "huaweicloud",
IONOS: "ionos",
@@ -182,6 +183,7 @@ export const accessProvidersMap: Maphttps://docs.hetzner.com/cloud/api/getting-started/generating-api-token",
+ "access.form.hostingde_api_key.label": "hosting.de API key",
+ "access.form.hostingde_api_key.placeholder": "Please enter hosting.de API key",
+ "access.form.hostingde_api_key.tooltip": "For more information, see https://www.hosting.de/api/#requests-and-authentication",
"access.form.hostinger_api_token.label": "Hostinger API token",
"access.form.hostinger_api_token.placeholder": "Please enter Hostinger API token",
"access.form.hostinger_api_token.tooltip": "For more information, see https://developers.hostinger.com/#description/authentication",
diff --git a/ui/src/i18n/locales/en/nls.provider.json b/ui/src/i18n/locales/en/nls.provider.json
index 7b3f7d0d9..06d0270ec 100644
--- a/ui/src/i18n/locales/en/nls.provider.json
+++ b/ui/src/i18n/locales/en/nls.provider.json
@@ -94,6 +94,7 @@
"provider.goedge": "GoEdge",
"provider.googletrustservices": "Google Trust Services",
"provider.hetzner": "Hetzner",
+ "provider.hostingde": "hosting.de",
"provider.hostinger": "Hostinger",
"provider.huaweicloud": "Huawei Cloud",
"provider.huaweicloud.cdn": "Huawei Cloud - CDN (Content Delivery Network)",
diff --git a/ui/src/i18n/locales/zh/nls.access.json b/ui/src/i18n/locales/zh/nls.access.json
index d394d680f..38bef4dae 100644
--- a/ui/src/i18n/locales/zh/nls.access.json
+++ b/ui/src/i18n/locales/zh/nls.access.json
@@ -295,6 +295,9 @@
"access.form.hetzner_api_token.label": "Hetzner API Token",
"access.form.hetzner_api_token.placeholder": "请输入 Hetzner API Token",
"access.form.hetzner_api_token.tooltip": "这是什么?请参阅 https://docs.hetzner.com/cloud/api/getting-started/generating-api-token",
+ "access.form.hostingde_api_key.label": "hosting.de API Key",
+ "access.form.hostingde_api_key.placeholder": "请输入 hosting.de API Key",
+ "access.form.hostingde_api_key.tooltip": "这是什么?请参阅 https://www.hosting.de/api/#requests-and-authentication",
"access.form.hostinger_api_token.label": "Hostinger API Token",
"access.form.hostinger_api_token.placeholder": "请输入 Hostinger API Token",
"access.form.hostinger_api_token.tooltip": "这是什么?请参阅 https://developers.hostinger.com/#description/authentication",
diff --git a/ui/src/i18n/locales/zh/nls.provider.json b/ui/src/i18n/locales/zh/nls.provider.json
index bf23ceca9..55d5af7b6 100644
--- a/ui/src/i18n/locales/zh/nls.provider.json
+++ b/ui/src/i18n/locales/zh/nls.provider.json
@@ -94,6 +94,7 @@
"provider.goedge": "GoEdge",
"provider.googletrustservices": "Google Trust Services",
"provider.hetzner": "Hetzner",
+ "provider.hostingde": "hosting.de",
"provider.hostinger": "Hostinger",
"provider.huaweicloud": "华为云",
"provider.huaweicloud.cdn": "华为云 - 内容分发网络 CDN",
diff --git a/ui/src/pages/settings/SettingsSSLProvider.tsx b/ui/src/pages/settings/SettingsSSLProvider.tsx
index 342e62453..ebf1001cf 100644
--- a/ui/src/pages/settings/SettingsSSLProvider.tsx
+++ b/ui/src/pages/settings/SettingsSSLProvider.tsx
@@ -206,14 +206,8 @@ const InternalSharedFormEabFields = ({ i18nKey }: { i18nKey: string }) => {
const formSchema = z.object({
endpoint: z.url(t("common.errmsg.url_invalid")),
- eabKid: z
- .string(t("access.form.shared_acme_eab_kid.label"))
- .min(1, t("access.form.shared_acme_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
- eabHmacKey: z
- .string(t("access.form.shared_acme_eab_hmac_key.label"))
- .min(1, t("access.form.shared_acme_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 })),
+ eabKid: z.string(t("access.form.shared_acme_eab_kid.label")).nonempty(t("access.form.shared_acme_eab_kid.placeholder")),
+ eabHmacKey: z.string(t("access.form.shared_acme_eab_hmac_key.label")).nonempty(t("access.form.shared_acme_eab_hmac_key.placeholder")),
});
const formRule = createSchemaFieldRule(formSchema);
@@ -321,14 +315,8 @@ const InternalSettingsFormProviderACMECA = () => {
const formSchema = z.object({
endpoint: z.url(t("common.errmsg.url_invalid")),
- eabKid: z
- .string(t("access.form.acmeca_eab_kid.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
- eabHmacKey: z
- .string(t("access.form.acmeca_eab_hmac_key.placeholder"))
- .max(256, t("common.errmsg.string_max", { max: 256 }))
- .nullish(),
+ eabKid: z.string(t("access.form.acmeca_eab_kid.placeholder")).nullish(),
+ eabHmacKey: z.string(t("access.form.acmeca_eab_hmac_key.placeholder")).nullish(),
});
const formRule = createSchemaFieldRule(formSchema);
diff --git a/ui/src/repository/certificate.ts b/ui/src/repository/certificate.ts
index 43447b89c..9c9e3e7f4 100644
--- a/ui/src/repository/certificate.ts
+++ b/ui/src/repository/certificate.ts
@@ -40,6 +40,7 @@ export const list = async (request: ListRequest) => {
"keyAlgorithm",
"validityNotBefore",
"validityNotAfter",
+ "validityInterval",
"isRenewed",
"isRevoked",
"workflowRef",
@@ -61,6 +62,26 @@ export const listByWorkflowRunId = async (workflowRunId: string) => {
const list = await pb.collection(COLLECTION_NAME_CERTIFICATE).getFullList({
batch: 65535,
+ fields: [
+ "id",
+ "source",
+ "subjectAltNames",
+ "serialNumber",
+ "issuerOrg",
+ "keyAlgorithm",
+ "validityNotBefore",
+ "validityNotAfter",
+ "validityInterval",
+ "isRenewed",
+ "isRevoked",
+ "workflowRef",
+ "created",
+ "updated",
+ "deleted",
+ "expand.workflowRef.id",
+ "expand.workflowRef.name",
+ "expand.workflowRef.description",
+ ].join(","),
filter: pb.filter("workflowRunRef={:workflowRunId}", { workflowRunId }),
sort: "created",
requestKey: null,