Validate downloads before installing workspace files
This commit is contained in:
@@ -114,22 +114,25 @@ func materializeVerifiedCachedAudio(ctx context.Context, req S3MaterializeReques
|
||||
if err := fileops.EnsureWorkspaceDirectory(filepath.Dir(req.DestPath)); err != nil {
|
||||
return "", false, fmt.Errorf("create audio destination directory: %w", err)
|
||||
}
|
||||
temporary, err := fileops.DownloadToSiblingTemp(req.DestPath, func(destination io.Writer) error {
|
||||
temporaryPath, err := writeAudioTemp(req.DestPath, func(destination io.Writer) error {
|
||||
_, err := io.Copy(destination, source)
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return "", false, fmt.Errorf("copy verified cached audio: %w", err)
|
||||
}
|
||||
defer func() { _ = temporary.Cleanup() }()
|
||||
checksum, size, err := temporaryChecksum(temporary)
|
||||
defer func() { _ = os.Remove(temporaryPath) }()
|
||||
checksum, size, err := checksumAudioTemp(temporaryPath)
|
||||
if err != nil {
|
||||
return "", false, err
|
||||
}
|
||||
if err := validateLocalAudio(temporaryPath, identity.Size); err != nil {
|
||||
return "", false, nil
|
||||
}
|
||||
if size != identity.Size || checksum != identity.SHA256 {
|
||||
return "", false, nil
|
||||
}
|
||||
if err := temporary.Install(filepath.Base(req.DestPath), fileops.WorkspaceFileMode); err != nil {
|
||||
if err := fileops.InstallSiblingTempFile(temporaryPath, req.DestPath, fileops.WorkspaceFileMode); err != nil {
|
||||
return "", false, fmt.Errorf("install verified cached audio: %w", err)
|
||||
}
|
||||
return checksum, true, nil
|
||||
@@ -147,8 +150,8 @@ func cacheRelativePath(cacheRoot, cachePath string) (string, error) {
|
||||
return normalized, nil
|
||||
}
|
||||
|
||||
func temporaryChecksum(temporary *fileops.DownloadedTempFile) (string, int64, error) {
|
||||
file, err := temporary.Open()
|
||||
func checksumAudioTemp(path string) (string, int64, error) {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return "", 0, fmt.Errorf("open cached audio copy: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user