summaryrefslogtreecommitdiff
path: root/school/node_modules/pronote-api/src/request.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
committerMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
commit99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch)
treee663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/pronote-api/src/request.js
parent9871b03912fc28ad38b4037ebf26a78aa937baba (diff)
downloadpluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/pronote-api/src/request.js')
-rw-r--r--school/node_modules/pronote-api/src/request.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/school/node_modules/pronote-api/src/request.js b/school/node_modules/pronote-api/src/request.js
new file mode 100644
index 0000000..06ec411
--- /dev/null
+++ b/school/node_modules/pronote-api/src/request.js
@@ -0,0 +1,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;