Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. 'use strict';
  2.  
  3. require('dotenv').config({ silent: true });
  4.  
  5. const Hapi = require('hapi');
  6. const Assert = require('assert');
  7.  
  8. // Expect minimum env variables
  9. Assert(process.env.NODE_ENV, 'expecting NODE_ENV');
  10.  
  11. // Create a server with a host and port
  12. const server = new Hapi.Server({});
  13.  
  14. server.connection({
  15. port: process.env.PORT || 3000,
  16. routes: {
  17. cors: true,
  18. },
  19. });
  20.  
  21. const options = {
  22. sequelize: {
  23. host: process.env.SEQUELIZE_HOST,
  24. username: process.env.SEQUELIZE_USER,
  25. password: process.env.SEQUELIZE_PASSWORD,
  26. database: process.env.SEQUELIZE_DATABASE,
  27. },
  28. datadog: {
  29. name: require('./../package.json').name,
  30. },
  31. rollbar: {
  32. token: process.env.ROLLBAR_TOKEN,
  33. codeVersion: require('./../package.json').version,
  34. environment: require('./../package.json').name,
  35. },
  36. };
  37.  
  38. // Load plugins for all environments
  39. const plugins = [
  40. { register: require('hapi-auth-jwt2') },
  41. { register: require('zeavo-hapi-jsonapi'), options: { links: false, meta: { version: require('../package.json').version } } },
  42. { register: require('zeavo-hapi-sequelize'), options: options.sequelize },
  43.  
  44. { register: require('./routes') },
  45. ];
  46.  
  47. // Avoid error/logging/metrics in test env
  48. if (process.env.NODE_ENV !== 'test') {
  49. plugins.push({ register: require('zeavo-hapi-good'), options: { name: require('../package.json').name } });
  50. }
  51.  
  52. // Rollbar is optional unless in production. Always excluded from test
  53. if ((process.env.ROLLBAR_TOKEN || process.env.NODE_ENV === 'production') && process.env.NODE_ENV !== 'test') {
  54. plugins.push({ register: require('zeavo-hapi-rollbar'), options: options.rollbar });
  55. }
  56.  
  57. // Load plugins for development or test environments only (hapi-swagger)
  58. if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
  59. plugins.push(
  60. { register: require('inert') },
  61. { register: require('vision') },
  62. { register: require('lout') },
  63. {
  64. register: require('hapi-swagger'),
  65. options: {
  66. info: {
  67. title: require('./../package').name + ' Documentation',
  68. version: require('./../package').version,
  69. },
  70. securityDefinitions: {
  71. Bearer: {
  72. type: 'apiKey',
  73. name: 'Authorization',
  74. in: 'header',
  75. },
  76. },
  77. },
  78. });
  79. }
  80.  
  81. // Load plugins for production env only (datadog metrics)
  82. if (process.env.NODE_ENV === 'production') {
  83. plugins.push({ register: require('zeavo-hapi-bootstrap') });
  84. plugins.push({ register: require('zeavo-hapi-datadog'), options: options.datadog });
  85. }
  86.  
  87. // Load plugins and start server
  88. server.register(plugins, (err) => {
  89. if (err) {
  90. throw err;
  91. }
  92.  
  93. let key;
  94. let algorithm;
  95.  
  96. if (process.env.NODE_ENV === 'production') {
  97. key = Buffer.from(server.plugins['zeavo-hapi-bootstrap'].jwt_public_key, 'base64');
  98. algorithm = ['RS256'];
  99. } else {
  100. Assert(process.env.JWT_KEY, 'expecting JWT_KEY');
  101. key = process.env.JWT_KEY;
  102. algorithm = ['HS256'];
  103. }
  104.  
  105. server.auth.strategy('jwt', 'jwt', {
  106. key: key,
  107. validateFunc: (decoded, request, callback) => {
  108. if (decoded.tenant && decoded.scope) {
  109. return callback(null, true);
  110. }
  111. return callback(null, false);
  112. },
  113. verifyOptions: { algorithms: algorithm },
  114. });
  115. server.auth.default('jwt');
  116.  
  117. // Start the server
  118. server.start((err) => {
  119. if (err) {
  120. throw err;
  121. }
  122. server.log('info', { msg: 'Server running at: ' + server.info.uri });
  123. });
  124. });
  125.  
  126. module.exports = server;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement