UNPKG

kibana-riya

Version:

Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic

156 lines (110 loc) 5.39 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _elasticsearch = require('elasticsearch'); var _elasticsearch2 = _interopRequireDefault(_elasticsearch); var _lodash = require('lodash'); var _lodashInternalToPath = require('lodash/internal/toPath'); var _lodashInternalToPath2 = _interopRequireDefault(_lodashInternalToPath); var _boom = require('boom'); var _boom2 = _interopRequireDefault(_boom); var _filter_headers = require('./filter_headers'); var _filter_headers2 = _interopRequireDefault(_filter_headers); var _parse_config = require('./parse_config'); var Cluster = (function () { function Cluster(config) { var _this = this; _classCallCheck(this, Cluster); this.callWithRequest = function (req, endpoint) { if (req === undefined) req = {}; var clientParams = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; if (req.headers) { var filteredHeaders = (0, _filter_headers2['default'])(req.headers, _this.getRequestHeadersWhitelist()); (0, _lodash.set)(clientParams, 'headers', filteredHeaders); } return callAPI(_this._noAuthClient, endpoint, clientParams, options); }; this.callWithInternalUser = function (endpoint) { var clientParams = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; return callAPI(_this._client, endpoint, clientParams, options); }; this.getRequestHeadersWhitelist = function () { return getClonedProperty(_this._config, 'requestHeadersWhitelist'); }; this.getCustomHeaders = function () { return getClonedProperty(_this._config, 'customHeaders'); }; this.getRequestTimeout = function () { return getClonedProperty(_this._config, 'requestTimeout'); }; this.getUrl = function () { return getClonedProperty(_this._config, 'url'); }; this.getSsl = function () { return getClonedProperty(_this._config, 'ssl'); }; this.getClient = function () { return _this._client; }; this.createClient = function (configOverrides) { var config = Object.assign({}, _this._getClientConfig(), configOverrides); return new _elasticsearch2['default'].Client((0, _parse_config.parseConfig)(config)); }; this._getClientConfig = function () { return getClonedProperties(_this._config, ['url', 'ssl', 'username', 'password', 'customHeaders', 'plugins', 'apiVersion', 'keepAlive', 'pingTimeout', 'requestTimeout', 'log']); }; this._config = Object.assign({}, config); this.errors = _elasticsearch2['default'].errors; this._client = this.createClient(); this._noAuthClient = this.createClient({ auth: false }); return this; } _createClass(Cluster, [{ key: 'close', value: function close() { if (this._client) { this._client.close(); } if (this._noAuthClient) { this._noAuthClient.close(); } } }]); return Cluster; })(); exports.Cluster = Cluster; function callAPI(client, endpoint) { var clientParams = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; var wrap401Errors = options.wrap401Errors !== false; var clientPath = (0, _lodashInternalToPath2['default'])(endpoint); var api = (0, _lodash.get)(client, clientPath); var apiContext = (0, _lodash.get)(client, clientPath.slice(0, -1)); if ((0, _lodash.isEmpty)(apiContext)) { apiContext = client; } if (!api) { throw new Error('called with an invalid endpoint: ' + endpoint); } return api.call(apiContext, clientParams)['catch'](function (err) { if (!wrap401Errors || err.statusCode !== 401) { return Promise.reject(err); } var boomError = _boom2['default'].wrap(err, err.statusCode); var wwwAuthHeader = (0, _lodash.get)(err, 'body.error.header[WWW-Authenticate]'); boomError.output.headers['WWW-Authenticate'] = wwwAuthHeader || 'Basic realm="Authorization Required"'; throw boomError; }); } function getClonedProperties(config, paths) { return (0, _lodash.cloneDeep)(paths ? (0, _lodash.pick)(config, paths) : config); } function getClonedProperty(config, path) { return (0, _lodash.cloneDeep)(path ? (0, _lodash.get)(config, path) : config); }