deep-search
Version:
DEEP Search Library
103 lines (80 loc) • 2.52 kB
JavaScript
/**
* Created by CCristi <ccovali@mitocgroup.com> on 3/28/16.
*/
;
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;