openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
251 lines (160 loc) • 6.7 kB
JavaScript
'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