Skip to content
Snippets Groups Projects
graphqlSchema.js 1.32 KiB
Newer Older
const config = require('config')
const isEmpty = require('lodash/isEmpty')
const { applyMiddleware } = require('graphql-middleware')
const { shield } = require('graphql-shield')

const logger = require('@pubsweet/logger')
const schema = require('pubsweet-server/src/graphql/schema')

const emailMiddleware = require('./middleware/email')

const baseMessage = 'Coko server =>'

const logRegistration = name =>
  logger.info(`${baseMessage} Middleware: Registered ${name} middleware`)

const middleware = []
console.log('') // eslint-disable-line no-console
logger.info(`${baseMessage} Registering graphql middleware...`)

/**
 * Authorization middleware
 */
const permissions = config.has('permissions') && config.get('permissions')
const isProduction = process.env.NODE_ENV === 'production'
if (!isEmpty(permissions)) {
  const authorizationMiddleware = shield(permissions, { debug: !isProduction })
  middleware.push(authorizationMiddleware)
  logRegistration('authorization')
/**
 * Email middleware
 */

const emailConfig =
  config.has('emailMiddleware') && config.get('emailMiddleware')

if (!isEmpty(emailConfig)) {
  middleware.push(emailMiddleware)
  logRegistration('email')
}

console.log('') // eslint-disable-line no-console

const schemaWithMiddleWare = applyMiddleware(schema, ...middleware)

module.exports = schemaWithMiddleWare