summaryrefslogtreecommitdiff
path: root/alarm/node_modules/pronote-api/src/server/context.js
diff options
context:
space:
mode:
Diffstat (limited to 'alarm/node_modules/pronote-api/src/server/context.js')
-rw-r--r--alarm/node_modules/pronote-api/src/server/context.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/alarm/node_modules/pronote-api/src/server/context.js b/alarm/node_modules/pronote-api/src/server/context.js
new file mode 100644
index 0000000..9f34442
--- /dev/null
+++ b/alarm/node_modules/pronote-api/src/server/context.js
@@ -0,0 +1,73 @@
+function common(session) {
+ return {
+ params: () => session.params,
+ user: () => session.user,
+
+ keepAlive: async () => {
+ await session.keepAlive();
+ return true;
+ },
+ logout: async () => {
+ await session.logout();
+ return true;
+ },
+
+ setKeepAlive: async ({ enabled }) => {
+ await session.setKeepAlive(enabled);
+ return enabled;
+ }
+ };
+}
+
+function student(session) {
+ return {
+ timetable: ({ from, to }) => session.timetable(from, to),
+ marks: ({ period }) => session.marks(period),
+ evaluations: ({ period }) => session.evaluations(period),
+ absences: ({ period, from, to }) => session.absences(period, from, to),
+ infos: () => session.infos(),
+ contents: ({ from, to }) => session.contents(from, to),
+ homeworks: ({ from, to }) => session.homeworks(from, to),
+ menu: ({ from, to }) => session.menu(from, to),
+ files: () => session.files()
+ };
+}
+
+function parent(session) {
+ function getStudent(student) {
+ for (const s of session.user.students) {
+ if (s.id === student || s.name === student) {
+ return s;
+ }
+ }
+
+ return null;
+ }
+
+ return {
+ timetable: ({ student, from, to }) => session.timetable(getStudent(student), from, to),
+ marks: ({ student, period }) => session.marks(getStudent(student), period),
+ evaluations: ({ student, period }) => session.evaluations(getStudent(student), period),
+ absences: ({ student, period, from, to }) => session.absences(getStudent(student), period, from, to),
+ infos: ({ student }) => session.infos(getStudent(student)),
+ contents: ({ student, from, to }) => session.contents(getStudent(student), from, to),
+ homeworks: ({ student, from, to }) => session.homeworks(getStudent(student), from, to),
+ menu: ({ student, from, to }) => session.menu(getStudent(student), from, to),
+ files: ({ student }) => session.files(getStudent(student))
+ };
+}
+
+function getContext(session) {
+ const result = common(session);
+
+ switch (session.type.name) {
+ case 'student':
+ return { ...result, ...student(session) };
+ case 'parent':
+ return { ...result, ...parent(session) };
+ default:
+ return result;
+ }
+}
+
+module.exports = getContext;