diff --git a/lib/new-admin/admin-server.js b/lib/new-admin/admin-server.js index 05d1e377..b4c88651 100644 --- a/lib/new-admin/admin-server.js +++ b/lib/new-admin/admin-server.js @@ -16,12 +16,11 @@ const options = require('../options') const users = require('../users') const logger = require('../logger') -const session = require('./middlewares/session') const { AuthDirective } = require('./graphql/directives') const { typeDefs, resolvers } = require('./graphql/schema') const computeSchema = require('../compute-schema') -const cleanUserSessions = require('./middlewares/cleanUserSessions') const { USER_SESSIONS_CLEAR_INTERVAL } = require('../constants') +const { session, cleanUserSessions, buildApolloContext } = require('./middlewares') const devMode = require('minimist')(process.argv.slice(2)).dev const idPhotoCardBasedir = _.get('idPhotoCardDir', options) @@ -59,27 +58,7 @@ const apolloServer = new ApolloServer({ logger.error(error) return error }, - context: async ({ req, res }) => { - if (!req.session.user) return { req } - - const user = await users.verifyAndUpdateUser( - req.session.user.id, - req.headers['user-agent'] || 'Unknown', - req.ip - ) - if (!user || !user.enabled) throw new AuthenticationError('Authentication failed') - - req.session.ua = req.headers['user-agent'] || 'Unknown' - req.session.ipAddress = req.ip - req.session.lastUsed = new Date(Date.now()).toISOString() - req.session.user.id = user.id - req.session.user.role = user.role - - res.set('role', user.role) - res.set('Access-Control-Expose-Headers', 'role') - - return { req } - } + context: async (obj) => buildApolloContext(obj) }) apolloServer.applyMiddleware({ diff --git a/lib/new-admin/middlewares/context.js b/lib/new-admin/middlewares/context.js new file mode 100644 index 00000000..db4687d2 --- /dev/null +++ b/lib/new-admin/middlewares/context.js @@ -0,0 +1,25 @@ +const users = require('../../users') + +const buildApolloContext = async ({ req, res }) => { + if (!req.session.user) return { req } + + const user = await users.verifyAndUpdateUser( + req.session.user.id, + req.headers['user-agent'] || 'Unknown', + req.ip + ) + if (!user || !user.enabled) throw new AuthenticationError('Authentication failed') + + req.session.ua = req.headers['user-agent'] || 'Unknown' + req.session.ipAddress = req.ip + req.session.lastUsed = new Date(Date.now()).toISOString() + req.session.user.id = user.id + req.session.user.role = user.role + + res.set('role', user.role) + res.set('Access-Control-Expose-Headers', 'role') + + return { req } +} + +module.exports = buildApolloContext diff --git a/lib/new-admin/middlewares/index.js b/lib/new-admin/middlewares/index.js new file mode 100644 index 00000000..cedba31c --- /dev/null +++ b/lib/new-admin/middlewares/index.js @@ -0,0 +1,9 @@ +const cleanUserSessions = require('./cleanUserSessions') +const buildApolloContext = require('./context') +const session = require('./session') + +module.exports = { + cleanUserSessions, + buildApolloContext, + session +}