diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index e034bdbe0..ae00d8734 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.13.41", + "version": "2.13.42", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index 9cd6b4ee7..2e292972a 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -23,7 +23,6 @@ class RecordListHandler extends RecordHandler { @param('uidOrName', Types.String, true) async get(domainId: string, page = 1, pid?: string, tid?: ObjectID, uidOrName?: string) { this.response.template = 'record_main.html'; - if (tid) tid = new ObjectID(tid); const q: any = { tid, hidden: false }; if (uidOrName) { q.$or = [ @@ -171,11 +170,11 @@ class RecordMainConnectionHandler extends RecordConnectionHandler { dispose: bus.Disposable; @param('tid', Types.ObjectID, true) - async prepare(domainId: string, tid: ObjectID) { + async prepare(domainId: string, tid?: ObjectID) { this.domainId = domainId; if (tid) { - const tdoc = await contest.get(domainId, new ObjectID(tid), -1); - if (this.canShowRecord(tdoc)) this.tid = tid; + const tdoc = await contest.get(domainId, tid, -1); + if (this.canShowRecord(tdoc)) this.tid = tid.toHexString(); else { this.close(); return; diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index e7d59dd32..77c731c50 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -425,16 +425,21 @@ export class Handler { url(name: string, kwargs: any = {}) { let res = '#'; const args: any = {}; + const query: any = {}; for (const key in kwargs) { if (kwargs[key] instanceof ObjectID) args[key] = kwargs[key].toHexString(); else args[key] = kwargs[key].toString(); } + for (const key in kwargs.query || {}) { + if (query[key] instanceof ObjectID) query[key] = kwargs.query[key].toHexString(); + else query[key] = kwargs.query[key].toString(); + } try { if (this.domainId !== 'system' || args.domainId) { name += '_with_domainId'; args.domainId = args.domainId || this.domainId; } - const { anchor, query } = args; + const { anchor } = args; if (query) res = router.url(name, args, { query }); else res = router.url(name, args); if (anchor) return `${res}#${anchor}`;