diff --git a/apps/backend/src/app/files/files.module.ts b/apps/backend/src/app/files/files.module.ts index c0bf837..472a79a 100644 --- a/apps/backend/src/app/files/files.module.ts +++ b/apps/backend/src/app/files/files.module.ts @@ -3,9 +3,10 @@ import { DbModule } from "../db/db.module"; import { StorageModule } from "../storage/storage.module"; import { FilesController } from "./files.controller"; import { FilesService } from "./files.service"; +import { CredentialsModule } from '../credentials/credentials.module'; @Module({ - imports: [StorageModule, DbModule], + imports: [StorageModule, DbModule, CredentialsModule], controllers: [FilesController], providers: [FilesService], }) diff --git a/apps/backend/src/app/files/files.service.ts b/apps/backend/src/app/files/files.service.ts index c2c648d..e49f2c4 100644 --- a/apps/backend/src/app/files/files.service.ts +++ b/apps/backend/src/app/files/files.service.ts @@ -62,7 +62,7 @@ export class FilesService { ); const fileNameWithoutSpaces = file.fileName.replace(/\s/g, "_"); return new StreamableFile(fileBuffer, { - disposition: `attachment; filename="${fileNameWithoutSpaces}.${fileInformation.fileType.ext.toLowerCase()}"`, + disposition: `attachment; filename="${fileNameWithoutSpaces}.${fileInformation.fileType[0].extension.toLowerCase()}"`, }); } @@ -130,7 +130,7 @@ export class FilesService { .values({ fileName: data.get("fileName") as string, checksum: saveResult.fileChecksum, - extension: saveResult.fileType.ext, + extension: saveResult.fileType[0].extension, fileSize: saveResult.fileSize, fileType: saveResult.fileType.mime, isRestricted: Boolean(data.get("isRestricted")), diff --git a/apps/backend/src/app/machines/machines.module.ts b/apps/backend/src/app/machines/machines.module.ts index 4c79ab7..a37cd2c 100644 --- a/apps/backend/src/app/machines/machines.module.ts +++ b/apps/backend/src/app/machines/machines.module.ts @@ -1,8 +1,10 @@ import { Module } from "@nestjs/common"; import { MachinesController } from "apps/backend/src/app/machines/machines.controller"; import { MachinesService } from "apps/backend/src/app/machines/machines.service"; +import { DbModule } from 'apps/backend/src/app/db/db.module'; @Module({ + imports: [DbModule], controllers: [MachinesController], providers: [MachinesService], }) diff --git a/apps/backend/src/app/storage/storage.module.ts b/apps/backend/src/app/storage/storage.module.ts index a42b9a9..d2fdf78 100644 --- a/apps/backend/src/app/storage/storage.module.ts +++ b/apps/backend/src/app/storage/storage.module.ts @@ -1,9 +1,10 @@ import { Module } from "@nestjs/common"; -import { DbModule } from "apps/backend/src/app/db/db.module"; -import { StorageService } from "apps/backend/src/app/storage/storage.service"; +import { DbModule } from "../db/db.module"; +import { StorageService } from "../storage/storage.service"; @Module({ imports: [DbModule], providers: [StorageService], + exports: [StorageService] }) export class StorageModule {} diff --git a/apps/backend/src/app/storage/storage.service.ts b/apps/backend/src/app/storage/storage.service.ts index e56dabe..ea4c00f 100644 --- a/apps/backend/src/app/storage/storage.service.ts +++ b/apps/backend/src/app/storage/storage.service.ts @@ -16,7 +16,7 @@ import { } from "apps/backend/src/app/db/schema"; import { IFileInformation } from "apps/backend/src/app/storage/storage.types"; import { eq } from "drizzle-orm"; -import FileType from "file-type"; +import { filetypeinfo } from 'magic-bytes.js'; @Injectable() export class StorageService { @@ -61,7 +61,7 @@ export class StorageService { return allowedMime.has(currentMime); } - const fileType = await FileType.fileTypeFromBuffer(file); + const fileType = filetypeinfo(file); // Array of MIMEs with possible duplicate field const _mimes: Array = []; @@ -106,7 +106,7 @@ export class StorageService { }); } - if (!checkMime(mimeSet, fileType.mime)) + if (!checkMime(mimeSet, fileType[0].mime)) throw new BadRequestException({ cause: "MIME type", description: `Invalid MIME type. Allowed MIME types are: ${[...mimeSet].join(", ")}.`, @@ -164,15 +164,15 @@ export class StorageService { fileDisplayName: string, isDocumentation?: boolean, ): Promise { - const fileType = await FileType.fileTypeFromBuffer(file); + const fileType = filetypeinfo(file); const checksum = await this.getChecksum(file); - const fileName = `${isDocumentation ? "doc" : "file"}-${checksum}.${fileType.ext.toLowerCase()}`; + const fileName = `${isDocumentation ? "doc" : "file"}-${checksum}.${fileType[0].extension.toLowerCase()}`; return { fileName: fileName, fileDisplayName: fileDisplayName, fileSize: file.byteLength, fileChecksum: checksum, - fileType: fileType, + fileType: fileType[0], isDocumentation: isDocumentation || false, }; } diff --git a/apps/backend/src/app/storage/storage.types.ts b/apps/backend/src/app/storage/storage.types.ts index 51ef87c..c565775 100644 --- a/apps/backend/src/app/storage/storage.types.ts +++ b/apps/backend/src/app/storage/storage.types.ts @@ -1,12 +1,12 @@ import { StreamableFile } from "@nestjs/common"; -import FileType from "file-type"; +import { GuessedFile } from 'magic-bytes.js/dist/model/tree'; export interface IFileInformation { fileDisplayName: string; fileName: string; fileChecksum: string; isDocumentation: boolean; - fileType: FileType.FileTypeResult; + fileType: GuessedFile; fileSize: number; }