diff options
author | Minteck <contact@minteck.org> | 2023-02-23 19:34:56 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2023-02-23 19:34:56 +0100 |
commit | 3d1cd02f27518f1a04374c7c8320cd5d82ede6e9 (patch) | |
tree | 75be5fba4368472fb11c8015aee026b2b9a71888 /includes/external/school/node_modules/pronote-api/src/server/index.js | |
parent | 8cc1f13c17fa2fb5a4410542d39e650e02945634 (diff) | |
download | pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.gz pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.bz2 pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.zip |
Updated 40 files, added 37 files, deleted 1103 files and renamed 3905 files (automated)
Diffstat (limited to 'includes/external/school/node_modules/pronote-api/src/server/index.js')
-rw-r--r-- | includes/external/school/node_modules/pronote-api/src/server/index.js | 47 |
1 files changed, 47 insertions, 0 deletions
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; |