diff --git a/examples/reverse_proxy/Caddyfile b/examples/reverse_proxy/Caddyfile new file mode 100644 index 00000000..28792912 --- /dev/null +++ b/examples/reverse_proxy/Caddyfile @@ -0,0 +1,6 @@ +hydro.ac { + reverse_proxy http://localhost:8888 { + header_up x-real-ip {remote_host} + header_up x-real-host {hostport} + } +} diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index f8081a85..ae12d6f4 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.32.20", + "version": "2.32.21", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/judge.ts b/packages/hydrooj/src/handler/judge.ts index 67a3d57a..b9d974ac 100644 --- a/packages/hydrooj/src/handler/judge.ts +++ b/packages/hydrooj/src/handler/judge.ts @@ -34,18 +34,21 @@ export async function postJudge(rdoc: RecordDoc) { const pdoc = (accept && updated) ? await problem.inc(rdoc.pdomain, rdoc.pid, 'nAccept', 1) : await problem.get(rdoc.pdomain, rdoc.pid); - const difficulty = difficultyAlgorithm(pdoc.nSubmit, pdoc.nAccept); - await Promise.all([ - problem.edit(pdoc.domainId, pdoc.docId, { difficulty }), - problem.inc(pdoc.domainId, pdoc.docId, `stats.${builtin.STATUS_SHORT_TEXTS[rdoc.status]}`, 1), - problem.inc(pdoc.domainId, pdoc.docId, `stats.s${rdoc.score}`, 1), - ]); + if (pdoc) { + const difficulty = difficultyAlgorithm(pdoc.nSubmit, pdoc.nAccept); + await Promise.all([ + problem.edit(pdoc.domainId, pdoc.docId, { difficulty }), + problem.inc(pdoc.domainId, pdoc.docId, `stats.${builtin.STATUS_SHORT_TEXTS[rdoc.status]}`, 1), + problem.inc(pdoc.domainId, pdoc.docId, `stats.s${rdoc.score}`, 1), + ]); + } await bus.serial('record/judge', rdoc, updated); } export async function next(body: JudgeResultBody) { body.rid = new ObjectID(body.rid); let rdoc = await record.get(body.rid); + if (!rdoc) return; const $set: Partial = {}; const $push: any = {}; if (body.case) { @@ -72,7 +75,7 @@ export async function next(body: JudgeResultBody) { if (body.memory !== undefined) $set.memory = body.memory; if (body.progress !== undefined) $set.progress = body.progress; rdoc = await record.update(rdoc.domainId, body.rid, $set, $push); - bus.broadcast('record/change', rdoc, $set, $push); + bus.broadcast('record/change', rdoc!, $set, $push); } export async function end(body: JudgeResultBody) { diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index 42aa6746..316f3df3 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -141,7 +141,7 @@ class RecordModel { } static getMulti(domainId: string, query: any) { - return RecordModel.coll.find({ ...query, domainId }); + return RecordModel.coll.find({ domainId, ...query }); } static async update( diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 04eeacd2..25a82090 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.17.4", + "version": "4.17.5", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/pages/record_main.page.js b/packages/ui-default/pages/record_main.page.js index 895ea654..0c5c3e7c 100644 --- a/packages/ui-default/pages/record_main.page.js +++ b/packages/ui-default/pages/record_main.page.js @@ -22,6 +22,7 @@ const page = new NamedPage('record_main', async () => { $oldTr.trigger('vjContentNew'); } else { $('.record_main__table tbody').prepend($newTr); + $('.record_main__table tbody tr:last').remove(); $newTr.trigger('vjContentNew'); } }; diff --git a/packages/ui-default/templates/record_main_tr.html b/packages/ui-default/templates/record_main_tr.html index 973b03bb..7b0ed090 100644 --- a/packages/ui-default/templates/record_main_tr.html +++ b/packages/ui-default/templates/record_main_tr.html @@ -20,6 +20,7 @@ {% else %} * {% endif %} + {% if rdoc.input %}({{ _('Pretest') }}){% endif %}