From fca7065dca8a8fda79aa6abc0517584f02bc7e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sun, 30 Mar 2025 03:40:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AF=81=E4=B9=A6):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=A5=BF=E9=83=A8=E6=95=B0=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 6 +- go.sum | 14 ++- internal/http/request/cert_dns.go | 4 +- internal/service/cert.go | 4 + pkg/acme/solvers.go | 7 ++ web/src/views/cert/CreateDnsModal.vue | 123 ++++++-------------------- web/src/views/cert/DnsView.vue | 43 ++++----- 7 files changed, 67 insertions(+), 134 deletions(-) diff --git a/go.mod b/go.mod index 68e3c56a..6a2237df 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/bddjr/hlfhr v1.3.8 github.com/beevik/ntp v1.4.3 github.com/creack/pty v1.1.24 + github.com/devhaozi/westcn v0.0.0-20250329192208-199d82100bff github.com/expr-lang/expr v1.17.2 github.com/go-chi/chi/v5 v5.2.1 github.com/go-gormigrate/gormigrate/v2 v2.1.4 @@ -32,7 +33,7 @@ require ( github.com/libdns/gcore v0.0.0-20250127070537-4a9d185c9d20 github.com/libdns/godaddy v1.0.3 github.com/libdns/hetzner v0.0.1 - github.com/libdns/huaweicloud v0.3.1 + github.com/libdns/huaweicloud v0.3.3 github.com/libdns/libdns v0.2.3 github.com/libdns/linode v0.4.1 github.com/libdns/namecheap v0.0.0-20250228022813-d8b4b66c5072 @@ -70,6 +71,7 @@ require ( github.com/go-rat/securecookie v1.1.0 // indirect github.com/go-viper/mapstructure/v2 v2.2.1 // indirect github.com/gofiber/schema v1.3.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/gookit/filter v1.2.2 // indirect github.com/gookit/goutil v0.6.18 // indirect github.com/jaevor/go-nanoid v1.4.0 // indirect @@ -93,7 +95,7 @@ require ( golang.org/x/sync v0.12.0 // indirect golang.org/x/sys v0.31.0 // indirect golang.org/x/text v0.23.0 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect ) replace github.com/mholt/acmez/v3 => github.com/tnb-labs/acmez/v3 v3.0.0-20250329064837-dd8e7d30835a diff --git a/go.sum b/go.sum index ee9e4ed9..03765fc3 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/devhaozi/westcn v0.0.0-20250329192208-199d82100bff h1:SLHnJyRcp6OxbMjHr7FvPvT84IoXuofu+1EeMU+Tr1M= +github.com/devhaozi/westcn v0.0.0-20250329192208-199d82100bff/go.mod h1:dUJZQSurBuEWKixGyCYCyiVIkSFxrgqN3B036tHMPtU= github.com/expr-lang/expr v1.17.2 h1:o0A99O/Px+/DTjEnQiodAgOIK9PPxL8DtXhBRKC+Iso= github.com/expr-lang/expr v1.17.2/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -48,8 +50,11 @@ github.com/golang-cz/httplog v0.0.0-20241002114323-98e09d6f537a/go.mod h1:bgk4Ij github.com/gomodule/redigo v1.9.2 h1:HrutZBLhSIU8abiSfW8pj8mPhOyMYjZT/wcA4/L9L9s= github.com/gomodule/redigo v1.9.2/go.mod h1:KsU3hiK/Ay8U42qpaJk+kuNa3C+spxapWpM+ywhcgtw= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -103,8 +108,8 @@ github.com/libdns/godaddy v1.0.3 h1:PX1FOYDQ1HGQzz8mVOmtwm3aa6Sv5MwCkNzivUUTA44= github.com/libdns/godaddy v1.0.3/go.mod h1:vuKWUXnvblDvcaiRwutOoLl7DuB21x8tI06owsF/JTM= github.com/libdns/hetzner v0.0.1 h1:WsmcsOKnfpKmzwhfyqhGQEIlEeEaEUvb7ezoJgBKaqU= github.com/libdns/hetzner v0.0.1/go.mod h1:Jj12aJipO9Ir7OGaXueJ5J1RnerFMD0auGa6k9kujG4= -github.com/libdns/huaweicloud v0.3.1 h1:wro0zpG86JKL3QVEaV/xfHW/59rmqwMYhcbl16w9EYg= -github.com/libdns/huaweicloud v0.3.1/go.mod h1:6s5ZIwLUr2qKsQz2SRNo7uh8X5uJohxoBR95rtSpNcI= +github.com/libdns/huaweicloud v0.3.3 h1:qXp1mpaGFNQaFrhlvcn8DkMpP8+rJ4qcBcfMHwHd9+w= +github.com/libdns/huaweicloud v0.3.3/go.mod h1:z7M2b0aUu/qFyhRHeDqXzci3yHl9nh7GrobRlbPkJEE= github.com/libdns/libdns v0.1.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/libdns v0.2.0/go.mod h1:yQCXzk1lEZmmCPa857bnk4TsOiqYasqpyOEeSObbb40= github.com/libdns/libdns v0.2.2-0.20230227175549-2dc480633939/go.mod h1:4Bj9+5CQiNMVGf87wjX4CY3HQJypUHRuLvlsfsZqLWQ= @@ -256,11 +261,12 @@ golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58 golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= -gopkg.in/ini.v1 v1.66.6/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.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/http/request/cert_dns.go b/internal/http/request/cert_dns.go index c90ad633..d2364489 100644 --- a/internal/http/request/cert_dns.go +++ b/internal/http/request/cert_dns.go @@ -3,14 +3,14 @@ package request import "github.com/tnb-labs/panel/pkg/acme" type CertDNSCreate struct { - Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"` + Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,westcn,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"` Name string `form:"name" json:"name" validate:"required"` Data acme.DNSParam `form:"data" json:"data" validate:"required"` } type CertDNSUpdate struct { ID uint `form:"id" json:"id" validate:"required|exists:cert_dns,id"` - Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"` + Type acme.DnsType `form:"type" json:"type" validate:"required|in:aliyun,tencent,huawei,westcn,cloudflare,godaddy,gcore,porkbun,namecheap,namesilo,namecom,cloudns,duckdns,hetzner,linode,vercel"` Name string `form:"name" json:"name" validate:"required"` Data acme.DNSParam `form:"data" json:"data" validate:"required"` } diff --git a/internal/service/cert.go b/internal/service/cert.go index cd3a0ffb..f64217f1 100644 --- a/internal/service/cert.go +++ b/internal/service/cert.go @@ -65,6 +65,10 @@ func (s *CertService) DNSProviders(w http.ResponseWriter, r *http.Request) { Label: "华为云", Value: string(acme.Huawei), }, + { + Label: "西部数码", + Value: string(acme.Westcn), + }, { Label: "CloudFlare", Value: string(acme.CloudFlare), diff --git a/pkg/acme/solvers.go b/pkg/acme/solvers.go index d7675809..60775edc 100644 --- a/pkg/acme/solvers.go +++ b/pkg/acme/solvers.go @@ -3,6 +3,7 @@ package acme import ( "context" "fmt" + "github.com/devhaozi/westcn" "os" "strings" "time" @@ -133,6 +134,11 @@ func (s dnsSolver) getDNSProvider() (DNSProvider, error) { AccessKeyId: s.param.AK, SecretAccessKey: s.param.SK, } + case Westcn: + dns = &westcn.Provider{ + Username: s.param.SK, + APIPassword: s.param.AK, + } case CloudFlare: dns = &cloudflare.Provider{ APIToken: s.param.AK, @@ -206,6 +212,7 @@ const ( AliYun DnsType = "aliyun" Tencent DnsType = "tencent" Huawei DnsType = "huawei" + Westcn DnsType = "westcn" CloudFlare DnsType = "cloudflare" Godaddy DnsType = "godaddy" Gcore DnsType = "gcore" diff --git a/web/src/views/cert/CreateDnsModal.vue b/web/src/views/cert/CreateDnsModal.vue index 0f2530e2..dabeb084 100644 --- a/web/src/views/cert/CreateDnsModal.vue +++ b/web/src/views/cert/CreateDnsModal.vue @@ -48,12 +48,7 @@ const handleCreateDNS = async () => { - + { /> - + - + - + - + - + + + + + + + - + - + - + @@ -155,48 +117,30 @@ const handleCreateDNS = async () => { - + - + - + @@ -204,41 +148,24 @@ const handleCreateDNS = async () => { - + - + - + 提交 diff --git a/web/src/views/cert/DnsView.vue b/web/src/views/cert/DnsView.vue index 924efad2..b54d08ca 100644 --- a/web/src/views/cert/DnsView.vue +++ b/web/src/views/cert/DnsView.vue @@ -185,12 +185,7 @@ onUnmounted(() => { - + { @@ -212,7 +206,6 @@ onUnmounted(() => { @@ -220,7 +213,6 @@ onUnmounted(() => { @@ -228,7 +220,6 @@ onUnmounted(() => { @@ -236,7 +227,6 @@ onUnmounted(() => { @@ -244,15 +234,27 @@ onUnmounted(() => { + + + + + + @@ -260,7 +262,6 @@ onUnmounted(() => { @@ -268,7 +269,6 @@ onUnmounted(() => { @@ -276,7 +276,6 @@ onUnmounted(() => { @@ -284,7 +283,6 @@ onUnmounted(() => { @@ -292,7 +290,6 @@ onUnmounted(() => { @@ -300,7 +297,6 @@ onUnmounted(() => { @@ -308,7 +304,6 @@ onUnmounted(() => { @@ -316,7 +311,6 @@ onUnmounted(() => { @@ -324,7 +318,6 @@ onUnmounted(() => { @@ -332,7 +325,6 @@ onUnmounted(() => { @@ -340,7 +332,6 @@ onUnmounted(() => { @@ -348,7 +339,6 @@ onUnmounted(() => { @@ -356,7 +346,6 @@ onUnmounted(() => { @@ -364,7 +353,6 @@ onUnmounted(() => { @@ -372,7 +360,6 @@ onUnmounted(() => {