Rename GenerateFileTempURL to GenerateFileURL, remove S3 presign duplication

Replace the inline PresignGetObject logic in probo.FileService with a
call to fileManager.GenerateFileUrl. Update the two callers.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
This commit is contained in:
Ludovic Vielle
2026-06-08 19:53:38 +02:00
parent 14c500b1b2
commit 6f83d9be48
3 changed files with 7 additions and 25 deletions

View File

@@ -409,7 +409,7 @@ func (s AuditService) GenerateReportURL(
return nil, fmt.Errorf("audit has no report")
}
url, err := s.svc.Files.GenerateFileTempURL(ctx, scope, *audit.ReportFileID, expiresIn)
url, err := s.svc.Files.GenerateFileURL(ctx, scope, *audit.ReportFileID, expiresIn)
if err != nil {
return nil, fmt.Errorf("cannot generate report download URL: %w", err)
}

View File

@@ -18,7 +18,6 @@ import (
"context"
"fmt"
"io"
"net/url"
"time"
"github.com/aws/aws-sdk-go-v2/service/s3"
@@ -193,7 +192,7 @@ func (s FileService) UploadAndSaveFile(
return file, nil
}
func (s FileService) GenerateFileTempURL(
func (s FileService) GenerateFileURL(
ctx context.Context, scope coredata.Scoper,
fileID gid.GID,
expiresIn time.Duration,
@@ -203,27 +202,10 @@ func (s FileService) GenerateFileTempURL(
return "", fmt.Errorf("cannot get file: %w", err)
}
presignClient := s3.NewPresignClient(s.svc.s3)
// Use RFC 6266/5987 encoding for filename with UTF-8 support
encodedFilename := url.QueryEscape(file.FileName)
contentDisposition := fmt.Sprintf("attachment; filename=%q; filename*=UTF-8''%s",
encodedFilename, encodedFilename)
presignedReq, err := presignClient.PresignGetObject(
ctx,
&s3.GetObjectInput{
Bucket: &s.svc.bucket,
Key: &file.FileKey,
ResponseCacheControl: new("max-age=3600, public"),
ResponseContentType: &file.MimeType,
ResponseContentDisposition: &contentDisposition,
},
func(opts *s3.PresignOptions) { opts.Expires = expiresIn },
)
presignedURL, err := s.svc.fileManager.GenerateFileUrl(ctx, file, expiresIn)
if err != nil {
return "", fmt.Errorf("cannot presign GetObject request: %w", err)
return "", fmt.Errorf("cannot generate file URL: %w", err)
}
return presignedReq.URL, nil
return presignedURL, nil
}

View File

@@ -18,12 +18,12 @@ import (
// DownloadURL is the resolver for the downloadUrl field.
func (r *fileResolver) DownloadURL(ctx context.Context, obj *types.File) (string, error) {
scope, err := r.authorize(ctx, obj.ID, probo.ActionFileDownloadUrl)
scope, err := r.authorize(ctx, obj.ID, probo.ActionFileGet)
if err != nil {
return "", err
}
downloadUrl, err := r.probo.Files.GenerateFileTempURL(ctx, scope, obj.ID, 60*time.Second)
downloadUrl, err := r.probo.Files.GenerateFileURL(ctx, scope, obj.ID, 60*time.Second)
if err != nil {
r.logger.ErrorCtx(ctx, "cannot generate download URL", log.Error(err))
return "", gqlutils.Internal(ctx)