UNPKG

deep-search

Version:
103 lines (80 loc) 2.52 kB
/** * Created by CCristi <ccovali@mitocgroup.com> on 3/28/16. */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Aws4SignedHttpConnection = undefined; var _http = require('elasticsearch/src/lib/connectors/http'); var _http2 = _interopRequireDefault(_http); var _aws = require('aws4'); var _aws2 = _interopRequireDefault(_aws); var _util = require('util'); var _util2 = _interopRequireDefault(_util); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Aws4 Signed Http Connection Factory */ class Aws4SignedHttpConnection extends _http2.default { /** * @param {{accessKeyId: String, secretAccessKey: String}|null} awsCredentials * @param {Object[]} args */ constructor(awsCredentials, ...args) { super(...args); this._awsCredentials = awsCredentials; } /** * @param {Object} params * @returns {*} */ makeReqParams(params) { let body = params.body; params = super.makeReqParams(params); params.headers = params.headers || {}; let signParams = { service: 'es', region: Aws4SignedHttpConnection.getEsDomainRegion(params.hostname), host: params.hostname, method: params.method, path: params.path, headers: _util2.default._extend(params.headers, {}) }; if (body) { signParams.body = body; } let aws4Signature = this._createAws4Signature(signParams); ['X-Amz-Date', 'X-Amz-Security-Token', 'Authorization'].forEach(header => { params.headers[header] = aws4Signature.headers[header]; }); return params; } /** * @param {Object} optsToSign * @returns {Object} * @private */ _createAws4Signature(optsToSign) { return _aws2.default.sign(optsToSign, this._awsCredentials); } /** * @param {String} esDomainHostname * @returns {String} */ static getEsDomainRegion(esDomainHostname) { let regionParts = esDomainHostname.match(/\.([^\.]+)\.es\.amazonaws\.com$/i); if (regionParts && regionParts.length >= 2) { return regionParts[1]; } throw new Error(`Invalid ES domain hostname "${esDomainHostname}".`); } /** * @param {{accessKeyId: String, secretAccessKey: String}|null} awsCredentials * @returns {Aws4SignedHttpConnection.prototype} */ static createPrototype(awsCredentials = null) { return Aws4SignedHttpConnection.bind(null, awsCredentials); } } exports.Aws4SignedHttpConnection = Aws4SignedHttpConnection;