Skip to content

Commit

Permalink
fix(init): move init into their respective modules
Browse files Browse the repository at this point in the history
BREAKING CHANGE: when `require` ing `hoodie-server` that object exposed an init
method before, that could be passed a custom `env_config`. This method is gone.
You can only do `require('hoodie-server')(options, cb)` anymore, because hook
and plugin initialization now happens on the env_config object that can't be
passed from the outside.
  • Loading branch information
boennemann committed Oct 30, 2015
1 parent b0ae6be commit 7921ce5
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 55 deletions.
4 changes: 4 additions & 0 deletions lib/config.js
Expand Up @@ -80,6 +80,10 @@ module.exports = function (options) {
configStore.set('dbAuth', config.db.auth)
}

if (!config.db.auth) {
throw new Error('Authentication details missing from database URL')
}

if (!config.db.password) {
config.db.password = config.db.auth.split(':')[1]
}
Expand Down
25 changes: 24 additions & 1 deletion lib/hapi/index.js
@@ -1,6 +1,15 @@
var url = require('url')

var _ = require('lodash')

var plugins = [require('inert'), require('h2o2')]

module.exports = function (env_config) {
var defaultOpts = {
couchdb: url.format(_.omit(env_config.db, 'auth')),
prefix: '/hoodie/account'
}

return plugins.concat([
require('./api'),
require('./directories'),
Expand All @@ -13,5 +22,19 @@ module.exports = function (env_config) {
app: env_config
}
}
}))
}), [{
register: require('hapi-couchdb-store/lib/routes/couchdb-proxy'),
options: _.defaults({prefix: '/hoodie/store'}, defaultOpts)
}, {
register: require('hapi-couchdb-account/lib/routes/session'),
options: defaultOpts
}, {
register: require('hapi-couchdb-account/lib/routes/account'),
options: defaultOpts
}],
_(env_config)
.values()
.pluck('hooks.hapi')
.compact()
.value())
}
70 changes: 22 additions & 48 deletions lib/index.js
@@ -1,70 +1,44 @@
var url = require('url')

var _ = require('lodash')
var async = require('async')
var hapi = require('hapi')
var log = require('npmlog')

var exports = module.exports = function (options, callback) {
module.exports = function (options, callback) {
'use strict'

var env_config = require('./config')(options)

log.level = options.loglevel || 'warn'

if (!env_config.db.auth) {
return callback(new Error('Authentication details missing from database URL'))
}
var env_config

exports.init(env_config, callback)
}

exports.init = function (env_config, callback) {
var async = require('async')
var hapi = require('hapi')
try {
env_config = require('./config')(options)
} catch (err) {
return callback(err)
}

var options = {}
_.set(options, 'connections.routes.payload.maxBytes', 1048576 * 10) // 10 MB
var serverOptions = {}
_.set(serverOptions, 'connections.routes.payload.maxBytes', 1048576 * 10) // 10 MB

var server = new hapi.Server(options)
var server = new hapi.Server(serverOptions)

async.applyEachSeries([
require('./database/start'),
require('./database/install'),
require('./bundle'),
require('./plugins'),
async.apply(exports.configureServer, server)
require('./plugins')
], env_config, function (err) {
if (err) return callback(err)

callback(null, server, env_config)
})
}

exports.configureServer = function (server, env_config, callback) {
server.connection({
port: env_config.app.port
})
server.connection({
port: env_config.app.port
})

log.silly('hapi', 'Registering internal plugins')
var defaultOpts = {
couchdb: url.format(_.omit(env_config.db, 'auth')),
prefix: '/hoodie/account'
}

var hoodieClient = [{
register: require('hapi-couchdb-store/lib/routes/couchdb-proxy'),
options: _.defaults({prefix: '/hoodie/store'}, defaultOpts)
}, {
register: require('hapi-couchdb-account/lib/routes/session'),
options: defaultOpts
}, {
register: require('hapi-couchdb-account/lib/routes/account'),
options: defaultOpts
}]

server.register(require('./hapi')(env_config).concat(hoodieClient), function (err) {
if (err) return callback(err)
log.silly('hapi', 'Registering internal plugins')
server.register(require('./hapi')(env_config), function (err) {
if (err) return callback(err)

log.verbose('hapi', 'Registerd internal plugins')
server.register(_.compact(_.pluck(_.values(env_config.plugins), 'hooks.hapi')), callback)
log.verbose('hapi', 'Registerd internal plugins')
callback(null, server, env_config)
})
})
}
11 changes: 5 additions & 6 deletions test/integration/security.js
Expand Up @@ -8,8 +8,7 @@ var rimraf = require('rimraf')
var tap = require('tap')
var test = tap.test

var app = require('../../lib/index')
var config = require('../../lib/config')
var app = require('../../lib')

var startServerTest = require('./lib/start-server-test')

Expand Down Expand Up @@ -37,16 +36,16 @@ startServerTest(test, 'block _all_dbs', function (t, env_config, end) {

t.test('check config dbs are private to admin', function (tt) {
var projectDir = path.resolve(__dirname, './lib/fixtures/project1')
var env_config = config({
var options = {
inMemory: true,
id: 'hoodie-test-fixture',
path: projectDir,
adminPassword: 'testing'
})
}

async.waterfall([
async.apply(rimraf, env_config.paths.data),
async.apply(app.init, env_config),
async.apply(rimraf, path.join(projectDir, 'data')),
async.apply(app, options),
function (server, env_config, cb) {
server.start(cb)
},
Expand Down

0 comments on commit 7921ce5

Please sign in to comment.