Просмотр исходного кода

Only rely on the server MIME configuration for content disposition settings

arvid-e 6 месяцев назад
Родитель
Сommit
fed29fd97f

+ 1 - 2
apps/app/src/server/routes/attachment/get.ts

@@ -111,8 +111,7 @@ const respondForRedirectMode = async(res: Response, fileUploadService: FileUploa
 const respondForRelayMode = async(res: Response, fileUploadService: FileUploader,
     attachment: IAttachmentDocument, opts?: RespondOptions): Promise<void> => {
   // apply content-* headers before response
-  const isDownload = opts?.download ?? false;
-  const contentHeaders = new ContentHeaders(attachment, { inline: !isDownload });
+  const contentHeaders = new ContentHeaders(attachment);
   applyHeaders(res, contentHeaders.toExpressHttpHeaders());
 
   try {

+ 1 - 2
apps/app/src/server/service/file-uploader/aws/index.ts

@@ -251,8 +251,7 @@ class AwsFileUploader extends AbstractFileUploader {
 
     // issue signed url (default: expires 120 seconds)
     // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property
-    const isDownload = opts?.download ?? false;
-    const contentHeaders = new ContentHeaders(attachment, { inline: !isDownload });
+    const contentHeaders = new ContentHeaders(attachment);
     const params: GetObjectCommandInput = {
       Bucket: getS3Bucket(),
       Key: filePath,

+ 1 - 2
apps/app/src/server/service/file-uploader/azure.ts

@@ -209,8 +209,7 @@ class AzureFileUploader extends AbstractFileUploader {
       const expiresOn = new Date(now + lifetimeSecForTemporaryUrl * 1000);
       const userDelegationKey = await blobServiceClient.getUserDelegationKey(startsOn, expiresOn);
 
-      const isDownload = opts?.download ?? false;
-      const contentHeaders = new ContentHeaders(attachment, { inline: !isDownload });
+      const contentHeaders = new ContentHeaders(attachment);
 
       // https://github.com/Azure/azure-sdk-for-js/blob/d4d55f73/sdk/storage/storage-blob/src/ContainerSASPermissions.ts#L24
       // r:read, a:add, c:create, w:write, d:delete, l:list

+ 1 - 2
apps/app/src/server/service/file-uploader/gcs/index.ts

@@ -192,8 +192,7 @@ class GcsFileUploader extends AbstractFileUploader {
 
     // issue signed url (default: expires 120 seconds)
     // https://cloud.google.com/storage/docs/access-control/signed-urls
-    const isDownload = opts?.download ?? false;
-    const contentHeaders = new ContentHeaders(attachment, { inline: !isDownload });
+    const contentHeaders = new ContentHeaders(attachment);
     const [signedUrl] = await file.getSignedUrl({
       action: 'read',
       expires: Date.now() + lifetimeSecForTemporaryUrl * 1000,

+ 1 - 2
apps/app/src/server/service/file-uploader/local.ts

@@ -228,8 +228,7 @@ module.exports = function(crowi: Crowi) {
     const internalPathRoot = configManager.getConfig('fileUpload:local:internalRedirectPath');
     const internalPath = urljoin(internalPathRoot, relativePath);
 
-    const isDownload = opts?.download ?? false;
-    const contentHeaders = new ContentHeaders(attachment, { inline: !isDownload });
+    const contentHeaders = new ContentHeaders(attachment);
     applyHeaders(res, [
       ...contentHeaders.toExpressHttpHeaders(),
       { field: 'X-Accel-Redirect', value: internalPath },

+ 5 - 9
apps/app/src/server/service/file-uploader/utils/headers.ts

@@ -22,9 +22,6 @@ export class ContentHeaders implements IContentHeaders {
 
   constructor(
       attachment: IAttachmentDocument,
-      opts?: {
-        inline?: boolean,
-    },
   ) {
     const attachmentContentType = attachment.fileFormat;
     const filename = attachment.originalName;
@@ -38,18 +35,17 @@ export class ContentHeaders implements IContentHeaders {
 
     let finalDispositionValue: string;
 
-    const requestedInline = opts?.inline ?? false;
-    const mimeTypeOverrides = configManager.getConfig('attachments:contentDisposition:mimeTypeOverrides');
-    const overrideSetting = mimeTypeOverrides[mimeType];
+    const currentInlineMimeTypes = configManager.getConfig('attachments:contentDisposition:inlineMimeTypes');
+    const test = currentInlineMimeTypes.inlineMimeTypes;
 
-    if (overrideSetting) {
-      finalDispositionValue = overrideSetting;
+    if (test.includes(mimeType)) {
+      finalDispositionValue = 'inline';
     }
 
     else {
       const defaultSetting = defaultContentDispositionSettings[mimeType];
 
-      if (defaultSetting === 'inline' && requestedInline) {
+      if (defaultSetting === 'inline') {
         finalDispositionValue = 'inline';
       }
       else {