From 807bfb53e3d7801572f4684230bd58380fbb347c Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 30 Jun 2023 00:49:43 +0800 Subject: [PATCH] vjudge: fix codeforces result fetch (picked from #599) --- packages/vjudge/src/providers/codeforces.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/vjudge/src/providers/codeforces.ts b/packages/vjudge/src/providers/codeforces.ts index 7e2eba8bb..f54173a76 100644 --- a/packages/vjudge/src/providers/codeforces.ts +++ b/packages/vjudge/src/providers/codeforces.ts @@ -302,7 +302,8 @@ export default class CodeforcesProvider extends BasicFetcher implements IBasicPr ? '/problemset/status?my=on' : `/gym/${contestId}/my`); this.csrf = document.querySelector('meta[name="X-Csrf-Token"]').getAttribute('content'); - return document.querySelector('[data-submission-id]').getAttribute('data-submission-id'); + const submission = document.querySelector('[data-submission-id]').getAttribute('data-submission-id'); + return type !== 'GYM' ? submission : `${contestId}#${submission}`; } async waitForSubmission(id: string, next, end) { @@ -310,10 +311,13 @@ export default class CodeforcesProvider extends BasicFetcher implements IBasicPr // eslint-disable-next-line no-constant-condition while (true) { await sleep(3000); - const { body } = await this.post('/data/submitSource').send({ - csrf_token: this.csrf, - submissionId: id, - }); + const contestId = id.includes('#') ? id.split('#')[0] : null; + const { body } = await this.post('/data/submitSource') + .set('referer', contestId ? `https://codeforces.com/gym/${contestId}/my` : 'https://codeforces.com/problemset/status?my=on') + .send({ + csrf_token: this.csrf, + submissionId: contestId ? id.split('#')[1] : id, + }); if (body.compilationError === 'true') { return await end({ compilerText: body['checkerStdoutAndStderr#1'],