Skip to content

Instantly share code, notes, and snippets.

@58bits
Created September 18, 2015 03:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 58bits/8567abcfc12903adb4f9 to your computer and use it in GitHub Desktop.
Save 58bits/8567abcfc12903adb4f9 to your computer and use it in GitHub Desktop.
Server Extensions for Plugin
'use strict';
var Hoek = require('hoek');
var Util = require('util');
var Log = require('./lib/logger');
var Cache = require('./lib/cache');
var Mailer = require('./lib/mailer');
var Db = require('./lib/dbx');
var Storage = require('./lib/storage');
var Auth = require('./lib/auth');
var Cryptish = require ('cryptish');
exports.register = function (server, options, next) {
var config = server.settings.app.config.api.settings;
server.bind({
config: config
});
Cryptish.init(config.crypto);
Log.init(server, config.logger);
Mailer.init(config);
Db.init(config.database);
Storage.init(config);
var cache = server.cache({
segment: config.cache.segment,
expiresIn: config.cache.expiresIn
});
Cache.init(cache);
//Register plugins and bootstrap the app
server.register([
{
register: require('good'),
options: config.logger.options
},
require('hapi-auth-signature'),
require('./services/users'),
require('./services/stories'),
require('./services/storyItems'),
require('./services/keys'),
require('./services/invitations')
], function (err) {
Hoek.assert(!err, 'Failed loading plugin: ' + err);
server.auth.strategy('hmac', 'signature', {
validateFunc: Auth.verifySignature
});
server.route(require('./routes').endpoints);
next();
});
// Works
//server.after(function (server, next) {
// server.log(['api', 'info'], 'API server running on ' + server.settings.app.config.api.server.uri);
// next();
//});
// Works
server.ext('onPreStart', function (server, next) {
server.log(['api', 'info'], 'API server running on ' + server.settings.app.config.api.server.uri);
next();
});
// Does not work
server.ext('onRequest', function (request, reply) {
console.log('onRequest called from plugin');
return reply.continue();
});
// Does not work
server.on('request', function (request, event, tags) {
console.log('server request called');
Log.trace(request);
Log.trace(request.headers);
});
// Does not work
server.on('request-internal', function (request, event, tags) {
console.log('server-internal request called');
var keys = Object.keys(tags);
if (Hoek.intersect(config.logger.level, keys).length > 0) {
server.log(tags, event);
}
});
};
exports.register.attributes = {
pkg: require('./package.json')
};
'use strict';
// Load modules
var Hapi = require('hapi');
var Glue = require('glue');
var Config = require('./config');
// Declare internals
var internals = {};
Config.api.server.uri = (Config.api.settings.tls ? 'https://' : 'http://') + Config.api.server.host + ':' + Config.api.server.port;
Config.web.server.uri = (Config.web.settings.tls ? 'https://' : 'http://') + Config.web.server.host + ':' + Config.web.server.port;
var manifest = {
server: {
app: {
config: Config
},
cache: Config.cache
},
connections: [
{
host: Config.api.server.host,
port: Config.api.server.port,
uri: Config.api.server.uri,
labels: Config.api.server.labels
},
{
host: Config.web.server.host,
port: Config.web.server.port,
uri: Config.web.server.uri,
labels: Config.web.server.labels
}
],
plugins: [
{'./api': [
{
select: 'api',
routes: { prefix: '/api/v1'}
}
]},
{'./web': [
{
select: 'web'
}
]}
]
};
Glue.compose(manifest, { relativeTo: __dirname }, function (err, server) {
if(err) {
throw err;
}
// Works
server.ext('onRequest', function (request, reply) {
console.log('onRequest called');
return reply.continue();
});
server.start(function () {
// server running on port 80
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment