Home Identifier Source Repository

lib/Client/Connection/Aws4SignedHttpConnectionFactory.js

/**
 * Created by CCristi <ccovali@mitocgroup.com> on 3/28/16.
 */

'use strict';

import HttpConnection from 'elasticsearch/src/lib/connectors/http';
import aws4 from 'aws4';

/**
 * Aws4 Signed Http Connection Factory
 */
export class Aws4SignedHttpConnectionFactory {
  /**
   * @param {Object} awsCredentials
   */
  constructor(awsCredentials = null) {
    this._awsCredentials = awsCredentials;
  }

  /**
   * @returns {$ES6_ANONYMOUS_CLASS$}
   */
  create() {
    let connectionFactory = this;

    /**
     * Aws4 Signed Http Connection
     */
    return class extends HttpConnection {
      /**
       * @param {Object} params
       * @returns {Object}
       */
      makeReqParams(params) {
        let signParams = Object.assign(params, {service: 'es'});
        let aws4Signature = connectionFactory._createAws4Signature(signParams);

        params = super.makeReqParams(params);
        params.headers = params.headers || {};

        ['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 aws4.sign(optsToSign, this._awsCredentials);
  }
}