diff --git a/models/judge_state.js b/models/judge_state.js index 27ae41a..d4369fd 100644 --- a/models/judge_state.js +++ b/models/judge_state.js @@ -83,7 +83,7 @@ class JudgeState extends Model { submit_time: parseInt((new Date()).getTime() / 1000), type: 0, - type_info: '', + type_info: 0, pending: true, diff --git a/modules/contest.js b/modules/contest.js index 18e5659..63cce58 100644 --- a/modules/contest.js +++ b/modules/contest.js @@ -338,6 +338,7 @@ app.get('/contest/:id/:pid', async (req, res) => { let problem_id = problems_id[pid - 1]; let problem = await Problem.fromID(problem_id); + await problem.loadRelationships(); contest.ended = await contest.isEnded(); if (!(await contest.isRunning() || contest.ended)) { diff --git a/modules/problem.js b/modules/problem.js index 2340780..a49398b 100644 --- a/modules/problem.js +++ b/modules/problem.js @@ -773,7 +773,18 @@ app.get('/problem/:id/download/additional_file', async (req, res) => { let problem = await Problem.fromID(id); if (!problem) throw new ErrorMessage('无此题目。'); - if (!await problem.isAllowedUseBy(res.locals.user)) throw new ErrorMessage('您没有权限进行此操作。'); + + // XXX: Reduce duplication (see the '/problem/:id/submit' handler) + let contest_id = parseInt(req.query.contest_id); + if (contest_id) { + let contest = await Contest.fromID(contest_id); + if (!contest) throw new ErrorMessage('无此比赛。'); + if (!await contest.isRunning()) throw new ErrorMessage('比赛未开始或已结束。'); + let problems_id = await contest.getProblems(); + if (!problems_id.includes(id)) throw new ErrorMessage('无此题目。'); + } else { + if (!await problem.isAllowedUseBy(res.locals.user)) throw new ErrorMessage('您没有权限进行此操作。'); + } await problem.loadRelationships();