/
index.mjs
63 lines (60 loc) · 1.71 KB
/
index.mjs
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
import puppeteer from 'puppeteer';
const Headers = {
'x-hb2023-reviewer': '1'
};
const url = path => `http://[::1]:8082${path}`;
const pendingIds = new Promise(async (resolve, reject) => {
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
await page.setExtraHTTPHeaders({ ...Headers });
let responseResolver;
const responseResolved = new Promise(r => { responseResolver = r; });
page.on('response', async response => {
if(response.status() !== 200) {
throw new Error(await response.text());
}
resolve(JSON.parse(await response.text()));
responseResolver();
})
await page.goto(url('/vpn/review/pending'));
await responseResolved;
} catch(e) {
reject(e);
} finally {
await browser.close();
}
});
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.setDefaultTimeout(2000);
page.setDefaultNavigationTimeout(2000);
page.on('dialog', async dialog => {
await dialog.dismiss();
});
await page.setExtraHTTPHeaders({ ...Headers });
for(const id of await pendingIds) {
console.log(`handling application #${id}`);
try {
await page.goto(url(`/vpn/application/${id}`));
console.log(`[${id}] wait 1s for user XSS code`);
await page.waitForNavigation({timeout: 1000});
} catch(e) {
if (e.name === 'TimeoutError') {
console.log(`[${id}] caught TimeoutError, means no navigation detected, ignoring`);
} else {
console.error(e);
}
}
fetch(url('/vpn/review'), {
method: 'post',
body: `action=reject&id=${id}`,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
...Headers
}
}).then(() => console.log(`[${id}] reject sent anyway`));
}
await browser.close();
})();