summaryrefslogtreecommitdiff
path: root/includes/external/school/node_modules/pronote-api/src/auth.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/school/node_modules/pronote-api/src/auth.js')
-rw-r--r--includes/external/school/node_modules/pronote-api/src/auth.js96
1 files changed, 0 insertions, 96 deletions
diff --git a/includes/external/school/node_modules/pronote-api/src/auth.js b/includes/external/school/node_modules/pronote-api/src/auth.js
deleted file mode 100644
index b19b97e..0000000
--- a/includes/external/school/node_modules/pronote-api/src/auth.js
+++ /dev/null
@@ -1,96 +0,0 @@
-const errors = require('./errors');
-const cas = require('./cas');
-const { decipher, getLoginKey } = require('./cipher');
-const getAccountType = require('./accounts');
-const PronoteSession = require('./session');
-
-const getParams = require('./fetch/pronote/params');
-const { getId, getAuthKey } = require('./fetch/pronote/auth');
-const getUser = require('./fetch/pronote/user');
-
-function loginFor(type)
-{
- return (url, username, password, cas = 'none') => login(url, username, password, cas, getAccountType(type));
-}
-
-async function login(url, username, password, cas, account)
-{
- const server = getServer(url);
- const start = await getStart(server, username, password, cas, account);
- const session = new PronoteSession({
- serverURL: server,
- sessionID: start.h,
-
- type: account,
-
- disableAES: !!start.sCrA,
- disableCompress: !!start.sCoA,
-
- keyModulus: start.MR,
- keyExponent: start.ER
- })
-
- session.params = await getParams(session);
- if (!session.params) {
- throw errors.WRONG_CREDENTIALS.drop();
- }
- if (cas === 'none') {
- await auth(session, username, password, false);
- } else {
- await auth(session, start.e, start.f, true);
- }
- session.user = await getUser(session);
-
- return session;
-}
-
-function getServer(url)
-{
- if (url.endsWith('.html')) {
- return url.substring(0, url.lastIndexOf('/') + 1);
- }
-
- if (!url.endsWith('/')) {
- url += '/';
- }
-
- return url;
-}
-
-async function getStart(url, username, password, casName, type)
-{
- if (casName === 'names' || casName === 'getCAS' || !cas[casName]) {
- throw errors.UNKNOWN_CAS.drop(casName);
- }
-
- const account = typeof type === 'string' ? getAccountType(type) : type;
- return await cas[casName](url, account, username, password);
-}
-
-async function auth(session, username, password, fromCas)
-{
- const id = await getId(session, username, fromCas);
- const key = getLoginKey(username, password, id.scramble, fromCas);
-
- let challenge;
- try {
- challenge = decipher(session, id.challenge, { scrambled: true, key });
- } catch (e) {
- throw errors.WRONG_CREDENTIALS.drop();
- }
-
- const userKey = await getAuthKey(session, challenge, key);
- if (!userKey) {
- throw errors.WRONG_CREDENTIALS.drop();
- }
-
- session.aesKey = decipher(session, userKey, { key, asBytes: true });
-}
-
-module.exports = {
- loginStudent: loginFor('student'),
- loginParent: loginFor('parent'),
-
- getStart,
- auth
-};