From 25444f69f04a726887d0132652b70f218421ba5e Mon Sep 17 00:00:00 2001 From: panda Date: Wed, 7 Sep 2022 14:20:55 +0800 Subject: [PATCH] core: problem hackable check (#427) --- packages/hydrojudge/package.json | 2 +- packages/hydrojudge/src/hosts/hydro.ts | 1 + packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/problem.ts | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 8886e3798..bfcf5f499 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "3.0.0", + "version": "3.0.1", "main": "package.json", "author": "undefined ", "repository": "https://github.com/hydro-dev/Hydro.git", diff --git a/packages/hydrojudge/src/hosts/hydro.ts b/packages/hydrojudge/src/hosts/hydro.ts index f8d62a60d..997270446 100644 --- a/packages/hydrojudge/src/hosts/hydro.ts +++ b/packages/hydrojudge/src/hosts/hydro.ts @@ -28,6 +28,7 @@ export default class Hydro { this.config.cookie = this.config.cookie || ''; this.config.last_update_at = this.config.last_update_at || 0; if (!this.config.server_url.startsWith('http')) this.config.server_url = `http://${this.config.server_url}`; + if (!this.config.server_url.endsWith('/')) this.config.server_url = `${this.config.server_url}/`; this.getLang = this.getLang.bind(this); } diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index ff06eab40..998fc558d 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.17.1", + "version": "3.17.2", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index 4680d34e6..b27eef462 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -550,6 +550,7 @@ export class ProblemHackHandler extends ProblemDetailHandler { @param('rid', Types.ObjectID) @param('tid', Types.ObjectID, true) async prepare(domainId: string, rid: ObjectID, tid?: ObjectID) { + if (typeof this.pdoc.config !== 'object' || !this.pdoc.config.hackable) throw new ForbiddenError('This problem is not hackable.'); this.rdoc = await record.get(domainId, rid); if (!this.rdoc || this.rdoc.pid !== this.pdoc.docId || this.rdoc.contest?.toString() !== tid?.toString()) throw new RecordNotFoundError(domainId, rid);