summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-09-24 16:24:13 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-09-24 16:24:13 +0900
commitcf573add270abd24768fb3acb345b8626fabde0b (patch)
treec7522881b30f379f55ba34a7aedfb35a4cdfb59e /packages
parent2023.9.0-rc.4 (diff)
downloadsharkey-cf573add270abd24768fb3acb345b8626fabde0b.tar.gz
sharkey-cf573add270abd24768fb3acb345b8626fabde0b.tar.bz2
sharkey-cf573add270abd24768fb3acb345b8626fabde0b.zip
fix
Diffstat (limited to 'packages')
-rw-r--r--packages/backend/src/core/DriveService.ts11
-rw-r--r--packages/backend/src/server/api/endpoints/drive/files/update.ts28
2 files changed, 28 insertions, 11 deletions
diff --git a/packages/backend/src/core/DriveService.ts b/packages/backend/src/core/DriveService.ts
index 0409a4f53b..891be4611d 100644
--- a/packages/backend/src/core/DriveService.ts
+++ b/packages/backend/src/core/DriveService.ts
@@ -87,6 +87,9 @@ type UploadFromUrlArgs = {
@Injectable()
export class DriveService {
+ public static NoSuchFolderError = class extends Error {};
+ public static InvalidFileNameError = class extends Error {};
+ public static CannotUnmarkSensitiveError = class extends Error {};
private registerLogger: Logger;
private downloaderLogger: Logger;
private deleteLogger: Logger;
@@ -650,15 +653,15 @@ export class DriveService {
}
@bindThis
- public async update(file: MiDriveFile, values: Partial<MiDriveFile>, updater: MiUser) {
+ public async updateFile(file: MiDriveFile, values: Partial<MiDriveFile>, updater: MiUser) {
const alwaysMarkNsfw = (await this.roleService.getUserPolicies(file.userId)).alwaysMarkNsfw;
if (values.name && !this.driveFileEntityService.validateFileName(file.name)) {
- throw new Error('invalid filename');
+ throw new DriveService.InvalidFileNameError();
}
if (values.isSensitive !== undefined && values.isSensitive !== file.isSensitive && alwaysMarkNsfw && !values.isSensitive) {
- throw new Error('cannot unmark nsfw');
+ throw new DriveService.CannotUnmarkSensitiveError();
}
if (values.folderId != null) {
@@ -668,7 +671,7 @@ export class DriveService {
});
if (folder == null) {
- throw new Error('folder-not-found');
+ throw new DriveService.NoSuchFolderError();
}
}
diff --git a/packages/backend/src/server/api/endpoints/drive/files/update.ts b/packages/backend/src/server/api/endpoints/drive/files/update.ts
index c9e2d7464c..c01f3de03c 100644
--- a/packages/backend/src/server/api/endpoints/drive/files/update.ts
+++ b/packages/backend/src/server/api/endpoints/drive/files/update.ts
@@ -89,14 +89,28 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw new ApiError(meta.errors.accessDenied);
}
- const fileObj = await this.driveService.update(file, {
- folderId: ps.folderId,
- name: ps.name,
- isSensitive: ps.isSensitive,
- comment: ps.comment,
- }, me);
+ let packedFile;
- return fileObj;
+ try {
+ packedFile = await this.driveService.updateFile(file, {
+ folderId: ps.folderId,
+ name: ps.name,
+ isSensitive: ps.isSensitive,
+ comment: ps.comment,
+ }, me);
+ } catch (e) {
+ if (e instanceof DriveService.InvalidFileNameError) {
+ throw new ApiError(meta.errors.invalidFileName);
+ } else if (e instanceof DriveService.NoSuchFolderError) {
+ throw new ApiError(meta.errors.noSuchFolder);
+ } else if (e instanceof DriveService.CannotUnmarkSensitiveError) {
+ throw new ApiError(meta.errors.restrictedByRole);
+ } else {
+ throw e;
+ }
+ }
+
+ return packedFile;
});
}
}