UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

251 lines (160 loc) 6.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.setupApp = setupApp; exports.rerunApp = rerunApp; exports.tcpApp = tcpApp; exports.pollingApp = pollingApp; var _koa = require('koa'); var _koa2 = _interopRequireDefault(_koa); var _rawBody = require('raw-body'); var _rawBody2 = _interopRequireDefault(_rawBody); var _koaCompress = require('koa-compress'); var _koaCompress2 = _interopRequireDefault(_koaCompress); var _statsdClient = require('statsd-client'); var _statsdClient2 = _interopRequireDefault(_statsdClient); var _os = require('os'); var _os2 = _interopRequireDefault(_os); var _zlib = require('zlib'); var _router = require('./middleware/router'); var router = _interopRequireWildcard(_router); var _messageStore = require('./middleware/messageStore'); var messageStore = _interopRequireWildcard(_messageStore); var _basicAuthentication = require('./middleware/basicAuthentication'); var basicAuthentication = _interopRequireWildcard(_basicAuthentication); var _tlsAuthentication = require('./middleware/tlsAuthentication'); var tlsAuthentication = _interopRequireWildcard(_tlsAuthentication); var _rerunBypassAuthentication = require('./middleware/rerunBypassAuthentication'); var rerunBypassAuthentication = _interopRequireWildcard(_rerunBypassAuthentication); var _rerunBypassAuthorisation = require('./middleware/rerunBypassAuthorisation'); var rerunBypassAuthorisation = _interopRequireWildcard(_rerunBypassAuthorisation); var _rerunUpdateTransactionTask = require('./middleware/rerunUpdateTransactionTask'); var rerunUpdateTransactionTask = _interopRequireWildcard(_rerunUpdateTransactionTask); var _tcpBypassAuthentication = require('./middleware/tcpBypassAuthentication'); var tcpBypassAuthentication = _interopRequireWildcard(_tcpBypassAuthentication); var _retrieveTCPTransaction = require('./middleware/retrieveTCPTransaction'); var retrieveTCPTransaction = _interopRequireWildcard(_retrieveTCPTransaction); var _requestMatching = require('./middleware/requestMatching'); var requestMatching = _interopRequireWildcard(_requestMatching); var _authorisation = require('./middleware/authorisation'); var authorisation = _interopRequireWildcard(_authorisation); var _pollingBypassAuthorisation = require('./middleware/pollingBypassAuthorisation'); var pollingBypassAuthorisation = _interopRequireWildcard(_pollingBypassAuthorisation); var _pollingBypassAuthentication = require('./middleware/pollingBypassAuthentication'); var pollingBypassAuthentication = _interopRequireWildcard(_pollingBypassAuthentication); var _events = require('./middleware/events'); var events = _interopRequireWildcard(_events); var _proxy = require('./middleware/proxy'); var proxy = _interopRequireWildcard(_proxy); var _rewriteUrls = require('./middleware/rewriteUrls'); var rewrite = _interopRequireWildcard(_rewriteUrls); var _config = require('./config'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _config.config.authentication = _config.config.get('authentication'); _config.config.statsd = _config.config.get('statsd'); const application = _config.config.get('application'); const domain = `${_os2.default.hostname()}.${application.name}.appMetrics`; const sdc = new _statsdClient2.default(_config.config.statsd); async function rawBodyReader(ctx, next) { let startTime; if (_config.config.statsd.enabled) { startTime = new Date(); } const body = await (0, _rawBody2.default)(ctx.req); if (body) { ctx.body = body; } if (_config.config.statsd.enabled) { sdc.timing(`${domain}.rawBodyReaderMiddleware`, startTime); } await next(); } // Primary app function setupApp(done) { const app = new _koa2.default(); // Basic authentication middleware if (_config.config.authentication.enableBasicAuthentication) { app.use(basicAuthentication.koaMiddleware); } // TLS authentication middleware if (_config.config.authentication.enableMutualTLSAuthentication) { app.use(tlsAuthentication.koaMiddleware); } app.use(rawBodyReader); // Request Matching middleware app.use(requestMatching.koaMiddleware); // Authorisation middleware app.use(authorisation.koaMiddleware); // Compress response on exit app.use((0, _koaCompress2.default)({ threshold: 8, flush: _zlib.Z_SYNC_FLUSH })); // Proxy app.use(proxy.koaMiddleware); // Persist message middleware app.use(messageStore.koaMiddleware); // URL rewriting middleware app.use(rewrite.koaMiddleware); // Events app.use(events.koaMiddleware); // Call router app.use(router.koaMiddleware); return done(app); } // Rerun app that bypasses auth function rerunApp(done) { const app = new _koa2.default(); app.use(rawBodyReader); // Rerun bypass authentication middlware app.use(rerunBypassAuthentication.koaMiddleware); // Rerun bypass authorisation middlware app.use(rerunBypassAuthorisation.koaMiddleware); // Update original transaction with rerunned transaction ID app.use(rerunUpdateTransactionTask.koaMiddleware); // Persist message middleware app.use(messageStore.koaMiddleware); // Authorisation middleware app.use(authorisation.koaMiddleware); // Events app.use(events.koaMiddleware); // Call router app.use(router.koaMiddleware); return done(app); } // App for TCP/TLS sockets function tcpApp(done) { const app = new _koa2.default(); app.use(rawBodyReader); app.use(retrieveTCPTransaction.koaMiddleware); // TCP bypass authentication middlware app.use(tcpBypassAuthentication.koaMiddleware); // Proxy app.use(proxy.koaMiddleware); // Persist message middleware app.use(messageStore.koaMiddleware); // Events app.use(events.koaMiddleware); // Call router app.use(router.koaMiddleware); return done(app); } // App used by scheduled polling function pollingApp(done) { const app = new _koa2.default(); app.use(rawBodyReader); // Polling bypass authentication middlware app.use(pollingBypassAuthentication.koaMiddleware); // Polling bypass authorisation middleware app.use(pollingBypassAuthorisation.koaMiddleware); // Persist message middleware app.use(messageStore.koaMiddleware); // Events app.use(events.koaMiddleware); // Call router app.use(router.koaMiddleware); return done(app); } //# sourceMappingURL=koaMiddleware.js.map