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")
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("cannot generate report download URL: %w", err)
|
return nil, fmt.Errorf("cannot generate report download URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/url"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||||
@@ -193,7 +192,7 @@ func (s FileService) UploadAndSaveFile(
|
|||||||
return file, nil
|
return file, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s FileService) GenerateFileTempURL(
|
func (s FileService) GenerateFileURL(
|
||||||
ctx context.Context, scope coredata.Scoper,
|
ctx context.Context, scope coredata.Scoper,
|
||||||
fileID gid.GID,
|
fileID gid.GID,
|
||||||
expiresIn time.Duration,
|
expiresIn time.Duration,
|
||||||
@@ -203,27 +202,10 @@ func (s FileService) GenerateFileTempURL(
|
|||||||
return "", fmt.Errorf("cannot get file: %w", err)
|
return "", fmt.Errorf("cannot get file: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
presignClient := s3.NewPresignClient(s.svc.s3)
|
presignedURL, err := s.svc.fileManager.GenerateFileUrl(ctx, file, expiresIn)
|
||||||
|
|
||||||
// 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 },
|
|
||||||
)
|
|
||||||
if err != nil {
|
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.
|
// DownloadURL is the resolver for the downloadUrl field.
|
||||||
func (r *fileResolver) DownloadURL(ctx context.Context, obj *types.File) (string, error) {
|
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 {
|
if err != nil {
|
||||||
return "", err
|
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 {
|
if err != nil {
|
||||||
r.logger.ErrorCtx(ctx, "cannot generate download URL", log.Error(err))
|
r.logger.ErrorCtx(ctx, "cannot generate download URL", log.Error(err))
|
||||||
return "", gqlutils.Internal(ctx)
|
return "", gqlutils.Internal(ctx)
|
||||||
|
|||||||
Reference in New Issue
Block a user