From 7ef6a5df0e07e74cc74319b1aa50aa4e91b7f989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Fri, 30 Jan 2026 17:26:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=8D=E5=86=8D=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=89=8B=E5=8A=A8=E7=AD=BE=E5=8F=91=E8=AF=81=E4=B9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/biz/cert.go | 2 - internal/data/cert.go | 72 ++---------------------------- internal/route/http.go | 2 - internal/service/cert.go | 31 ------------- web/src/api/panel/cert/index.ts | 4 -- web/src/views/cert/ObtainModal.vue | 66 +-------------------------- 6 files changed, 4 insertions(+), 173 deletions(-) diff --git a/internal/biz/cert.go b/internal/biz/cert.go index 2d05cb51..fe7246da 100644 --- a/internal/biz/cert.go +++ b/internal/biz/cert.go @@ -41,11 +41,9 @@ type CertRepo interface { Update(ctx context.Context, req *request.CertUpdate) error Delete(ctx context.Context, id uint) error ObtainAuto(id uint) (*acme.Certificate, error) - ObtainManual(id uint) (*acme.Certificate, error) ObtainPanel(account *CertAccount, ips []string) ([]byte, []byte, error) ObtainSelfSigned(id uint) error Renew(id uint) (*acme.Certificate, error) RefreshRenewalInfo(id uint) (mholtacme.RenewalInfo, error) - ManualDNS(id uint) ([]acme.DNSRecord, error) Deploy(ID, WebsiteID uint) error } diff --git a/internal/data/cert.go b/internal/data/cert.go index 86f48e2d..42b25af4 100644 --- a/internal/data/cert.go +++ b/internal/data/cert.go @@ -31,7 +31,6 @@ type certRepo struct { db *gorm.DB log *slog.Logger settingRepo biz.SettingRepo - client *acme.Client } func NewCertRepo(t *gotext.Locale, db *gorm.DB, log *slog.Logger, settingRepo biz.SettingRepo) biz.CertRepo { @@ -245,40 +244,6 @@ func (r *certRepo) ObtainAuto(id uint) (*acme.Certificate, error) { return &ssl, nil } -func (r *certRepo) ObtainManual(id uint) (*acme.Certificate, error) { - cert, err := r.Get(id) - if err != nil { - return nil, err - } - - if r.client == nil { - return nil, errors.New(r.t.Get("please retry the manual obtain operation")) - } - - ssl, err := r.client.ObtainCertificateManual() - if err != nil { - return nil, err - } - - cert.RenewalInfo = *ssl.RenewalInfo - cert.CertURL = ssl.URL - cert.Cert = string(ssl.ChainPEM) - cert.Key = string(ssl.PrivateKey) - if err = r.db.Save(cert).Error; err != nil { - return nil, err - } - - if cert.Website != nil { - return &ssl, r.Deploy(cert.ID, cert.WebsiteID) - } - - if err = r.runScript(cert); err != nil { - return nil, err - } - - return &ssl, nil -} - func (r *certRepo) ObtainPanel(account *biz.CertAccount, ips []string) ([]byte, []byte, error) { client, err := acme.NewPrivateKeyAccount(account.Email, account.PrivateKey, acme.CALetsEncrypt, nil, r.log) if err != nil { @@ -419,34 +384,6 @@ func (r *certRepo) RefreshRenewalInfo(id uint) (mholtacme.RenewalInfo, error) { return renewInfo, nil } -func (r *certRepo) ManualDNS(id uint) ([]acme.DNSRecord, error) { - cert, err := r.Get(id) - if err != nil { - return nil, err - } - - client, err := r.getClient(cert) - if err != nil { - return nil, err - } - - client.UseManualDns() - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) - defer cancel() - records, err := client.GetDNSRecords(ctx, cert.Domains, acme.KeyType(cert.Type)) - if err != nil { - return nil, err - } - - // 15 分钟后清理客户端 - r.client = client - time.AfterFunc(15*time.Minute, func() { - r.client = nil - }) - - return records, nil -} - func (r *certRepo) Deploy(ID, WebsiteID uint) error { cert, err := r.Get(ID) if err != nil { @@ -501,12 +438,9 @@ func (r *certRepo) runScript(cert *biz.Cert) error { if _, err = f.WriteString(cert.Script); err != nil { return err } - if err = f.Chmod(0755); err != nil { - return err - } - if err = f.Close(); err != nil { - return err - } + + _ = f.Chmod(0755) + _ = f.Close() defer func(name string) { _ = os.Remove(name) }(f.Name()) _, err = shell.Execf("bash " + f.Name()) diff --git a/internal/route/http.go b/internal/route/http.go index de9afa16..4aa42fbc 100644 --- a/internal/route/http.go +++ b/internal/route/http.go @@ -288,10 +288,8 @@ func (route *Http) Register(r *chi.Mux) { r.Get("/{id}", route.cert.Get) r.Delete("/{id}", route.cert.Delete) r.Post("/{id}/obtain_auto", route.cert.ObtainAuto) - r.Post("/{id}/obtain_manual", route.cert.ObtainManual) r.Post("/{id}/obtain_self_signed", route.cert.ObtainSelfSigned) r.Post("/{id}/renew", route.cert.Renew) - r.Post("/{id}/manual_dns", route.cert.ManualDNS) r.Post("/{id}/deploy", route.cert.Deploy) }) r.Route("/dns", func(r chi.Router) { diff --git a/internal/service/cert.go b/internal/service/cert.go index 70d4508e..2c042f7b 100644 --- a/internal/service/cert.go +++ b/internal/service/cert.go @@ -234,21 +234,6 @@ func (s *CertService) ObtainAuto(w http.ResponseWriter, r *http.Request) { Success(w, nil) } -func (s *CertService) ObtainManual(w http.ResponseWriter, r *http.Request) { - req, err := Bind[request.ID](r) - if err != nil { - Error(w, http.StatusUnprocessableEntity, "%v", err) - return - } - - if _, err = s.certRepo.ObtainManual(req.ID); err != nil { - Error(w, http.StatusInternalServerError, "%v", err) - return - } - - Success(w, nil) -} - func (s *CertService) ObtainSelfSigned(w http.ResponseWriter, r *http.Request) { req, err := Bind[request.ID](r) if err != nil { @@ -280,22 +265,6 @@ func (s *CertService) Renew(w http.ResponseWriter, r *http.Request) { Success(w, nil) } -func (s *CertService) ManualDNS(w http.ResponseWriter, r *http.Request) { - req, err := Bind[request.ID](r) - if err != nil { - Error(w, http.StatusUnprocessableEntity, "%v", err) - return - } - - dns, err := s.certRepo.ManualDNS(req.ID) - if err != nil { - Error(w, http.StatusInternalServerError, "%v", err) - return - } - - Success(w, dns) -} - func (s *CertService) Deploy(w http.ResponseWriter, r *http.Request) { req, err := Bind[request.CertDeploy](r) if err != nil { diff --git a/web/src/api/panel/cert/index.ts b/web/src/api/panel/cert/index.ts index 2aceba20..e0b542d1 100644 --- a/web/src/api/panel/cert/index.ts +++ b/web/src/api/panel/cert/index.ts @@ -42,14 +42,10 @@ export default { certDelete: (id: number): any => http.Delete(`/cert/cert/${id}`), // 证书自动签发 obtainAuto: (id: number): any => http.Post(`/cert/cert/${id}/obtain_auto`, { id }), - // 证书手动签发 - obtainManual: (id: number): any => http.Post(`/cert/cert/${id}/obtain_manual`, { id }), // 证书自签名签发 obtainSelfSigned: (id: number): any => http.Post(`/cert/cert/${id}/obtain_self_signed`, { id }), // 续签 renew: (id: number): any => http.Post(`/cert/cert/${id}/renew`, { id }), - // 获取 DNS 记录 - manualDNS: (id: number): any => http.Post(`/cert/cert/${id}/manual_dns`, { id }), // 部署 deploy: (id: number, website_id: number): any => http.Post(`/cert/cert/${id}/deploy`, { id, website_id }) diff --git a/web/src/views/cert/ObtainModal.vue b/web/src/views/cert/ObtainModal.vue index 2944f889..9b123dda 100644 --- a/web/src/views/cert/ObtainModal.vue +++ b/web/src/views/cert/ObtainModal.vue @@ -1,7 +1,7 @@