Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cokoapps/server
  • jgutix/server
2 results
Show changes
Commits on Source (4)
......@@ -2,6 +2,19 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.0.2](https://gitlab.coko.foundation/cokoapps/server/compare/v0.0.1...v0.0.2) (2020-03-28)
### Features
* bundle pubsweet cli with package ([0c4b206](https://gitlab.coko.foundation/cokoapps/server/commit/0c4b2060a6f453a12408bdb786967b6d709c2220))
* **server:** add cron support ([dcd352a](https://gitlab.coko.foundation/cokoapps/server/commit/dcd352ade1cc96583a1d86366fcc0a21aee77961))
### Bug Fixes
* **server:** resolve circular dependencies & make passport auth work ([5dffd0f](https://gitlab.coko.foundation/cokoapps/server/commit/5dffd0fbd65753181b4ac171cac40dd1b10df234))
### 0.0.1 (2020-03-27)
......
{
"name": "@coko/server",
"version": "0.0.1",
"version": "0.0.2",
"description": "A tweaked version of pubsweet-server for use by Coko's projects",
"main": "src/index.js",
"scripts": {
......@@ -23,16 +23,21 @@
"access": "public"
},
"dependencies": {
"@pubsweet/errors": "^2.0.32",
"@pubsweet/logger": "^0.2.42",
"@pubsweet/models": "^0.3.7",
"apollo-server-express": "^2.11.0",
"body-parser": "^1.19.0",
"config": "^3.3.1",
"cookie-parser": "^1.4.5",
"express": "^4.17.1",
"helmet": "^3.22.0",
"http-status-codes": "^1.4.0",
"lodash": "^4.17.15",
"morgan": "^1.10.0",
"node-cron": "^2.0.3",
"passport": "^0.4.1",
"pubsweet": "^5.1.10",
"pubsweet-server": "^13.9.4",
"waait": "^1.0.5"
},
......
/* eslint-disable no-param-reassign */
/* eslint-disable global-require, no-param-reassign */
const path = require('path')
......@@ -13,20 +13,15 @@ const passport = require('passport')
const wait = require('waait')
const logger = require('@pubsweet/logger')
const models = require('@pubsweet/models')
const gqlApi = require('pubsweet-server/src/graphql/api')
const index = require('pubsweet-server/src/routes/index')
const api = require('pubsweet-server/src/routes/api')
const registerComponents = require('pubsweet-server/src/register-components')
const authsome = require('pubsweet-server/src/helpers/authsome')
const authentication = require('pubsweet-server/src/authentication')
const { startJobQueue, stopJobQueue } = require('pubsweet-server/src/jobs')
const {
addSubscriptions,
} = require('pubsweet-server/src/graphql/subscriptions')
const api = require('pubsweet-server/src/routes/api')
const index = require('pubsweet-server/src/routes/index')
const configureApp = app => {
const models = require('@pubsweet/models')
const authsome = require('pubsweet-server/src/helpers/authsome')
app.locals.models = models
app.use(bodyParser.json({ limit: '50mb' }))
......@@ -62,6 +57,8 @@ const configureApp = app => {
// Register passport authentication strategies
app.use(passport.initialize())
const authentication = require('pubsweet-server/src/authentication')
passport.use('bearer', authentication.strategies.bearer)
passport.use('anonymous', authentication.strategies.anonymous)
passport.use('local', authentication.strategies.local)
......@@ -72,12 +69,14 @@ const configureApp = app => {
registerComponents(app)
app.use('/api', api) // REST API
const gqlApi = require('./graphqlApi')
gqlApi(app) // GraphQL API
app.use('/', index) // Serve the index page for front end
app.use((err, req, res, next) => {
// development error handler, will print stacktrace
// Development error handler, will print stacktrace
if (app.get('env') === 'development' || app.get('env') === 'test') {
logger.error(err)
logger.error(err.stack)
......@@ -104,17 +103,25 @@ const configureApp = app => {
.json({ message: err.message })
})
if (config.has('pubsweet-server.cron.path')) {
/* eslint-disable-next-line import/no-dynamic-require */
require(config.get('pubsweet-server.cron.path'))
}
// Actions to perform when the HTTP server starts listening
app.onListen = async server => {
// Add GraphQL subscriptions
addSubscriptions(server)
const {
addSubscriptions,
} = require('pubsweet-server/src/graphql/subscriptions')
addSubscriptions(server) // Add GraphQL subscriptions
// Manage job queue
await startJobQueue()
const { startJobQueue } = require('pubsweet-server/src/jobs')
await startJobQueue() // Manage job queue
}
// Actions to perform when the server closes
app.onClose = async () => {
const { stopJobQueue } = require('pubsweet-server/src/jobs')
await stopJobQueue()
return wait(500)
}
......
const { ApolloServer } = require('apollo-server-express')
const isEmpty = require('lodash/isEmpty')
const logger = require('@pubsweet/logger')
const errors = require('@pubsweet/errors')
const config = require('config')
const schema = require('pubsweet-server/src/graphql/schema')
const connectors = require('pubsweet-server/src/connectors')
const loaders = require('pubsweet-server/src/graphql/loaders')
const helpers = require('pubsweet-server/src/helpers/authorization')
const hostname = config.has('pubsweet-server.hostname')
? config.get('pubsweet-server.hostname')
: 'localhost'
const extraApolloConfig = config.has('pubsweet-server.apollo')
? config.get('pubsweet-server.apollo')
: {}
const api = app => {
app.use(
'/graphql',
app.locals.passport.authenticate(['bearer', 'anonymous'], {
session: false,
}),
)
const server = new ApolloServer({
schema,
context: ({ req, res }) => ({
helpers,
connectors,
user: req.user,
loaders: loaders(),
}),
formatError: err => {
const error = isEmpty(err.originalError) ? err : err.originalError
logger.error(error.message, { error })
const isPubsweetDefinedError = Object.values(errors).some(
pubsweetError => error instanceof pubsweetError,
)
// err is always a GraphQLError which should be passed to the client
if (!isEmpty(err.originalError) && !isPubsweetDefinedError)
return {
name: 'Server Error',
message: 'Something went wrong! Please contact your administrator',
}
return {
name: error.name || 'GraphQLError',
message: error.message,
extensions: {
code: err.extensions.code,
},
}
},
playground: {
subscriptionEndpoint: `ws://${hostname}:3000/subscriptions`,
},
...extraApolloConfig,
})
server.applyMiddleware({ app })
}
module.exports = api
const cron = require('node-cron')
const authentication = require('pubsweet-server/src/authentication')
const app = require('./app')
......@@ -6,5 +8,6 @@ const createJWT = authentication.token.create
module.exports = {
app,
cron,
createJWT,
}
This diff is collapsed.