接入证书恢复后台任务

This commit is contained in:
xuans 2026-10-03 02:10:50 +08:00
parent a8e7de7568
commit aeb2d2f2cc
3 changed files with 22 additions and 2 deletions

View File

@ -212,6 +212,9 @@ func NewWithConfigPath(ctx context.Context, cfg config.Config, configPath string
result, err := trackedWorkflow.Restore(ctx, domainID, version)
return result.Certificate, err
},
RestoreCertificateVersionTask: func(ctx context.Context, domainID, version string) (certificate.IssueResult, error) {
return workflow.RestoreVersion(ctx, domainID, version)
},
ValidateCertificate: func(ctx context.Context, domainID string) (certificate.IssueResult, certificate.ValidationResult, error) {
return trackedWorkflow.Validate(ctx, domainID)
},

View File

@ -1,12 +1,15 @@
package httpapi
import (
"context"
"errors"
"net/http"
"strings"
"github.com/gin-gonic/gin"
"git.pcux.cn/xuans/Scert/backend/internal/certificate"
"git.pcux.cn/xuans/Scert/backend/internal/deployment"
"git.pcux.cn/xuans/Scert/backend/internal/domain"
"git.pcux.cn/xuans/Scert/backend/internal/repository"
)
@ -15,12 +18,22 @@ func (s *Server) restoreCertificateVersion(c *gin.Context) {
if !s.authorizeVisibleDomainPermission(c, domain.PermissionDeploymentRollback) {
return
}
domainID := strings.TrimSpace(c.Param("id"))
version := strings.TrimSpace(c.Param("version"))
if s.restoreVersionTask != nil && !taskRepositoryUnavailable(s.tasks) {
s.submitPreparedDomainTask(c, "certificate_restore", &preparedCertificateTask{
operation: func(ctx context.Context, id string) (certificate.IssueResult, deployment.Report, error) {
result, err := s.restoreVersionTask(ctx, id, version)
return result, deployment.Report{}, err
},
})
return
}
if s.restoreVersion == nil {
s.writeError(c, http.StatusNotImplemented, "证书恢复接口尚未配置", errors.New("证书恢复流程未配置"))
return
}
version := strings.TrimSpace(c.Param("version"))
result, err := s.restoreVersion(s.taskWorkflowContext(c), strings.TrimSpace(c.Param("id")), version)
result, err := s.restoreVersion(s.taskWorkflowContext(c), domainID, version)
if err != nil {
if s.logger != nil {
s.logger.Error("恢复证书历史版本失败", "domain_id", c.Param("id"), "version", version, "error", err)

View File

@ -220,6 +220,10 @@ type certificateTaskResult struct {
}
func (s *Server) runCertificateOperation(ctx context.Context, task repository.Task, attempt repository.TaskAttempt, auditAction string, operation func(context.Context, string) (certificateTaskResult, error), stage, runningMessage, successMessage string) {
if task.TaskType == "certificate_restore" {
runningMessage = "\u6b63\u5728\u6062\u590d\u672c\u5730\u8bc1\u4e66\u5386\u53f2\u7248\u672c"
successMessage = "\u672c\u5730\u8bc1\u4e66\u5386\u53f2\u7248\u672c\u6062\u590d\u5b8c\u6210\uff0c\u5c1a\u672a\u4ee3\u8868\u8fdc\u7aef\u670d\u52a1\u5668\u90e8\u7f6e\u5b8c\u6210"
}
executionCtx := deployment.WithTransactionContext(ctx, deployment.TransactionContext{
TaskID: task.ID, AttemptID: attempt.ID, AttemptNumber: attempt.AttemptNumber,
})