fix(remote_judger/codeforces): include referer when submitting problem

This commit is contained in:
Baoshuo Ren 2023-02-06 10:24:33 +08:00
parent 3d63a011ac
commit a5a2b4547b
Signed by: baoshuo
GPG Key ID: 00CB9680AB29F51A

View File

@ -146,8 +146,8 @@ export default class CodeforcesProvider implements IBasicProvider {
return _tta; return _tta;
} }
async getCsrfToken(url: string) { async getCsrfToken(url: string, referer = '') {
const { text: html } = await this.get(url); const { text: html } = await this.get(url).set('Referer', referer);
const { const {
window: { document }, window: { document },
} = new JSDOM(html); } = new JSDOM(html);
@ -257,9 +257,17 @@ export default class CodeforcesProvider implements IBasicProvider {
} }
const [type, contestId, problemId] = parseProblemId(id); const [type, contestId, problemId] = parseProblemId(id);
const referer =
this.account.endpoint +
(type !== 'GYM'
? `/problemset/problem/${contestId}/${problemId}`
: `/gym/${contestId}/problem/${problemId}`);
logger.debug('referer', referer);
const [csrf, ftaa, bfaa] = await this.getCsrfToken( const [csrf, ftaa, bfaa] = await this.getCsrfToken(
type !== 'GYM' ? '/problemset/submit' : `/gym/${contestId}/submit` type !== 'GYM' ? '/problemset/submit' : `/gym/${contestId}/submit`,
referer
); );
logger.debug( logger.debug(
@ -275,25 +283,27 @@ export default class CodeforcesProvider implements IBasicProvider {
`/${ `/${
type !== 'GYM' ? 'problemset' : `gym/${contestId}` type !== 'GYM' ? 'problemset' : `gym/${contestId}`
}/submit?csrf_token=${csrf}` }/submit?csrf_token=${csrf}`
).send({ )
csrf_token: csrf, .send({
action: 'submitSolutionFormSubmitted', csrf_token: csrf,
programTypeId: programType.id, action: 'submitSolutionFormSubmitted',
source: code, programTypeId: programType.id,
tabsize: 4, source: code,
sourceFile: '', tabsize: 4,
ftaa, sourceFile: '',
bfaa, ftaa,
_tta: this.tta(this.getCookie('39ce7')), bfaa,
...(type !== 'GYM' _tta: this.tta(this.getCookie('39ce7')),
? { ...(type !== 'GYM'
submittedProblemCode: contestId + problemId, ? {
sourceCodeConfirmed: true, submittedProblemCode: contestId + problemId,
} sourceCodeConfirmed: true,
: { }
submittedProblemIndex: problemId, : {
}), submittedProblemIndex: problemId,
}); }),
})
.set('Referer', referer);
if (error) { if (error) {
end({ end({