sslcert.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package web
  2. import (
  3. "context"
  4. "fmt"
  5. v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
  6. "github.com/go-nunu/nunu-layout-advanced/internal/model"
  7. )
  8. // ProcessSSLCertificate 处理SSL证书
  9. func (s *AidedWebService) ProcessSSLCertificate(ctx context.Context, req *v1.WebForwardingRequest, cdnUid int) error {
  10. if !s.IsHttpsProtocol(req.WebForwardingData.IsHttps) {
  11. return nil // 非HTTPS协议不需要处理SSL证书
  12. }
  13. // 添加SSL证书
  14. sslCertId, err := s.sslCert.AddSSLCert(ctx, v1.SSL{
  15. Name: req.WebForwardingData.Domain,
  16. Domain: req.WebForwardingData.Domain,
  17. CertData: req.WebForwardingData.HttpsCert,
  18. KeyData: req.WebForwardingData.HttpsKey,
  19. CdnUserId: cdnUid,
  20. Description: req.WebForwardingData.Comment,
  21. })
  22. if err != nil {
  23. return fmt.Errorf("添加SSL证书失败: %w", err)
  24. }
  25. // 更新请求中的证书ID
  26. req.WebForwardingData.SslCertId = sslCertId
  27. // 编辑SSL策略
  28. if err := s.sslCert.EditSslPolicy(ctx, req.WebForwardingData.SslPolicyId, []int64{sslCertId}, "add"); err != nil {
  29. return fmt.Errorf("编辑SSL策略失败: %w", err)
  30. }
  31. return nil
  32. }
  33. // ProcessSSLCertificateUpdate 处理SSL证书更新
  34. func (s *AidedWebService) ProcessSSLCertificateUpdate(ctx context.Context, req *v1.WebForwardingRequest, oldData *model.WebForwarding, cdnUid int) error {
  35. if !s.IsHttpsProtocol(req.WebForwardingData.IsHttps) {
  36. return nil // 非HTTPS协议不需要处理SSL证书
  37. }
  38. // 如果证书ID为0
  39. if oldData.SslCertId == 0 {
  40. err := s.ProcessSSLCertificate(ctx, req, cdnUid)
  41. if err != nil {
  42. return fmt.Errorf("处理SSL证书失败: %w", err)
  43. }
  44. return nil
  45. }
  46. // 如果证书内容有变化
  47. if oldData.HttpsCert != req.WebForwardingData.HttpsCert || oldData.HttpsKey != req.WebForwardingData.HttpsKey {
  48. if err := s.sslCert.EditSSLCert(ctx, v1.SSL{
  49. Name: req.WebForwardingData.Domain,
  50. CertId: oldData.SslCertId,
  51. CertData: req.WebForwardingData.HttpsCert,
  52. KeyData: req.WebForwardingData.HttpsKey,
  53. CdnUserId: cdnUid,
  54. Domain: req.WebForwardingData.Domain,
  55. Description: req.WebForwardingData.Comment,
  56. }); err != nil {
  57. return fmt.Errorf("更新SSL证书失败: %w", err)
  58. }
  59. }
  60. return nil
  61. }
  62. // CleanupSSLCertificate 清理SSL证书
  63. func (s *AidedWebService) CleanupSSLCertificate(ctx context.Context, oldData *model.WebForwarding) error {
  64. if oldData.SslCertId != 0 {
  65. if err := s.cdn.DelSSLCert(ctx, int64(oldData.SslCertId)); err != nil {
  66. return fmt.Errorf("删除SSL证书失败: %w", err)
  67. }
  68. if err := s.sslCert.EditSslPolicy(ctx, int64(oldData.SslPolicyId), []int64{int64(oldData.SslCertId)}, "del"); err != nil {
  69. return fmt.Errorf("删除SSL策略失败: %w", err)
  70. }
  71. }
  72. return nil
  73. }