From 06019ad66dda19b3b68c394ab6cae5fb1eb02928 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Fri, 16 Feb 2024 17:53:46 +0200 Subject: [PATCH] RED-8363 - UI should reject unsupported file types directly based on license --- .../app/modules/admin/screens/license/utils/constants.ts | 1 + .../upload-download/services/file-upload.service.ts | 8 ++++++-- apps/red-ui/src/app/utils/file-drop-utils.ts | 7 +++---- libs/common-ui | 2 +- libs/red-domain/src/lib/license/license.ts | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/screens/license/utils/constants.ts b/apps/red-ui/src/app/modules/admin/screens/license/utils/constants.ts index 89f97c45c..ddaf23101 100644 --- a/apps/red-ui/src/app/modules/admin/screens/license/utils/constants.ts +++ b/apps/red-ui/src/app/modules/admin/screens/license/utils/constants.ts @@ -9,4 +9,5 @@ export enum LicenseFeatures { PDFTRON = 'pdftron', ANALYSIS_CAPACITY_BYTES = 'analysisCapacityBytes', RETENTION_CAPACITY_BYTES = 'retentionCapacityBytes', + SUPPORT_MS_OFFICE_FORMATS = 'supportMSOfficeFormats', } diff --git a/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts b/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts index a324624e8..8f774e5b6 100644 --- a/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts +++ b/apps/red-ui/src/app/modules/upload-download/services/file-upload.service.ts @@ -5,7 +5,7 @@ import { interval, Subject, Subscription } from 'rxjs'; import { ConfigService } from '@services/config.service'; import { TranslateService } from '@ngx-translate/core'; import { IFileUploadResult, OverwriteFileOption, OverwriteFileOptions } from '@red/domain'; -import { isAcceptedFileType, isCsv, isZip } from '@utils/file-drop-utils'; +import { isAcceptedFileType, isCsv, isDocument, isZip } from '@utils/file-drop-utils'; import { ErrorMessageService, GenericService, Toaster } from '@iqser/common-ui'; import { FilesMapService } from '@services/files/files-map.service'; import { switchMap, tap, throttleTime } from 'rxjs/operators'; @@ -13,6 +13,8 @@ import { FilesService } from '@services/files/files.service'; import { UploadDownloadDialogService } from './upload-download-dialog.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { HeadersConfiguration } from '@iqser/common-ui/lib/utils'; +import { LicenseService } from '@services/license.service'; +import { LicenseFeatures } from '../../admin/screens/license/utils/constants'; export interface ActiveUpload { subscription: Subscription; @@ -39,6 +41,7 @@ export class FileUploadService extends GenericService impleme private readonly _configService: ConfigService, private readonly _dialogService: UploadDownloadDialogService, private readonly _errorMessageService: ErrorMessageService, + private readonly _licenseService: LicenseService, private readonly _toaster: Toaster, ) { super(); @@ -72,6 +75,7 @@ export class FileUploadService extends GenericService impleme const maxSizeMB = this._configService.values.MAX_FILE_SIZE_MB; const maxSizeBytes = maxSizeMB * 1024 * 1024; const dossierFiles = this._filesMapService.get(dossierId); + const supportMsOfficeFormats = this._licenseService.getFeature(LicenseFeatures.SUPPORT_MS_OFFICE_FORMATS)?.value as boolean; let option: OverwriteFileOption = localStorage.getItem('overwriteFileOption') as OverwriteFileOption; for (let idx = 0; idx < files.length; ++idx) { const file = files[idx]; @@ -115,7 +119,7 @@ export class FileUploadService extends GenericService impleme continue; } } - if (!isAcceptedFileType(file)) { + if (!isAcceptedFileType(file, supportMsOfficeFormats)) { file.completed = true; file.error = { message: this._translateService.instant('upload-status.error.file-type'), diff --git a/apps/red-ui/src/app/utils/file-drop-utils.ts b/apps/red-ui/src/app/utils/file-drop-utils.ts index 45b8b8fab..d6994fca2 100644 --- a/apps/red-ui/src/app/utils/file-drop-utils.ts +++ b/apps/red-ui/src/app/utils/file-drop-utils.ts @@ -8,10 +8,9 @@ const validDocumentMimeTypes = [ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'application/pdf', ]; -const validDocumentExtensions = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf']; +const validDocumentExtensions = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx']; export function isPdf(file: FileUploadModel): boolean { return file.file.type?.toLowerCase() === 'application/pdf' || file.file.name.toLowerCase().endsWith('.pdf'); @@ -32,8 +31,8 @@ export function isDocument(file: FileUploadModel): boolean { export type Files = FileList | File[]; -export function isAcceptedFileType(file: FileUploadModel): boolean { - return isPdf(file) || isZip(file) || isDocument(file) || isCsv(file); +export function isAcceptedFileType(file: FileUploadModel, supportMsOfficeFormats = false): boolean { + return isPdf(file) || isZip(file) || isCsv(file) || (isDocument(file) && supportMsOfficeFormats); } export function convertFiles(files: FileList | File[], dossier: Dossier): FileUploadModel[] { diff --git a/libs/common-ui b/libs/common-ui index 42cc494e2..6f255d68b 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 42cc494e2f3ff18182198bced1320b40c8b41d5e +Subproject commit 6f255d68b49e921ff458a59056c8bad6cede4abd diff --git a/libs/red-domain/src/lib/license/license.ts b/libs/red-domain/src/lib/license/license.ts index add1048c9..a062d9012 100644 --- a/libs/red-domain/src/lib/license/license.ts +++ b/libs/red-domain/src/lib/license/license.ts @@ -1,7 +1,7 @@ export interface ILicenseFeature { readonly name: string; readonly type: string; - readonly value: string; + readonly value: string | boolean; } export interface ILicense {