-
Notifications
You must be signed in to change notification settings - Fork 1
/
get_submission_token.js
65 lines (43 loc) · 1.44 KB
/
get_submission_token.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'use strict'
const request = require('request').defaults({jar:true});
const options = require('./http_options');
const Promise = require('bluebird');
const cheerio = require('cheerio');
function get_submission_token(problemId){
return function(){
return new Promise(function(resolve,reject){
let http_options=options();
http_options.url='http://codeforces.com/problemset/problem/'+problemId.substring(0,problemId.length-1)+'/'+problemId[problemId.length-1];
http_options.method='GET';
request(http_options,function(err,res,body){
let $=cheerio.load(body);
if(err){
return reject(err);
}
if(res.statusCode!='200'){
return reject(new Error('problemset not found.'))
}
let csrf_token,uc,cc,pc;
$('meta').map(function(n,el){
if($(el).attr('name')=='uc'){
uc=$(el).attr('content');
}
if($(el).attr('name')=='cc'){
cc=$(el).attr('content');
}
if($(el).attr('name')=='pc'){
pc=$(el).attr('content');
}
if($(el).attr('name')=='X-Csrf-Token'){
csrf_token=$(el).attr('content');
if(csrf_token==undefined){
return reject(new Error('csrf_token not found.'));
}
}
});
resolve({csrf_token:csrf_token,uc:uc,cc:cc,pc:pc});
})
});
}
}
module.exports=get_submission_token;