From 2c4ae43e688a9873e86211ea0e7aeb9ba770dd77 Mon Sep 17 00:00:00 2001 From: Minteck Date: Tue, 18 Oct 2022 08:59:09 +0200 Subject: Update --- alarm/node_modules/pronote-api/src/server/index.js | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 alarm/node_modules/pronote-api/src/server/index.js (limited to 'alarm/node_modules/pronote-api/src/server/index.js') diff --git a/alarm/node_modules/pronote-api/src/server/index.js b/alarm/node_modules/pronote-api/src/server/index.js new file mode 100644 index 0000000..1693e1c --- /dev/null +++ b/alarm/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