From 55ef7cd782a95d059bbda5bd10f3770c2a710d97 Mon Sep 17 00:00:00 2001 From: Samuel Galson <samgalson@gmail.com> Date: Fri, 22 Sep 2017 11:37:57 +0100 Subject: [PATCH] break apart validations --- README.md | 1 + src/index.js | 9 +++------ src/setup-db/index.js | 10 ++++++---- src/setup-db/setup-db.js | 14 ++++---------- src/validations.js | 18 ++++++++++-------- 5 files changed, 24 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index cc5a4ea3d..fa6ff0710 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ It can be called without arguments, in which case it will take its configuration username: 'xxxxxx', password: 'pppppp', email: 'email@example.com', + clobber: false // overwrite existing db (optional) collection: 'collection_title' // (optional) } } diff --git a/src/index.js b/src/index.js index 270f91c9b..b88863357 100644 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,11 @@ -const logger = require('@pubsweet/logger') -const winston = require('winston') -const { validateConfig } = require('./validations') +const config = require('config') +const { validateServerConfig } = require('./validations') process.env.PUBSWEET_BACKEND_SILENT = true -logger.configure(winston) -validateConfig() +validateServerConfig(config.get('pubsweet-server')) module.exports = { setupDb: require('./setup-db/'), addUser: require('./add-user/') } - diff --git a/src/setup-db/index.js b/src/setup-db/index.js index e799e0b92..362a1bd88 100644 --- a/src/setup-db/index.js +++ b/src/setup-db/index.js @@ -1,11 +1,12 @@ const logger = require('@pubsweet/logger') -const path = require('path') +const _ = require('lodash/fp') const config = require('config') const dbExists = require('../helpers/db-exists') const generateEnv = require('./generate-env') const setupDb = require('./setup-db') const dbPath = require('../helpers/db-path') const PouchDB = require('pouchdb') +const { validateSetupDbConfig } = require('../validations') const checkNoDb = async () => { const exists = await dbExists() @@ -21,12 +22,13 @@ const checkNoDb = async () => { logger.info('Removed DB at', dbPath) } -module.exports = async () => { - const setupDbConfig = config.get('dbManager') +module.exports = async (setupDbConfig) => { + const mergedDbConfig = _.merge(config.get('dbManager'), setupDbConfig) + validateSetupDbConfig(mergedDbConfig) try { await checkNoDb() generateEnv() - return await setupDb(setupDbConfig) + return await setupDb(mergedDbConfig) } catch (e) { logger.error('Database setup failed') throw e diff --git a/src/setup-db/setup-db.js b/src/setup-db/setup-db.js index f16435c12..e6e3876e8 100644 --- a/src/setup-db/setup-db.js +++ b/src/setup-db/setup-db.js @@ -1,17 +1,12 @@ const logger = require('@pubsweet/logger') -const config = require('config') const _ = require('lodash/fp') const createAdminUser = async (userData) => { const User = require('pubsweet-server/src/models/User') logger.info('Creating the admin user') - const user = new User({ - username: userData.username, - email: userData.email, - password: userData.password, - admin: true - }) + userData.admin = true + const user = new User(userData) await user.save() logger.info('Saved admin user: ', user.username) @@ -33,10 +28,9 @@ const createCollection = async (title, user) => { return collection } -module.exports = async (setupDbConfig) => { - const mergedDbConfig = _.merge({}, config.get('dbManager'), setupDbConfig) +module.exports = async (mergedDbConfig) => { const collectionTitle = mergedDbConfig.collection - const userData = _.pick(['username','password','admin', 'email'], mergedDbConfig) + const userData = _.pick(['username', 'password', 'admin', 'email'], mergedDbConfig) logger.info('Setting up the database') const user = await createAdminUser(userData) const collection = collectionTitle ? await createCollection(collectionTitle, user) : null diff --git a/src/validations.js b/src/validations.js index a878ea82b..c0b8aaa83 100644 --- a/src/validations.js +++ b/src/validations.js @@ -1,5 +1,4 @@ const Joi = require('joi') -const config = require('config') const schemas = require('pubsweet-server/src/models/validations') const _ = require('lodash/fp') @@ -11,19 +10,22 @@ const userSchema = Joi.object({ }) const setupDbSchema = userSchema.keys({ + clobber: Joi.boolean().optional(), collection: _.get('collection.title', schemas) || Joi.string().optional() }) -const schema = Joi.object({ - dbManager: setupDbSchema.required(), - 'pubsweet-server': Joi.object({ - dbPath: Joi.string().required() - }).required() +const serverSchema = Joi.object({ + dbPath: Joi.string().required() }) module.exports = { - validateConfig: function validateConfig () { - const result = Joi.validate(config, schema, { allowUnknown: true }) + validateServerConfig: function validateServerConfig (serverConfig) { + const result = Joi.validate(serverConfig, serverSchema, { allowUnknown: true }) + if (result.error) throw result.error + return null + }, + validateSetupDbConfig: function validateSetupDbConfig (setupDbConfig) { + const result = Joi.validate(setupDbConfig, setupDbSchema, { allowUnknown: true }) if (result.error) throw result.error return null }, -- GitLab