From 00b90f44562248d609bd219b027900be82223c34 Mon Sep 17 00:00:00 2001 From: undefined Date: Tue, 27 Aug 2024 23:16:04 +0800 Subject: [PATCH] core: fix signDownloadLink --- packages/hydrooj/src/model/storage.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/hydrooj/src/model/storage.ts b/packages/hydrooj/src/model/storage.ts index c0f2972ed..da798cb7e 100644 --- a/packages/hydrooj/src/model/storage.ts +++ b/packages/hydrooj/src/model/storage.ts @@ -104,7 +104,7 @@ export class StorageModel { { path: target, autoDelete: null }, { $set: { lastUsage: new Date() } }, ); - return await storage.signDownloadLink(res.value?._id || target, filename, noExpire, useAlternativeEndpointFor); + return await storage.signDownloadLink(res.value?.link || res.value?._id || target, filename, noExpire, useAlternativeEndpointFor); } static async copy(src: string, dst: string) { @@ -142,7 +142,7 @@ async function cleanFiles() { let res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } }); while (res.value) { // eslint-disable-next-line no-await-in-loop - await storage.del(res.value._id); + if (!res.value.link) await storage.del(res.value._id); // eslint-disable-next-line no-await-in-loop res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } }); } @@ -160,11 +160,14 @@ export function apply(ctx: Context) { ]); await StorageModel.del(problemFiles.concat(contestFiles).concat(trainingFiles).map((i) => i.path)); }); + + if (process.env.NODE_APP_INSTANCE !== '0') return; ctx.on('ready', async () => { - if (process.env.NODE_APP_INSTANCE !== '0') return; await db.ensureIndexes( StorageModel.coll, + { key: { path: 1 }, name: 'path' }, { key: { path: 1, autoDelete: 1 }, sparse: true, name: 'autoDelete' }, + { key: { link: 1 }, sparse: true, name: 'link' }, ); if (!await ScheduleModel.count({ type: 'schedule', subType: 'storage.prune' })) { await ScheduleModel.add({