diff options
| author | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-05-22 23:01:31 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-22 23:01:31 +0900 |
| commit | e750c9171e5f70878bd1fdb5a63effdad77c58ed (patch) | |
| tree | 8c47673054d169bfcd65bab3e96a639fbbfbab5b /packages/backend/src/core/DriveService.ts | |
| parent | enhance(frontend): シンタックスハイライトのエンジンをJavaScr... (diff) | |
| download | misskey-e750c9171e5f70878bd1fdb5a63effdad77c58ed.tar.gz misskey-e750c9171e5f70878bd1fdb5a63effdad77c58ed.tar.bz2 misskey-e750c9171e5f70878bd1fdb5a63effdad77c58ed.zip | |
feat: ロールでアップロード可能なファイル種別を設定可能に (#16081)
* wip
* Update RoleService.ts
* wip
* Update RoleService.ts
* Update CHANGELOG.md
Diffstat (limited to 'packages/backend/src/core/DriveService.ts')
| -rw-r--r-- | packages/backend/src/core/DriveService.ts | 22 |
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) { |