diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index eed210519..4361d9914 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "5.0.0-beta.4", + "version": "5.0.0-beta.5", "bin": "bin/hydrooj.js", "main": "src/plugin-api", "module": "src/plugin-api", diff --git a/packages/hydrooj/src/entry/worker.ts b/packages/hydrooj/src/entry/worker.ts index a041a57b8..da48331e6 100644 --- a/packages/hydrooj/src/entry/worker.ts +++ b/packages/hydrooj/src/entry/worker.ts @@ -70,10 +70,12 @@ export async function apply(ctx: Context) { if (process.env.NODE_APP_INSTANCE === '0') { const staticDir = path.join(os.homedir(), '.hydro/static'); await fs.emptyDir(staticDir); - await Promise.all(Object.values(global.addons).map(async (f) => { + // Use ordered copy to allow resource override + for (const f of Object.values(global.addons)) { const dir = path.join(f, 'public'); + // eslint-disable-next-line no-await-in-loop if (await fs.pathExists(dir)) await fs.copy(dir, staticDir); - })); + } await new Promise((resolve, reject) => { ctx.inject(['migration'], async (c) => { c.migration.registerChannel('hydrooj', require('../upgrade').coreScripts); diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index 961a68d28..e7afaa1b4 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -211,7 +211,7 @@ export class ContestProblemListHandler extends ContestDetailBaseHandler { if (contest.isDone(this.tdoc) && canViewRecord) { const correction = await problem.getListStatus(domainId, this.user._id, this.tdoc.pids); for (const pid in correction) { - if (this.tsdoc.detail[pid]?.rid === correction[pid].rid) delete correction[pid]; + if (this.tsdoc.detail?.[pid]?.rid === correction[pid].rid) delete correction[pid]; } rids.push(...Object.values(correction).map((i) => i.rid)); this.response.body.correction = correction; diff --git a/packages/hydrooj/src/handler/misc.ts b/packages/hydrooj/src/handler/misc.ts index 13a4b4987..14899654e 100644 --- a/packages/hydrooj/src/handler/misc.ts +++ b/packages/hydrooj/src/handler/misc.ts @@ -43,12 +43,11 @@ export class FilesHandler extends Handler { } } - @param('uid', Types.Int, true) - async get({ }, uid: number) { + async get({ }) { if (!this.udoc._files?.length) this.checkPriv(PRIV.PRIV_CREATE_FILE); this.response.body = { files: sortFiles(this.udoc._files), - urlForFile: (filename: string) => this.url('fs_download', { uid, filename }), + urlForFile: (filename: string) => this.url('fs_download', { uid: this.udoc._id, filename }), }; this.response.pjax = 'partials/files.html'; this.response.template = 'home_files.html'; diff --git a/packages/ui-default/index.ts b/packages/ui-default/index.ts index 163e151bb..e22b4d2b3 100644 --- a/packages/ui-default/index.ts +++ b/packages/ui-default/index.ts @@ -181,6 +181,7 @@ export function apply(ctx: Context) { preload: Schema.string().default(''), domainNavigation: Schema.boolean().default(true).description('Show Domain Navigation'), about: Schema.string().role('markdown').default(defaultAbout), + enableScratchpad: Schema.boolean().default(true).description('Enable Scratchpad Mode'), }), })); ctx.Route('config_schema', '/manage/config/schema.json', SystemConfigSchemaHandler, PRIV.PRIV_EDIT_SYSTEM); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index f36816121..52868b0f1 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.58.0-beta.4", + "version": "4.58.0-beta.5", "author": "undefined ", "license": "AGPL-3.0", "main": "index.ts",