Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- require('dotenv').config({ silent: true });
- const Hapi = require('hapi');
- const Assert = require('assert');
- // Expect minimum env variables
- Assert(process.env.NODE_ENV, 'expecting NODE_ENV');
- // Create a server with a host and port
- const server = new Hapi.Server({});
- server.connection({
- port: process.env.PORT || 3000,
- routes: {
- cors: true,
- },
- });
- const options = {
- sequelize: {
- host: process.env.SEQUELIZE_HOST,
- username: process.env.SEQUELIZE_USER,
- password: process.env.SEQUELIZE_PASSWORD,
- database: process.env.SEQUELIZE_DATABASE,
- },
- datadog: {
- name: require('./../package.json').name,
- },
- rollbar: {
- token: process.env.ROLLBAR_TOKEN,
- codeVersion: require('./../package.json').version,
- environment: require('./../package.json').name,
- },
- };
- // Load plugins for all environments
- const plugins = [
- { register: require('hapi-auth-jwt2') },
- { register: require('zeavo-hapi-jsonapi'), options: { links: false, meta: { version: require('../package.json').version } } },
- { register: require('zeavo-hapi-sequelize'), options: options.sequelize },
- { register: require('./routes') },
- ];
- // Avoid error/logging/metrics in test env
- if (process.env.NODE_ENV !== 'test') {
- plugins.push({ register: require('zeavo-hapi-good'), options: { name: require('../package.json').name } });
- }
- // Rollbar is optional unless in production. Always excluded from test
- if ((process.env.ROLLBAR_TOKEN || process.env.NODE_ENV === 'production') && process.env.NODE_ENV !== 'test') {
- plugins.push({ register: require('zeavo-hapi-rollbar'), options: options.rollbar });
- }
- // Load plugins for development or test environments only (hapi-swagger)
- if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
- plugins.push(
- { register: require('inert') },
- { register: require('vision') },
- { register: require('lout') },
- {
- register: require('hapi-swagger'),
- options: {
- info: {
- title: require('./../package').name + ' Documentation',
- version: require('./../package').version,
- },
- securityDefinitions: {
- Bearer: {
- type: 'apiKey',
- name: 'Authorization',
- in: 'header',
- },
- },
- },
- });
- }
- // Load plugins for production env only (datadog metrics)
- if (process.env.NODE_ENV === 'production') {
- plugins.push({ register: require('zeavo-hapi-bootstrap') });
- plugins.push({ register: require('zeavo-hapi-datadog'), options: options.datadog });
- }
- // Load plugins and start server
- server.register(plugins, (err) => {
- if (err) {
- throw err;
- }
- let key;
- let algorithm;
- if (process.env.NODE_ENV === 'production') {
- key = Buffer.from(server.plugins['zeavo-hapi-bootstrap'].jwt_public_key, 'base64');
- algorithm = ['RS256'];
- } else {
- Assert(process.env.JWT_KEY, 'expecting JWT_KEY');
- key = process.env.JWT_KEY;
- algorithm = ['HS256'];
- }
- server.auth.strategy('jwt', 'jwt', {
- key: key,
- validateFunc: (decoded, request, callback) => {
- if (decoded.tenant && decoded.scope) {
- return callback(null, true);
- }
- return callback(null, false);
- },
- verifyOptions: { algorithms: algorithm },
- });
- server.auth.default('jwt');
- // Start the server
- server.start((err) => {
- if (err) {
- throw err;
- }
- server.log('info', { msg: 'Server running at: ' + server.info.uri });
- });
- });
- module.exports = server;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement