From 3d1cd02f27518f1a04374c7c8320cd5d82ede6e9 Mon Sep 17 00:00:00 2001 From: Minteck Date: Thu, 23 Feb 2023 19:34:56 +0100 Subject: Updated 40 files, added 37 files, deleted 1103 files and renamed 3905 files (automated) --- .../node_modules/pronote-api/src/server/index.js | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 includes/external/school/node_modules/pronote-api/src/server/index.js (limited to 'includes/external/school/node_modules/pronote-api/src/server/index.js') diff --git a/includes/external/school/node_modules/pronote-api/src/server/index.js b/includes/external/school/node_modules/pronote-api/src/server/index.js new file mode 100644 index 0000000..1693e1c --- /dev/null +++ b/includes/external/school/node_modules/pronote-api/src/server/index.js @@ -0,0 +1,47 @@ +const { graphql } = require('graphql'); + +const http = require('./http'); +const context = require('./context'); +const getSchemas = require('./schemas'); +const { login, logout, getSession } = require('./auth'); + +async function start(host, port) +{ + const schemas = await getSchemas(); + + await http(host, port, { + graphql: ({ query, variables }, token) => handle(token, schemas, query, context, variables), + login: params => login(params), + logout: (_, token) => logout(token) + }); +} + +async function handle(token, schemas, query, context, variables) +{ + if (!token) { + throw { + http: 401, + message: 'Missing \'Token\' header' + }; + } + + if (!query) { + throw { + http: 400, + message: 'Missing \'query\' field or \'Content-Type: application/json\' header' + }; + } + + const session = getSession(token); + if (!session) { + throw { + http: 401, + message: 'Unknown session token' + }; + } + + const schema = schemas[session.type.name]; + return await graphql(schema, query, context(session), null, variables); +} + +module.exports = start; -- cgit