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:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user