summaryrefslogtreecommitdiff
path: root/src/server/file
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/file')
-rw-r--r--src/server/file/send-drive-file.ts19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/file/send-drive-file.ts b/src/server/file/send-drive-file.ts
index b904bda91b..c64177d4ee 100644
--- a/src/server/file/send-drive-file.ts
+++ b/src/server/file/send-drive-file.ts
@@ -3,6 +3,7 @@ import * as send from 'koa-send';
import * as mongodb from 'mongodb';
import DriveFile, { getDriveFileBucket } from '../../models/drive-file';
import DriveFileThumbnail, { getDriveFileThumbnailBucket } from '../../models/drive-file-thumbnail';
+import DriveFileWebpublic, { getDriveFileWebpublicBucket } from '../../models/drive-file-webpublic';
const assets = `${__dirname}/../../server/file/assets/`;
@@ -41,6 +42,11 @@ export default async function(ctx: Koa.Context) {
}
const sendRaw = async () => {
+ if (file.metadata && file.metadata.accessKey && file.metadata.accessKey != ctx.query['original']) {
+ ctx.status = 403;
+ return;
+ }
+
const bucket = await getDriveFileBucket();
const readable = bucket.openDownloadStream(fileId);
readable.on('error', commonReadableHandlerGenerator(ctx));
@@ -60,6 +66,19 @@ export default async function(ctx: Koa.Context) {
} else {
await sendRaw();
}
+ } else if ('web' in ctx.query) {
+ const web = await DriveFileWebpublic.findOne({
+ 'metadata.originalId': fileId
+ });
+
+ if (web != null) {
+ ctx.set('Content-Type', file.contentType);
+
+ const bucket = await getDriveFileWebpublicBucket();
+ ctx.body = bucket.openDownloadStream(web._id);
+ } else {
+ await sendRaw();
+ }
} else {
if ('download' in ctx.query) {
ctx.set('Content-Disposition', 'attachment');