summaryrefslogtreecommitdiff
path: root/school/node_modules/pronote-api/src/request.js
blob: 06ec41126a1ac1e79ff858793674978b135fc4f0 (plain)
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
const { cipher, decipher } = require('./cipher');
const errors = require('./errors');
const http = require('./http');

async function request(session, name, content = {})
{
    session.request += 2;

    const disableIV = session.request === 1;

    const order = cipher(session, session.request, { disableIV });
    const url = `${session.server}appelfonction/${session.type.id}/${session.id}/${order}`;

    let data = content;
    if (!session.disableAES) {
        data = cipher(session, JSON.stringify(content), { compress: true, disableIV });
    }

    const result = await http({
        url,
        method: 'POST',
        body: {
            nom: name,
            numeroOrdre: order,
            session: session.id,
            donneesSec: data
        }
    });

    if (result.Erreur) {
        const { Titre, Message } = result.Erreur;

        if (Titre.startsWith('La page a expiré !')) {
            throw errors.SESSION_EXPIRED.drop();
        }
        if (Message.startsWith('Vous avez dépassé le nombre')) {
            throw errors.RATE_LIMITED.drop();
        }

        throw errors.PRONOTE.drop({ title: Titre, message: Message });
    }

    if (!session.disableAES) {
        return JSON.parse(decipher(session, result.donneesSec, { compress: true }));
    }

    return result.donneesSec;
}

module.exports = request;