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'],