summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/DriveService.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/core/DriveService.ts')
-rw-r--r--packages/backend/src/core/DriveService.ts22
1 files changed, 17 insertions, 5 deletions
diff --git a/packages/backend/src/core/DriveService.ts b/packages/backend/src/core/DriveService.ts
index 0d5ac022aa..0c7c06d92f 100644
--- a/packages/backend/src/core/DriveService.ts
+++ b/packages/backend/src/core/DriveService.ts
@@ -515,16 +515,23 @@ export class DriveService {
this.registerLogger.debug(`ADD DRIVE FILE: user ${user?.id ?? 'not set'}, name ${detectedName}, tmp ${path}`);
- //#region Check drive usage
+ //#region Check drive usage and mime type
if (user && !isLink) {
- const usage = await this.driveFileEntityService.calcDriveUsageOf(user);
const isLocalUser = this.userEntityService.isLocalUser(user);
-
const policies = await this.roleService.getUserPolicies(user.id);
+
+ const allowedMimeTypes = policies.uploadableFileTypes;
+ const isAllowed = allowedMimeTypes.some((mimeType) => {
+ if (mimeType === '*' || mimeType === '*/*') return true;
+ if (mimeType.endsWith('/*')) return info.type.mime.startsWith(mimeType.slice(0, -1));
+ return info.type.mime === mimeType;
+ });
+ if (!isAllowed) {
+ throw new IdentifiableError('bd71c601-f9b0-4808-9137-a330647ced9b', 'Unallowed file type.');
+ }
+
const driveCapacity = 1024 * 1024 * policies.driveCapacityMb;
const maxFileSize = 1024 * 1024 * policies.maxFileSizeMb;
- this.registerLogger.debug('drive capacity override applied');
- this.registerLogger.debug(`overrideCap: ${driveCapacity}bytes, usage: ${usage}bytes, u+s: ${usage + info.size}bytes`);
if (maxFileSize < info.size) {
if (isLocalUser) {
@@ -532,6 +539,11 @@ export class DriveService {
}
}
+ const usage = await this.driveFileEntityService.calcDriveUsageOf(user);
+
+ this.registerLogger.debug('drive capacity override applied');
+ this.registerLogger.debug(`overrideCap: ${driveCapacity}bytes, usage: ${usage}bytes, u+s: ${usage + info.size}bytes`);
+
// If usage limit exceeded
if (driveCapacity < usage + info.size) {
if (isLocalUser) {