feat(verify): 验证流程同样比对备份 SHA-256,对齐恢复路径强度 (#77)

验证流程在解压前比对下载对象的 SHA-256(复用恢复路径实现),移除 verifyByType 失效的 checksum 形参。备份/恢复/验证三路径完整性校验一致。
This commit is contained in:
Wu Qing
2026-05-27 00:49:27 +08:00
committed by GitHub
parent e63b8f0be8
commit 04ad3c29f4

View File

@@ -316,14 +316,26 @@ func (s *VerificationService) executeLocally(ctx context.Context, verID uint, ta
logger.Errorf("写入沙箱失败:%v", err)
return
}
// 完整性校验:先比对下载对象的 SHA-256外层对象与备份记录一致再做结构校验。
// 与恢复路径保持一致的强度;早期无 checksum 的备份跳过(向后兼容)。
if backupRecord.Checksum != "" {
logger.Infof("校验备份完整性SHA-256")
if csErr := verifyArtifactChecksum(artifactPath, backupRecord.Checksum); csErr != nil {
errMessage = csErr.Error()
summary = "完整性校验失败"
logger.Errorf("完整性校验失败:%v", csErr)
return
}
logger.Infof("完整性校验通过")
}
preparedPath, err := s.prepareArtifact(artifactPath, logger)
if err != nil {
errMessage = err.Error()
logger.Errorf("准备归档失败:%v", err)
return
}
// 按任务类型分派校验
report, verifyErr := s.verifyByType(task.Type, preparedPath, backupRecord.Checksum, logger)
// 按任务类型做结构校验(外层 SHA-256 已在上方单独校验)。
report, verifyErr := s.verifyByType(task.Type, preparedPath, logger)
if verifyErr != nil {
errMessage = verifyErr.Error()
if report != nil && report.Detail != "" {
@@ -344,8 +356,8 @@ func (s *VerificationService) prepareArtifact(artifactPath string, logger *backu
return prepareBackupArtifact(s.cipher, artifactPath, logger)
}
// verifyByType 按任务类型分派到对应 Verify* 策略
func (s *VerificationService) verifyByType(taskType, artifactPath, checksum string, logger *backup.ExecutionLogger) (*backup.VerifyReport, error) {
// verifyByType 按任务类型分派到对应 Verify* 结构校验策略(不含 SHA-256 比对)
func (s *VerificationService) verifyByType(taskType, artifactPath string, logger *backup.ExecutionLogger) (*backup.VerifyReport, error) {
switch strings.ToLower(strings.TrimSpace(taskType)) {
case "file":
logger.Infof("执行文件归档校验")