From 320825de99791fc76fb826712f4bb37d557672db Mon Sep 17 00:00:00 2001 From: JuanCarlos Date: Wed, 7 Aug 2019 10:31:59 +0200 Subject: [PATCH] Bump 7.2 into 7.3 --- .yarnignore | 1 + config.yml | 6 +- package.json | 6 +- public/components/eui-loader.js | 4 +- public/controllers/agent/agents-preview.js | 14 +- public/controllers/agent/agents.js | 85 +- .../agent/components/export-configuration.js | 159 + .../agent/components/register-agent.js | 191 + .../agent/components/register-guide-defs.js | 20 + .../controllers/agent/components/welcome.js | 54 +- public/controllers/agent/index.js | 4 + public/controllers/dev-tools/dev-tools.js | 7 +- public/controllers/management/files.js | 22 +- public/controllers/management/groups.js | 11 +- public/controllers/management/management.js | 21 + public/controllers/management/rules.js | 27 + public/controllers/misc/health-check.js | 2 +- public/controllers/misc/reporting.js | 4 +- public/controllers/overview/overview.js | 14 +- public/controllers/settings/settings.js | 4 +- public/directives/index.js | 2 - .../wz-add-filter-chip.less | 1 + .../wz-config-viewer/wz-config-viewer.js | 6 +- .../wz-register-agents.html | 221 - .../wz-register-agents.less | 112 - .../directives/wz-tabs-eui/components/tabs.js | 54 + .../directives/wz-tag-filter/wz-tag-filter.js | 5 + .../wz-xml-file-editor/wz-xml-file-editor.js | 4 +- public/factories/tab-visualizations.js | 4 + .../loader/visualize_data_loader.ts | 13 + public/less/common.less | 17 +- public/less/dark_theme/bootstrap_light.css | 228 +- public/less/dark_theme/wz_theme_dark.css | 5786 +---------------- public/less/layout.less | 8 +- public/less/loader.js | 11 - public/services/common-data.js | 42 + public/services/reporting.js | 47 + public/services/resolves/check-timestamp.js | 4 +- public/services/resolves/get-config.js | 4 +- public/services/resolves/settings-wizard.js | 2 + public/templates/agents-prev/agents-prev.html | 238 +- public/templates/agents/agents-hipaa.html | 104 + public/templates/agents/agents-nist.html | 104 + public/templates/agents/agents-welcome.html | 10 +- public/templates/agents/agents.head | 6 +- public/templates/agents/agents.pug | 2 + .../integrity-monitoring.head | 2 +- .../management/configuration/welcome.html | 92 +- .../templates/management/groups/groups.html | 8 + public/templates/management/management.head | 15 +- .../management/monitoring/monitoring.head | 24 +- public/templates/management/reporting.html | 22 - .../ruleset/rules/rules-detail.html | 76 +- .../management/ruleset/rules/rules-list.html | 16 +- .../templates/management/ruleset/ruleset.head | 11 +- public/templates/overview/overview-hipaa.html | 107 + public/templates/overview/overview-nist.html | 107 + .../templates/overview/overview-welcome.html | 2 +- public/templates/overview/overview.head | 6 +- public/templates/overview/overview.pug | 2 + public/utils/codemirror/index.js | 1 + public/utils/codemirror/lesser-dark.css | 131 + public/utils/components-os-support.js | 18 + public/utils/config-equivalences.js | 4 - public/utils/filter-handler.js | 24 + public/utils/tab-names.js | 2 + server/controllers/wazuh-api.js | 226 + server/controllers/wazuh-elastic.js | 150 +- server/controllers/wazuh-reporting.js | 812 ++- server/initialize.js | 83 +- .../integration-files/hipaa-requirements.js | 37 + server/integration-files/known-fields.js | 18 + server/integration-files/nist-requirements.js | 59 + .../visualizations/agents/agents-hipaa.js | 110 + .../visualizations/agents/agents-nist.js | 110 + .../visualizations/agents/index.js | 4 + .../visualizations/overview/index.js | 4 + .../visualizations/overview/overview-hipaa.js | 128 + .../visualizations/overview/overview-nist.js | 128 + server/lib/default-ext.js | 2 + server/lib/elastic-wrapper.js | 136 +- server/lib/refresh-known-fields.js | 12 +- server/lib/update-configuration.js | 2 - server/reporting/agent-configuration.js | 322 + server/reporting/audit-request.js | 15 +- server/reporting/gdpr-request.js | 10 +- server/reporting/overview-request.js | 5 +- server/reporting/pci-request.js | 10 +- server/reporting/rootcheck-request.js | 15 +- server/reporting/syscheck-request.js | 20 +- server/reporting/tab-description.js | 10 + server/reporting/vulnerability-request.js | 25 +- server/routes/wazuh-api.js | 36 + server/routes/wazuh-elastic.js | 18 - test/server/wazuh-elastic.js | 67 - util/api-request-list.js | 8 + util/csv-key-equivalence.js | 2 + 97 files changed, 4032 insertions(+), 6913 deletions(-) create mode 100644 .yarnignore create mode 100644 public/controllers/agent/components/export-configuration.js create mode 100644 public/controllers/agent/components/register-agent.js create mode 100644 public/controllers/agent/components/register-guide-defs.js delete mode 100644 public/directives/wz-register-agents/wz-register-agents.html delete mode 100644 public/directives/wz-register-agents/wz-register-agents.less create mode 100644 public/directives/wz-tabs-eui/components/tabs.js create mode 100644 public/templates/agents/agents-hipaa.html create mode 100644 public/templates/agents/agents-nist.html create mode 100644 public/templates/overview/overview-hipaa.html create mode 100644 public/templates/overview/overview-nist.html create mode 100644 public/utils/codemirror/lesser-dark.css create mode 100644 public/utils/components-os-support.js create mode 100644 server/integration-files/hipaa-requirements.js create mode 100644 server/integration-files/nist-requirements.js create mode 100644 server/integration-files/visualizations/agents/agents-hipaa.js create mode 100644 server/integration-files/visualizations/agents/agents-nist.js create mode 100644 server/integration-files/visualizations/overview/overview-hipaa.js create mode 100644 server/integration-files/visualizations/overview/overview-nist.js create mode 100644 server/reporting/agent-configuration.js diff --git a/.yarnignore b/.yarnignore new file mode 100644 index 000000000..a4342354d --- /dev/null +++ b/.yarnignore @@ -0,0 +1 @@ +plugins/wazuh/server/wazuh-version.json \ No newline at end of file diff --git a/config.yml b/config.yml index ec7443535..dcd0bc717 100644 --- a/config.yml +++ b/config.yml @@ -39,6 +39,8 @@ # Values must to be true or false. #extensions.pci : true #extensions.gdpr : true +#extensions.hipaa : true +#extensions.nist : true #extensions.audit : true #extensions.oscap : false #extensions.ciscat : false @@ -57,11 +59,9 @@ # # ------------------------------ Advanced indices ------------------------------ # -# Configure .wazuh and .wazuh-version indices shards and replicas. +# Configure .wazuh indices shards and replicas. #wazuh.shards : 1 #wazuh.replicas : 0 -#wazuh-version.shards : 1 -#wazuh-version.replicas: 0 # # --------------------------- Index pattern selector --------------------------- # diff --git a/package.json b/package.json index 50e85601d..0acf12178 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "wazuh", - "version": "3.9.4", - "revision": "0528", - "code": "0528-0", + "version": "3.10.0", + "revision": "05269", + "code": "0529-0", "kibana": { "version": "7.3.0" }, diff --git a/public/components/eui-loader.js b/public/components/eui-loader.js index 77bf13da6..82b94a53e 100644 --- a/public/components/eui-loader.js +++ b/public/components/eui-loader.js @@ -23,6 +23,7 @@ import { } from '@elastic/eui'; import { BasicTable } from '../directives/wz-table-eui/components/table'; +import { Tabs } from '../directives/wz-tabs-eui/components/tabs'; const app = uiModules.get('app/wazuh', ['react']); @@ -35,4 +36,5 @@ app .value('EuiBasicTable', EuiBasicTable) .value('EuiHealth', EuiHealth) .value('EuiCallOut', EuiCallOut) - .value('BasicTable', BasicTable); + .value('BasicTable', BasicTable) + .value('Tabs', Tabs); diff --git a/public/controllers/agent/agents-preview.js b/public/controllers/agent/agents-preview.js index 46a995231..33d6e541b 100644 --- a/public/controllers/agent/agents-preview.js +++ b/public/controllers/agent/agents-preview.js @@ -92,10 +92,12 @@ export class AgentsPreviewController { this.$scope.$on('wazuhFetched', (ev, parameters) => { ev.stopPropagation(); - this.$scope.showNoAgents = - !parameters.items.length > 0 && !parameters.filters.length; }); + this.registerAgentsProps = { + addNewAgent: flag => this.addNewAgent(flag) + }; + this.init = false; //Load this.load(); @@ -201,6 +203,9 @@ export class AgentsPreviewController { this.osPlatforms = unique.osPlatforms; this.lastAgent = unique.lastAgent; this.summary = unique.summary; + if (!this.lastAgent || !this.lastAgent.id) { + this.addNewAgent(true); + } if (agentsTop.data.data === '') { this.mostActiveAgent.name = this.appState.getClusterInfo().manager; @@ -225,8 +230,8 @@ export class AgentsPreviewController { return; } - registerNewAgent(flag) { - this.$scope.registerNewAgent = flag; + addNewAgent(flag) { + this.addingNewAgent = flag; } reloadList() { @@ -245,6 +250,7 @@ export class AgentsPreviewController { } catch (error) { this.errorHandler.handle('Error refreshing agents stats'); } + this.$scope.$broadcast('reloadSearchFilterBar', {}); } openRegistrationDocs() { diff --git a/public/controllers/agent/agents.js b/public/controllers/agent/agents.js index cb85050d2..2e127ae89 100644 --- a/public/controllers/agent/agents.js +++ b/public/controllers/agent/agents.js @@ -14,6 +14,7 @@ import { generateMetric } from '../../utils/generate-metric'; import { TabNames } from '../../utils/tab-names'; import * as FileSaver from '../../services/file-saver'; import { TabDescription } from '../../../server/reporting/tab-description'; +import { UnsupportedComponents } from '../../utils/components-os-support'; import { metricsGeneral, metricsAudit, @@ -165,7 +166,7 @@ export class AgentsController { this.$scope.hostMonitoringTabs = ['general', 'fim', 'syscollector']; this.$scope.systemAuditTabs = ['pm', 'sca', 'audit', 'oscap', 'ciscat']; this.$scope.securityTabs = ['vuls', 'virustotal', 'osquery', 'docker']; - this.$scope.complianceTabs = ['pci', 'gdpr']; + this.$scope.complianceTabs = ['pci', 'gdpr', 'hipaa', 'nist']; /** * This check if given array of items contais a single given item @@ -214,6 +215,9 @@ export class AgentsController { this.$scope.startVis2Png = () => this.startVis2Png(); + this.$scope.shouldShowComponent = component => + this.shouldShowComponent(component); + this.$scope.$on('$destroy', () => { this.visFactoryService.clearAll(); }); @@ -225,6 +229,14 @@ export class AgentsController { this.$location.path('/manager/groups'); }; + this.$scope.exportConfiguration = enabledComponents => { + this.reportingService.startConfigReport( + this.$scope.agent, + 'agentConfig', + enabledComponents + ); + }; + this.$scope.restartAgent = async agent => { this.$scope.restartingAgent = true; try { @@ -437,14 +449,6 @@ export class AgentsController { }; this.$scope.expand = i => this.expand(i); - - this.$scope.welcomeCardsProps = { - switchTab: tab => this.switchTab(tab), - extensions: this.$scope.extensions, - api: this.appState.getCurrentAPI(), - setExtensions: (api, extensions) => - this.appState.setExtensions(api, extensions) - }; } /** * Create metric for given object @@ -562,7 +566,7 @@ export class AgentsController { this.$scope.agent.status = (((agentInfo || {}).data || {}).data || {}).status || this.$scope.agent.status; - } catch (error) {} // eslint-disable-line + } catch (error) { } // eslint-disable-line } try { @@ -579,6 +583,18 @@ export class AgentsController { this.$scope.selectedGdprIndex = 0; } + if (tab === 'hipaa') { + const hipaaTabs = await this.commonData.getHIPAA(); + this.$scope.hipaaTabs = hipaaTabs; + this.$scope.selectedHipaaIndex = 0; + } + + if (tab === 'nist') { + const nistTabs = await this.commonData.getNIST(); + this.$scope.nistTabs = nistTabs; + this.$scope.selectedNistIndex = 0; + } + if (tab === 'sca') { try { this.$scope.loadSca = true; @@ -598,7 +614,7 @@ export class AgentsController { if (tab === 'syscollector') try { await this.loadSyscollector(this.$scope.agent.id); - } catch (error) {} // eslint-disable-line + } catch (error) { } // eslint-disable-line if (tab === 'configuration') { this.$scope.switchConfigurationTab('welcome'); } else { @@ -730,12 +746,13 @@ export class AgentsController { if (agentInfo && this.$scope.agent.os) { this.$scope.agentOS = this.$scope.agent.os.name + ' ' + this.$scope.agent.os.version; - this.$scope.agent.isLinuxOS = this.$scope.agent.os.uname.includes( - 'Linux' - ); + const isLinux = this.$scope.agent.os.uname.includes('Linux'); + this.$scope.agent.agentPlatform = isLinux + ? 'linux' + : this.$scope.agent.os.platform; } else { this.$scope.agentOS = '-'; - this.$scope.agent.isLinuxOS = false; + this.$scope.agent.agentPlatform = false; } await this.$scope.switchTab(this.$scope.tab, true); @@ -748,6 +765,7 @@ export class AgentsController { this.$scope.agent.group && !this.$scope.agent.group.includes(item) ); + this.loadWelcomeCardsProps(); this.$scope.load = false; this.$scope.$applyAsync(); return; @@ -767,11 +785,48 @@ export class AgentsController { this.$location.path('/agents-preview'); } } + this.$scope.load = false; this.$scope.$applyAsync(); return; } + shouldShowComponent(component) { + return !( + UnsupportedComponents[this.$scope.agent.agentPlatform] || + UnsupportedComponents['other'] + ).includes(component); + } + + cleanExtensions(extensions) { + const result = {}; + for (const extension in extensions) { + if ( + !( + UnsupportedComponents[this.$scope.agent.agentPlatform] || + UnsupportedComponents['other'] + ).includes(extension) + ) { + result[extension] = extensions[extension]; + } + } + return result; + } + + /** + * Get available welcome cards after getting the agent + */ + loadWelcomeCardsProps() { + this.$scope.welcomeCardsProps = { + switchTab: tab => this.switchTab(tab), + extensions: this.cleanExtensions(this.$scope.extensions), + agent: this.$scope.agent, + api: this.appState.getCurrentAPI(), + setExtensions: (api, extensions) => + this.appState.setExtensions(api, extensions) + }; + } + switchGroupEdit() { this.$scope.editGroup = !!!this.$scope.editGroup; this.$scope.$applyAsync(); diff --git a/public/controllers/agent/components/export-configuration.js b/public/controllers/agent/components/export-configuration.js new file mode 100644 index 000000000..d3ccbab53 --- /dev/null +++ b/public/controllers/agent/components/export-configuration.js @@ -0,0 +1,159 @@ +import React, { Component } from 'react'; + +import { + EuiPopover, + EuiButton, + EuiCheckboxGroup, + EuiSpacer, + EuiButtonEmpty +} from '@elastic/eui'; + +import PropTypes from 'prop-types'; +import { UnsupportedComponents } from '../../../utils/components-os-support'; + +export class ExportConfiguration extends Component { + constructor(props) { + super(props); + + this.state = { + buttonDisabled: false, + isPopoverOpen: false + }; + + const agentOptions = [ + 'Global configuration', + 'Communication', + 'Anti-flooding settings', + 'Labels', + 'Policy monitoring', + { name: 'oscap', desc: 'OpenSCAP' }, + 'CIS-CAT', + 'Osquery', + 'Inventory data', + 'Active response', + 'Commands', + { name: 'docker', desc: 'Docker listener' }, + 'Log collection', + 'Integrity monitoring' + ]; + const groupOptions = ['Configurations', 'Agents in group']; + + this.options = []; + const list = this.props.type === 'agent' ? agentOptions : groupOptions; + list.forEach((x, idx) => { + if ( + typeof x === 'string' || + (x.name && + !( + UnsupportedComponents[this.props.agentPlatform] || + UnsupportedComponents['other'] + ).includes(x.name)) + ) { + this.options.push({ id: `${idx}`, label: x.desc || x }); + } + }); + + let initialChecks = {}; + this.options.forEach(x => { + initialChecks[x.id] = true; + }); + this.state.checkboxIdToSelectedMap = initialChecks; + } + + selectAll(flag) { + let newCheckboxIdToSelectedMap = {}; + for (let i = 0; i < this.options.length; i++) { + newCheckboxIdToSelectedMap[`${this.options[i].id}`] = flag; + } + this.setState({ + checkboxIdToSelectedMap: newCheckboxIdToSelectedMap, + buttonDisabled: !flag + }); + } + + exportClick() { + this.setState({ + isPopoverOpen: !this.state.isPopoverOpen + }); + } + + closePopover() { + this.setState({ + isPopoverOpen: false + }); + } + + onChange = optionId => { + const newCheckboxIdToSelectedMap = { + ...this.state.checkboxIdToSelectedMap, + ...{ + [optionId]: !this.state.checkboxIdToSelectedMap[optionId] + } + }; + let result = false; + for (let i = 0; i < this.options.length; i++) { + if (newCheckboxIdToSelectedMap[`${this.options[i].id}`] === true) { + result = true; + } + } + this.setState({ + checkboxIdToSelectedMap: newCheckboxIdToSelectedMap, + buttonDisabled: !result + }); + }; + + render() { + const button = ( + + PDF + + ); + return ( + + + + this.selectAll(true)}> + Select all + + + this.selectAll(false)}> + Unselect all + + + { + this.closePopover(); + this.props.exportConfiguration(this.state.checkboxIdToSelectedMap); + }} + fill + > + Generate PDF report + + + ); + } +} + +ExportConfiguration.propTypes = { + exportConfiguration: PropTypes.func, + type: PropTypes.string, + agentPlatform: PropTypes.string +}; diff --git a/public/controllers/agent/components/register-agent.js b/public/controllers/agent/components/register-agent.js new file mode 100644 index 000000000..c79757797 --- /dev/null +++ b/public/controllers/agent/components/register-agent.js @@ -0,0 +1,191 @@ +import React, { Component, Fragment } from 'react'; + +import { + EuiSteps, + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiButtonToggle, + EuiFieldText, + EuiText, + EuiCodeBlock, + EuiTitle, + EuiButtonIcon, + EuiButtonEmpty, + EuiCopy, + EuiPage, + EuiPageBody +} from '@elastic/eui'; + +import { RegisterGuideDefs } from './register-guide-defs'; +import PropTypes from 'prop-types'; + +export class RegisterAgent extends Component { + constructor(props) { + super(props); + + this.state = { + status: 'incomplete', + selectedOS: '', + serverAddress: '' + }; + } + + selectOS(os) { + this.setState({ selectedOS: os }); + } + + setServerAddress(event) { + this.setState({ serverAddress: event.target.value }); + } + + render() { + const rpmButton = ( + this.selectOS('rpm')} + fill={this.state.selectedOS === 'rpm'} + /> + ); + + const debButton = ( + this.selectOS('deb')} + fill={this.state.selectedOS === 'deb'} + /> + ); + + const windowsButton = ( + this.selectOS('win')} + fill={this.state.selectedOS === 'win'} + /> + ); + + const macOSButton = ( + this.selectOS('macos')} + fill={this.state.selectedOS === 'macos'} + /> + ); + + const ipInput = ( + this.setServerAddress(event)} + /> + ); + + const copyButton = { + position: 'relative', + float: 'right', + zIndex: '1000', + right: '8px', + top: '16px' + }; + + const codeBlock = { + zIndex: '100' + }; + + const customTexts = { + rpmText: `WAZUH_MANAGER_IP='${this.state.serverAddress}' yum install wazuh-agent`, + debText: `WAZUH_MANAGER_IP='${this.state.serverAddress}' apt-get install wazuh-agent`, + macosText: `launchctl setenv WAZUH_MANAGER_IP '${this.state.serverAddress}' && installer -pkg wazuh-agent-.pkg -target /`, + winText: `wazuh-agent-3.9.1-1.msi /q ADDRESS='${this.state.serverAddress}' AUTHD_SERVER='${this.state.serverAddress}'` + }; + + const field = `${this.state.selectedOS}Text`; + const text = customTexts[field]; + + const guide = ( +
+ {this.state.selectedOS && ( + +
+ + {copy => ( + + )} + +
+ + {text} + +
+ )} +
+ ); + + const steps = [ + { + title: 'Choose your OS', + children: ( + + {rpmButton} {debButton} {windowsButton} {macOSButton} + + ) + }, + { + title: 'Wazuh server address', + children: {ipInput} + }, + { + title: 'Complete the installation', + children: ( +
+ +
{guide}
+
+
+ ) + } + ]; + + return ( +
+ + + + + +

Add a new agent

+
+
+ + this.props.addNewAgent(false)} + iconType="cross" + > + close + + +
+ + + + + + + + + +
+
+
+ ); + } +} + +RegisterAgent.propTypes = { + addNewAgent: PropTypes.func +}; diff --git a/public/controllers/agent/components/register-guide-defs.js b/public/controllers/agent/components/register-guide-defs.js new file mode 100644 index 000000000..3de530851 --- /dev/null +++ b/public/controllers/agent/components/register-guide-defs.js @@ -0,0 +1,20 @@ +/* + * Wazuh app - Wazuh Register Agents Component steps texts + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export const RegisterGuideDefs = { + rpmText1: + 'rpm --import http://packages.wazuh.com/key/GPG-KEY-WAZUH\ncat > /etc/yum.repos.d/wazuh.repo < { - return ( - - this.toggleExtension(extension)} - /> - - ); - }); + const switches = extensions + .filter(extension => this.props.extensions[extension] !== undefined) + .map(extension => { + return ( + + this.toggleExtension(extension)} + /> + + ); + }); return ( + {( + UnsupportedComponents[this.props.agent.agentPlatform] || + UnsupportedComponents['other'] + ).includes('vuls') && + !this.props.extensions.virustotal && + !this.props.extensions.osquery && + !this.props.extensions.docker && ( + + + + Click the icon to show thread + detection and response extensions. +

+ } + color="success" + iconType="help" + /> +
+
+ )} - {this.buildTabCard('vuls', 'securityApp')} + {!( + UnsupportedComponents[this.props.agent.agentPlatform] || + UnsupportedComponents['other'] + ).includes('vuls') && this.buildTabCard('vuls', 'securityApp')} {this.props.extensions.virustotal && this.buildTabCard('virustotal', 'savedObjectsApp')} {this.props.extensions.osquery && @@ -202,6 +231,7 @@ export class WelcomeScreen extends Component { WelcomeScreen.propTypes = { extensions: PropTypes.object, + agent: PropTypes.object, setExtensions: PropTypes.func, switchTab: PropTypes.func, api: PropTypes.string diff --git a/public/controllers/agent/index.js b/public/controllers/agent/index.js index 4ba6b31f0..1e771065d 100644 --- a/public/controllers/agent/index.js +++ b/public/controllers/agent/index.js @@ -12,6 +12,8 @@ import { uiModules } from 'ui/modules'; import { AgentsPreviewController } from './agents-preview'; import { AgentsController } from './agents'; +import { RegisterAgent } from './components/register-agent'; +import { ExportConfiguration } from './components/export-configuration'; import { WelcomeScreen } from './components/welcome'; import { Stats } from './components/stats'; @@ -20,5 +22,7 @@ const app = uiModules.get('app/wazuh', []); app .controller('agentsController', AgentsController) .controller('agentsPreviewController', AgentsPreviewController) + .value('RegisterAgent', RegisterAgent) + .value('ExportConfiguration', ExportConfiguration) .value('WelcomeScreenAgent', WelcomeScreen) .value('StatsAgent', Stats); diff --git a/public/controllers/dev-tools/dev-tools.js b/public/controllers/dev-tools/dev-tools.js index 012edeb1b..cffc5e69a 100644 --- a/public/controllers/dev-tools/dev-tools.js +++ b/public/controllers/dev-tools/dev-tools.js @@ -15,6 +15,8 @@ import { ExcludedIntelliSenseTriggerKeys } from '../../../util/excluded-devtools import queryString from 'querystring-browser'; import $ from 'jquery'; import * as FileSaver from '../../services/file-saver'; +import chrome from 'ui/chrome'; + export class DevToolsController { /** * Constructor @@ -45,6 +47,7 @@ export class DevToolsController { this.linesWithClass = []; this.widgets = []; this.multipleKeyPressed = []; + this.IS_DARK_THEME = chrome.getUiSettingsClient().get('theme:darkMode'); } /** @@ -76,7 +79,7 @@ export class DevToolsController { lineNumbers: true, matchBrackets: true, mode: { name: 'javascript', json: true }, - theme: 'ttcn', + theme: this.IS_DARK_THEME ? 'lesser-dark' : 'ttcn', foldGutter: true, styleSelectedText: true, gutters: ['CodeMirror-foldgutter'] @@ -119,7 +122,7 @@ export class DevToolsController { readOnly: true, lineWrapping: true, styleActiveLine: true, - theme: 'ttcn', + theme: this.IS_DARK_THEME ? 'lesser-dark' : 'ttcn', foldGutter: true, gutters: ['CodeMirror-foldgutter'] } diff --git a/public/controllers/management/files.js b/public/controllers/management/files.js index cbdc68871..7fa21e657 100644 --- a/public/controllers/management/files.js +++ b/public/controllers/management/files.js @@ -109,13 +109,13 @@ export class FilesController { isOverwrite: !!this.overwriteError }; (isNewFile && this.$scope.type === 'rules') || - (!isNewFile && this.$scope.currentFile.type === 'rule') + (!isNewFile && this.$scope.currentFile.type === 'rule') ? (objParam.rule = isNewFile - ? this.selectedItem - : this.$scope.currentFile) + ? this.selectedItem + : this.$scope.currentFile) : (objParam.decoder = isNewFile - ? this.selectedItem - : this.$scope.currentFile); + ? this.selectedItem + : this.$scope.currentFile); this.$scope.$broadcast('saveXmlFile', objParam); this.$scope.$applyAsync(); } @@ -170,13 +170,13 @@ export class FilesController { this.$scope.fetchedXML = this.$scope.type === 'rules' ? await this.rulesetHandler.getRuleConfiguration( - this.$scope.currentFile.file, - readonly - ) + this.$scope.currentFile.file, + readonly + ) : await this.rulesetHandler.getDecoderConfiguration( - this.$scope.currentFile.file, - readonly - ); + this.$scope.currentFile.file, + readonly + ); this.$scope.$applyAsync(); if (!readonly) { this.$scope.$broadcast('fetchedFile', { data: this.$scope.fetchedXML }); diff --git a/public/controllers/management/groups.js b/public/controllers/management/groups.js index 658cb74ff..49f5d6da2 100644 --- a/public/controllers/management/groups.js +++ b/public/controllers/management/groups.js @@ -22,7 +22,8 @@ export function GroupsController( shareAgent, groupHandler, wzTableFilter, - wazuhConfig + wazuhConfig, + reportingService ) { $scope.addingGroup = false; $scope.$on('groupsIsReloaded', () => { @@ -238,6 +239,14 @@ export function GroupsController( $scope.$applyAsync(); }; + $scope.exportConfiguration = enabledComponents => { + reportingService.startConfigReport( + $scope.currentGroup, + 'groupConfig', + enabledComponents + ); + }; + /** * This show us a group file, for a given group and file */ diff --git a/public/controllers/management/management.js b/public/controllers/management/management.js index 04624b295..50ae159ad 100644 --- a/public/controllers/management/management.js +++ b/public/controllers/management/management.js @@ -150,6 +150,27 @@ export class ManagementController { this.welcomeCardsProps = { switchTab: (tab, setNav) => this.switchTab(tab, setNav) }; + + this.rulesetTabsProps = { + clickAction: tab => this.setRulesTab(tab), + selectedTab: this.rulesetTab, + tabs: [ + { id: 'rules', name: 'Rules' }, + { id: 'decoders', name: 'Decoders' }, + { id: 'cdblists', name: 'Lists' } + ] + }; + + this.managementTabsProps = { + clickAction: tab => this.switchTab(tab, true), + selectedTab: this.tab, + tabs: [ + { id: 'status', name: 'Status' }, + { id: 'logs', name: 'Logs' }, + { id: 'monitoring', name: 'Cluster' }, + { id: 'reporting', name: 'Reporting' } + ] + }; } /** diff --git a/public/controllers/management/rules.js b/public/controllers/management/rules.js index e5440445f..79b8032e8 100644 --- a/public/controllers/management/rules.js +++ b/public/controllers/management/rules.js @@ -80,6 +80,33 @@ export function RulesController( ); $scope.appliedFilters.push(filter); $scope.$broadcast('wazuhFilter', { filter }); + } else if ( + term && + term.startsWith('hipaa:') && + term.split('hipaa:')[1].trim() + ) { + $scope.custom_search = ''; + const filter = { name: 'hipaa', value: term.split('hipaa:')[1].trim() }; + $scope.appliedFilters = $scope.appliedFilters.filter( + item => item.name !== 'hipaa' + ); + $scope.appliedFilters.push(filter); + $scope.$broadcast('wazuhFilter', { filter }); + } else if ( + term && + term.startsWith('nist-800-53:') && + term.split('nist-800-53:')[1].trim() + ) { + $scope.custom_search = ''; + const filter = { + name: 'nist-800-53', + value: term.split('nist-800-53:')[1].trim() + }; + $scope.appliedFilters = $scope.appliedFilters.filter( + item => item.name !== 'nist-800-53' + ); + $scope.appliedFilters.push(filter); + $scope.$broadcast('wazuhFilter', { filter }); } else if ( term && term.startsWith('file:') && diff --git a/public/controllers/misc/health-check.js b/public/controllers/misc/health-check.js index 1b6fe3863..83cc41ad4 100644 --- a/public/controllers/misc/health-check.js +++ b/public/controllers/misc/health-check.js @@ -172,7 +172,7 @@ export class HealthCheck { const apiVersion = versionData.data.data; const setupData = await this.genericReq.request( 'GET', - '/elastic/setup' + '/api/setup' ); if (!setupData.data.data['app-version'] || !apiVersion) { this.errorHandler.handle( diff --git a/public/controllers/misc/reporting.js b/public/controllers/misc/reporting.js index f0e54ea8b..5404a97fa 100644 --- a/public/controllers/misc/reporting.js +++ b/public/controllers/misc/reporting.js @@ -11,8 +11,9 @@ */ import chrome from 'ui/chrome'; export class ReportingController { - constructor(errorHandler, genericReq, $window, timeService) { + constructor($scope, errorHandler, genericReq, $window, timeService) { // Services + this.$scope = $scope; this.$window = $window; this.errorHandler = errorHandler; this.genericReq = genericReq; @@ -84,6 +85,7 @@ export class ReportingController { this.errorHandler.handle(error.message || error); } this.loading = false; + this.$scope.$applyAsync(); return this.items; } } diff --git a/public/controllers/overview/overview.js b/public/controllers/overview/overview.js index a27a7087f..d309f0e8c 100644 --- a/public/controllers/overview/overview.js +++ b/public/controllers/overview/overview.js @@ -117,7 +117,7 @@ export class OverviewController { this.hostMonitoringTabs = ['general', 'fim', 'aws']; this.systemAuditTabs = ['pm', 'audit', 'oscap', 'ciscat', 'sca']; this.securityTabs = ['vuls', 'virustotal', 'osquery', 'docker']; - this.complianceTabs = ['pci', 'gdpr']; + this.complianceTabs = ['pci', 'gdpr', 'hipaa', 'nist']; this.wodlesConfiguration = null; @@ -256,6 +256,18 @@ export class OverviewController { this.selectedGdprIndex = 0; } + if (newTab === 'hipaa') { + const hipaaTabs = await this.commonData.getHIPAA(); + this.hipaaTabs = hipaaTabs; + this.selectedHipaaIndex = 0; + } + + if (newTab === 'nist') { + const nistTabs = await this.commonData.getNIST(); + this.nistTabs = nistTabs; + this.selectedNistIndex = 0; + } + if (newTab !== 'welcome') this.tabHistory.push(newTab); if (this.tabHistory.length > 2) diff --git a/public/controllers/settings/settings.js b/public/controllers/settings/settings.js index f27c20332..6c7581455 100644 --- a/public/controllers/settings/settings.js +++ b/public/controllers/settings/settings.js @@ -386,6 +386,8 @@ export class SettingsController { tmpData.extensions.audit = config['extensions.audit']; tmpData.extensions.pci = config['extensions.pci']; tmpData.extensions.gdpr = config['extensions.gdpr']; + tmpData.extensions.hipaa = config['extensions.hipaa']; + tmpData.extensions.nist = config['extensions.nist']; tmpData.extensions.oscap = config['extensions.oscap']; tmpData.extensions.ciscat = config['extensions.ciscat']; tmpData.extensions.aws = config['extensions.aws']; @@ -674,7 +676,7 @@ export class SettingsController { */ async getAppInfo() { try { - const data = await this.genericReq.request('GET', '/elastic/setup'); + const data = await this.genericReq.request('GET', '/api/setup'); this.appInfo = {}; this.appInfo['app-version'] = data.data.data['app-version']; this.appInfo['installationDate'] = data.data.data['installationDate']; diff --git a/public/directives/index.js b/public/directives/index.js index 3967f2d3f..ef15a29aa 100644 --- a/public/directives/index.js +++ b/public/directives/index.js @@ -29,8 +29,6 @@ import './wz-multiple-selector/wz-multiple-selector'; import './wz-multiple-selector/wz-multiple-selector.less'; import './wz-list-manage/wz-list-manage'; import './wz-kbn-switch/wz-kbn-switch'; -import './wz-register-agents/wz-register-agents'; -import './wz-register-agents/wz-register-agents.less'; import './wz-add-filter-chip/wz-add-filter-chip'; import './wz-add-filter-chip/wz-add-filter-chip.less'; import './wz-src/wz-src'; diff --git a/public/directives/wz-add-filter-chip/wz-add-filter-chip.less b/public/directives/wz-add-filter-chip/wz-add-filter-chip.less index 8f6344e4c..1adefd69c 100644 --- a/public/directives/wz-add-filter-chip/wz-add-filter-chip.less +++ b/public/directives/wz-add-filter-chip/wz-add-filter-chip.less @@ -30,6 +30,7 @@ .chips-dropdown .dropdown-menu{ display: block !important; + right: 0; } .ui-select-choices-row-inner { diff --git a/public/directives/wz-config-viewer/wz-config-viewer.js b/public/directives/wz-config-viewer/wz-config-viewer.js index 95de509a3..f6538d039 100644 --- a/public/directives/wz-config-viewer/wz-config-viewer.js +++ b/public/directives/wz-config-viewer/wz-config-viewer.js @@ -13,6 +13,7 @@ import template from './wz-config-viewer.html'; import { uiModules } from 'ui/modules'; import CodeMirror from '../../utils/codemirror/lib/codemirror'; +import chrome from 'ui/chrome'; const app = uiModules.get('app/wazuh', []); @@ -32,6 +33,7 @@ class WzConfigViewer { controller($scope, $document, $window) { const window = $window; + const IS_DARK_THEME = chrome.getUiSettingsClient().get('theme:darkMode'); const setJsonBox = () => { $scope.jsonCodeBox = CodeMirror.fromTextArea( $document[0].getElementById('viewer_json_box'), @@ -42,7 +44,7 @@ class WzConfigViewer { matchBrackets: true, mode: { name: 'javascript', json: true }, readOnly: true, - theme: 'ttcn', + theme: IS_DARK_THEME ? 'lesser-dark' : 'ttcn', foldGutter: true, styleSelectedText: true, gutters: ['CodeMirror-foldgutter'] @@ -60,7 +62,7 @@ class WzConfigViewer { matchBrackets: true, mode: 'text/xml', readOnly: true, - theme: 'ttcn', + theme: IS_DARK_THEME ? 'lesser-dark' : 'ttcn', foldGutter: true, styleSelectedText: true, gutters: ['CodeMirror-foldgutter'] diff --git a/public/directives/wz-register-agents/wz-register-agents.html b/public/directives/wz-register-agents/wz-register-agents.html deleted file mode 100644 index 2a71ff4f3..000000000 --- a/public/directives/wz-register-agents/wz-register-agents.html +++ /dev/null @@ -1,221 +0,0 @@ -
- - - Linux - - Windows - - OSX - - -
-
-
-
-

1

-
-

{{registerObj.systems[0].steps[0].title}}

-
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
- - Add agent - -
-
-
-
-
-
-

2

-
-

{{registerObj.systems[0].steps[1].title}}

-
-
-

Please execute the following command:

-
{{registerObj.systems[0].steps[1].code}}
- - Next - -
-
-
-
-
-

3

-
-

{{registerObj.systems[0].steps[2].title}}

-
-
-
- -
-
- -
-
-
-

Please execute the - following - command:

-
- sed -i 's/MANAGER_IP/{{registerObj.systems[0].steps[2].managerIp}}/g' /var/ossec/etc/ossec.conf -
- Next - -
-
-
-
-
-

4

-
-

{{registerObj.systems[0].steps[3].title}}

-
-
- - Restart agent - -
-
-
- - -
-
-
-
-

1

-
-

{{registerObj.systems[1].steps[0].title}}

-
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
-

Please - execute the following command:

-
- wazuh-agent-3.8.2-1.msi /q ADDRESS="{{registerObj.systems[1].steps[0].managerIP}}" - AUTHD_SERVER="{{registerObj.systems[1].steps[0].authdIP}}" - AGENT_NAME="{{registerObj.systems[1].steps[0].agentName}}" -
- - Next - -
-
-
- - -
-
-
-
-

1

-
-

{{registerObj.systems[2].steps[0].title}}

-
-
-
- -
-
- -
-
-
-

Please execute the - following - command:

-
- /Library/Ossec/bin/agent-auth -m {{registerObj.systems[2].steps[0].managerIp}} -
- Next - -
-
-
-
-
-

2

-
-

{{registerObj.systems[2].steps[1].title}}

-
-
-

Please execute the following command:

-
sed -i '' -e 's/MANAGER_IP/{{registerObj.systems[2].steps[0].managerIp}}/g' - /Library/Ossec/etc/ossec.conf
- - Next - -
-
-
-
-
-

3

-
-

{{registerObj.systems[2].steps[2].title}}

-
-
-

Please execute the following command:

-
- {{registerObj.systems[2].steps[2].code}} -
- - Next - -
-
-
-
\ No newline at end of file diff --git a/public/directives/wz-register-agents/wz-register-agents.less b/public/directives/wz-register-agents/wz-register-agents.less deleted file mode 100644 index 8d010a5c5..000000000 --- a/public/directives/wz-register-agents/wz-register-agents.less +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Wazuh app - Wazuh register agents stylesheet - * Copyright (C) 2015-2019 Wazuh, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Find more information about this on the LICENSE file. - */ - -/* -------------------------------------------------------------------------- */ -/* ------------------ Wazuh register agents stylesheet ---------------------- */ -/* -------------------------------------------------------------------------- */ - - -.tutorial{ - margin: 0 12%; -} - -.registerNewAgent .tutorial{ - margin: 0 !important; -} - -.tutorial-nav-bar .md-nav-bar{ - margin-bottom: 25px; -} -.tutorial-nav-bar .md-nav-bar ._md-nav-button{ -padding: 15px 20px!important; -} - -.tutorial-step{ - margin-bottom: 15px; -} - -.tutorial .tutorial-step:not(:last-child){ - border-bottom: 2px dashed #e9e9e9; -} - -.tutorial-header { - padding-bottom: 15px; -} - -.tutorial-body { - padding: 0px 0px 15px 40px; -} - -.tutorial-body button{ - width: 150px; -} - -.tutorial-body .layout-row button, .next-btn{ - margin: 18px 0 0 0!important; -} - -.tutorial-step.disabled .tutorial-body, .tutorial-step.completed .tutorial-body{ - display: none; -} - -.step-number{ - width: 30px; - height: 30px; - border-radius: 50%; - color: white; - line-height: 30px; - font-size: 20px; - text-align: center; -} -.tutorial-step.active .step-number{ - background: #007ba4; -} - -.tutorial-step.disabled .step-number{ - background: #c6c6c6; -} - -.tutorial-step.completed .step-number{ - background: #70ba56; -} - -.step-title{ - font-size: 17px; - line-height: 30px; - padding-left: 8px; -} - -.tutorial-step.active .step-title{ - color: #005571; -} - -.tutorial-step.disabled .step-title{ - color: #c6c6c6; -} - -.tutorial-step.completed .step-title{ - color: #70ba56; -} - -.tutorial .wz-code-viewer{ - text-align: left; - font-size: 12px!important; - padding: 5px; - height: auto; -} - -.tutorial-exit{ - font-family: monospace; - text-align: left; - padding: 8px 0 5px 0; - font-size: 12px; -} \ No newline at end of file diff --git a/public/directives/wz-tabs-eui/components/tabs.js b/public/directives/wz-tabs-eui/components/tabs.js new file mode 100644 index 000000000..3e13bdc45 --- /dev/null +++ b/public/directives/wz-tabs-eui/components/tabs.js @@ -0,0 +1,54 @@ +import React, { Component, Fragment } from 'react'; +import PropTypes from 'prop-types'; +import { EuiTabs, EuiTab } from '@elastic/eui'; + +export class Tabs extends Component { + constructor(props) { + super(props); + + this.tabs = []; + this.props.tabs.forEach(tab => { + this.tabs.push({ + id: tab.id, + name: tab.name + }); + }); + + this.state = { + selectedTabId: this.props.selectedTab + }; + } + + onSelectedTabChanged = id => { + this.setState({ + selectedTabId: id + }); + this.props.clickAction(id); + }; + + renderTabs() { + return this.tabs.map((tab, index) => ( + this.onSelectedTabChanged(tab.id)} + isSelected={tab.id === this.state.selectedTabId} + key={index} + > + {tab.name} + + )); + } + + render() { + return ( + + {this.renderTabs()} + + ); + } +} + +Tabs.propTypes = { + tabs: PropTypes.array, + selectedTab: PropTypes.string, + clickAction: PropTypes.func +}; diff --git a/public/directives/wz-tag-filter/wz-tag-filter.js b/public/directives/wz-tag-filter/wz-tag-filter.js index f6bd6b57d..d154a0849 100644 --- a/public/directives/wz-tag-filter/wz-tag-filter.js +++ b/public/directives/wz-tag-filter/wz-tag-filter.js @@ -434,6 +434,11 @@ app.directive('wzTagFilter', function() { } }); $('#wz-search-filter-bar-input').attr('autocomplete', 'off'); + + $scope.$on('reloadSearchFilterBar', () => { + buildQuery($scope.groupedTagList); + $scope.$applyAsync(); + }); load(); }, template diff --git a/public/directives/wz-xml-file-editor/wz-xml-file-editor.js b/public/directives/wz-xml-file-editor/wz-xml-file-editor.js index 199480a25..8ca2eed59 100644 --- a/public/directives/wz-xml-file-editor/wz-xml-file-editor.js +++ b/public/directives/wz-xml-file-editor/wz-xml-file-editor.js @@ -13,6 +13,7 @@ import template from './wz-xml-file-editor.html'; import CodeMirror from '../../utils/codemirror/lib/codemirror'; import { uiModules } from 'ui/modules'; +import chrome from 'ui/chrome'; const app = uiModules.get('app/wazuh', []); @@ -41,6 +42,7 @@ app.directive('wzXmlFileEditor', function() { $window ) { const window = $window; + const IS_DARK_THEME = chrome.getUiSettingsClient().get('theme:darkMode'); $scope.targetNameShown = $scope.targetName; $scope.configError = false; /** @@ -328,7 +330,7 @@ app.directive('wzXmlFileEditor', function() { matchClosing: true, matchBrackets: true, mode: 'text/xml', - theme: 'ttcn', + theme: IS_DARK_THEME ? 'lesser-dark' : 'ttcn', foldGutter: true, styleSelectedText: true, gutters: ['CodeMirror-foldgutter'] diff --git a/public/factories/tab-visualizations.js b/public/factories/tab-visualizations.js index 0df30df06..48412e971 100644 --- a/public/factories/tab-visualizations.js +++ b/public/factories/tab-visualizations.js @@ -26,6 +26,8 @@ export class TabVisualizations { audit: 9, gdpr: 6, pci: 6, + hipaa: 6, + nist: 6, virustotal: 6, configuration: 0, osquery: 5, @@ -43,6 +45,8 @@ export class TabVisualizations { audit: 6, pci: 5, gdpr: 5, + hipaa: 5, + nist: 5, aws: 8, virustotal: 7, osquery: 5, diff --git a/public/kibana-integrations/loader/visualize_data_loader.ts b/public/kibana-integrations/loader/visualize_data_loader.ts index 602e5a544..26733d1c3 100644 --- a/public/kibana-integrations/loader/visualize_data_loader.ts +++ b/public/kibana-integrations/loader/visualize_data_loader.ts @@ -109,6 +109,19 @@ export class VisualizeDataLoader { ); } + const valueAxes = (visParams || {}).valueAxes || false; + const hasSeries = ((this.visData || {}).series || []).length; + if (valueAxes && hasSeries) { + if (visParams.type !== 'area') { + visParams.valueAxes.forEach((axis: { scale: { max: number; }; }, idx: string | number) => { + const maxValue = Math.max.apply(Math, this.visData.series[idx].values.map((x: { y: any; }) => { return x.y; })); + const lengthMaxValue = maxValue.toString().length; + const addTo = parseInt('1' + '0'.repeat(lengthMaxValue - 1)); + axis.scale.max = maxValue + (addTo / 2); + }); + } + } + return { as: 'visualization', value: { diff --git a/public/less/common.less b/public/less/common.less index c682b985b..739941012 100644 --- a/public/less/common.less +++ b/public/less/common.less @@ -257,9 +257,9 @@ box-shadow: none !important; } -.btn-as-i:hover { +.btn-as-i:hover, .btn-as-i:focus { background: none !important; - color: #006bb4; + color: #006bb4!important; } /* Custom reporting button styles */ @@ -535,7 +535,7 @@ md-sidenav { .wz-md-card:not(.wz-metric-color) { box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1) !important; - border: 1px solid #d3dae6 !important; + border: 1px solid #d3dae6; overflow: hidden; } @@ -992,6 +992,17 @@ discover-app-w .container-fluid { background: #fff; } +.registerAgent{ + min-height: calc(~'100vh - 100px'); + background: #fafbfd; + padding-top: 25px; +} + +.refresh-report-button { + padding: 10px; + text-align: right; +} + .monitoring-discover form{ display: none; } diff --git a/public/less/dark_theme/bootstrap_light.css b/public/less/dark_theme/bootstrap_light.css index f7484715d..7593b08ab 100644 --- a/public/less/dark_theme/bootstrap_light.css +++ b/public/less/dark_theme/bootstrap_light.css @@ -696,233 +696,7 @@ margin-left: 0%; } } - .table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; - font-size: 14px; - } - .table thead { - font-size: 12px; - } - .table > thead > tr > th, - .table > tbody > tr > th, - .table > tfoot > tr > th, - .table > thead > tr > td, - .table > tbody > tr > td, - .table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #D3DAE6; - } - .table > thead > tr > th { - vertical-align: bottom; - border-bottom: 1px solid #D3DAE6; - } - .table > caption + thead > tr:first-child > th, - .table > colgroup + thead > tr:first-child > th, - .table > thead:first-child > tr:first-child > th, - .table > caption + thead > tr:first-child > td, - .table > colgroup + thead > tr:first-child > td, - .table > thead:first-child > tr:first-child > td { - border-top: 0; - } - .table > tbody + tbody { - border-top: 2px solid #D3DAE6; - } - .table .table { - background-color: #FFF; - } - .table-condensed > thead > tr > th, - .table-condensed > tbody > tr > th, - .table-condensed > tfoot > tr > th, - .table-condensed > thead > tr > td, - .table-condensed > tbody > tr > td, - .table-condensed > tfoot > tr > td { - padding: 5px; - font-size: 12px; - } - .table-bordered { - border: 1px solid #D3DAE6; - } - .table-bordered > thead > tr > th, - .table-bordered > tbody > tr > th, - .table-bordered > tfoot > tr > th, - .table-bordered > thead > tr > td, - .table-bordered > tbody > tr > td, - .table-bordered > tfoot > tr > td { - border: 1px solid #D3DAE6; - } - .table-bordered > thead > tr > th, - .table-bordered > thead > tr > td { - border-bottom-width: 2px; - } - table col[class*="col-"] { - position: static; - float: none; - display: table-column; - } - table td[class*="col-"], - table th[class*="col-"] { - position: static; - float: none; - display: table-cell; - } - .table > thead > tr > td.active, - .table > tbody > tr > td.active, - .table > tfoot > tr > td.active, - .table > thead > tr > th.active, - .table > tbody > tr > th.active, - .table > tfoot > tr > th.active, - .table > thead > tr.active > td, - .table > tbody > tr.active > td, - .table > tfoot > tr.active > td, - .table > thead > tr.active > th, - .table > tbody > tr.active > th, - .table > tfoot > tr.active > th { - background-color: #D3DAE6; - } - .table-hover > tbody > tr > td.active:hover, - .table-hover > tbody > tr > th.active:hover, - .table-hover > tbody > tr.active:hover > td, - .table-hover > tbody > tr:hover > .active, - .table-hover > tbody > tr.active:hover > th { - background-color: #c3ccdd; - } - .table > thead > tr > td.success, - .table > tbody > tr > td.success, - .table > tfoot > tr > td.success, - .table > thead > tr > th.success, - .table > tbody > tr > th.success, - .table > tfoot > tr > th.success, - .table > thead > tr.success > td, - .table > tbody > tr.success > td, - .table > tfoot > tr.success > td, - .table > thead > tr.success > th, - .table > tbody > tr.success > th, - .table > tfoot > tr.success > th { - background-color: #017D73; - } - .table-hover > tbody > tr > td.success:hover, - .table-hover > tbody > tr > th.success:hover, - .table-hover > tbody > tr.success:hover > td, - .table-hover > tbody > tr:hover > .success, - .table-hover > tbody > tr.success:hover > th { - background-color: #01645c; - } - .table > thead > tr > td.info, - .table > tbody > tr > td.info, - .table > tfoot > tr > td.info, - .table > thead > tr > th.info, - .table > tbody > tr > th.info, - .table > tfoot > tr > th.info, - .table > thead > tr.info > td, - .table > tbody > tr.info > td, - .table > tfoot > tr.info > td, - .table > thead > tr.info > th, - .table > tbody > tr.info > th, - .table > tfoot > tr.info > th { - background-color: #006BB4; - } - .table-hover > tbody > tr > td.info:hover, - .table-hover > tbody > tr > th.info:hover, - .table-hover > tbody > tr.info:hover > td, - .table-hover > tbody > tr:hover > .info, - .table-hover > tbody > tr.info:hover > th { - background-color: #005c9b; - } - .table > thead > tr > td.warning, - .table > tbody > tr > td.warning, - .table > tfoot > tr > td.warning, - .table > thead > tr > th.warning, - .table > tbody > tr > th.warning, - .table > tfoot > tr > th.warning, - .table > thead > tr.warning > td, - .table > tbody > tr.warning > td, - .table > tfoot > tr.warning > td, - .table > thead > tr.warning > th, - .table > tbody > tr.warning > th, - .table > tfoot > tr.warning > th { - background-color: #F5A700; - } - .table-hover > tbody > tr > td.warning:hover, - .table-hover > tbody > tr > th.warning:hover, - .table-hover > tbody > tr.warning:hover > td, - .table-hover > tbody > tr:hover > .warning, - .table-hover > tbody > tr.warning:hover > th { - background-color: #dc9600; - } - .table > thead > tr > td.danger, - .table > tbody > tr > td.danger, - .table > tfoot > tr > td.danger, - .table > thead > tr > th.danger, - .table > tbody > tr > th.danger, - .table > tfoot > tr > th.danger, - .table > thead > tr.danger > td, - .table > tbody > tr.danger > td, - .table > tfoot > tr.danger > td, - .table > thead > tr.danger > th, - .table > tbody > tr.danger > th, - .table > tfoot > tr.danger > th { - background-color: #BD271E; - } - .table-hover > tbody > tr > td.danger:hover, - .table-hover > tbody > tr > th.danger:hover, - .table-hover > tbody > tr.danger:hover > td, - .table-hover > tbody > tr:hover > .danger, - .table-hover > tbody > tr.danger:hover > th { - background-color: #a7221b; - } - .table-responsive { - overflow-x: auto; - min-height: 0.01%; - } - @media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #D3DAE6; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } - } + .form-control { display: block; width: 100%; diff --git a/public/less/dark_theme/wz_theme_dark.css b/public/less/dark_theme/wz_theme_dark.css index 70c1be765..e4e658954 100644 --- a/public/less/dark_theme/wz_theme_dark.css +++ b/public/less/dark_theme/wz_theme_dark.css @@ -1,5705 +1,277 @@ -.euiHeaderSectionItem__button, .euiListGroupItem__icon { +body.md-default-theme, +body, +html.md-default-theme, +html { + color: #dfe5ef !important; +} + +.euiHeaderSectionItem__button, +.euiListGroupItem__icon { color: #dfe5ef; } .euiToolTipAnchor { - color: white; + color: white; } -.euiBreadcrumbs--truncate - .euiBreadcrumb:not(.euiBreadcrumb--collapsed).euiBreadcrumb--last, - .euiNavDrawerGroup__item .euiListGroupItem__label, - .euiNavDrawer .euiNavDrawer__expandButton .euiListGroupItem__button{ +.app-wrapper-panel { + background-color: #1a1b20; +} + +.wz-md-card:not(.wz-metric-color) { + box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3), 0 1px 5px -2px rgba(0, 0, 0, 0.3); + background-color: #1D1E24; + border: 1px solid #343741; +} + +.wz-card-actions-vis { + color: white; + border-bottom: 1px solid #343741; +} + +.wz-card-actions.wz-card-actions-top, .columns-bar-active { + border-bottom: 1px solid #343741!important; + background: #16171c; color: #dfe5ef; - font-size: 14px; - line-height: 1.5; - font-family: 'Inter UI'; + border-top: none!important; } -.euiPanel { - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), - 0 1px 5px -2px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), - 0 1px 5px -2px rgba(152, 162, 179, 0.3); - background-color: #fff; - border: 1px solid #d3dae6; - border-radius: 4px; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.euiPanel.euiPanel--flexGrowZero { - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; -} -.euiPanel.euiPanel--isClickable { - display: block; - width: 100%; - text-align: left; - -webkit-transition: all 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: all 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); -} -.euiPanel.euiPanel--isClickable:hover, -.euiPanel.euiPanel--isClickable:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), - 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), - 0 2px 2px -1px rgba(152, 162, 179, 0.3); - -webkit-transform: translateY(-2px); - transform: translateY(-2px); - cursor: pointer; -} -.euiPanel.euiPanel--shadow { - -webkit-box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -1px rgba(152, 162, 179, 0.2), - 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -1px rgba(152, 162, 179, 0.2), - 0 2px 2px 0 rgba(152, 162, 179, 0.2); - border-bottom-color: rgba(152, 162, 179, 0.5); -} -.euiPanel.euiPanel--shadow.euiPanel--isClickable:hover, -.euiPanel.euiPanel--shadow.euiPanel--isClickable:focus { - -webkit-box-shadow: 0 12px 24px 0 rgba(152, 162, 179, 0.2), - 0 6px 12px 0 rgba(152, 162, 179, 0.2), 0 4px 4px 0 rgba(152, 162, 179, 0.2), - 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 12px 24px 0 rgba(152, 162, 179, 0.2), - 0 6px 12px 0 rgba(152, 162, 179, 0.2), 0 4px 4px 0 rgba(152, 162, 179, 0.2), - 0 2px 2px 0 rgba(152, 162, 179, 0.2); +.kuiButton--secondary:enabled:hover { + background: rgba(27, 169, 245, 0.1)!important; + color: #45b9f6!important; + border-color: #1BA9F5!important; } -.euiPanel.euiPanel--hasBetaBadge { - position: relative; - overflow: visible; - /* 2 */ -} -.euiPanel.euiPanel--hasBetaBadge .euiPanel__betaBadgeWrapper { - position: absolute; - top: -12px; - left: 50%; - -webkit-transform: translateX(-50%); - transform: translateX(-50%); - z-index: 3; - min-width: 40%; - /* 1 */ - max-width: calc(100% - 32px); -} -.euiPanel.euiPanel--hasBetaBadge .euiPanel__betaBadgeWrapper .euiToolTipAnchor, -.euiPanel.euiPanel--hasBetaBadge - .euiPanel__betaBadgeWrapper - .euiPanel__betaBadge { - width: 100%; - /* 1 */ -} -.euiPanel.euiPanel--hasBetaBadge - .euiPanel__betaBadgeWrapper - .euiPanel__betaBadge { - overflow: hidden; - text-overflow: ellipsis; - background-color: #fff; +.kuiButton--secondary { + color: #45b9f6!important; + border-color: #1BA9F5; + background: transparent; } -.euiPanel.euiPanel--paddingSmall { - padding: 8px; -} -.euiPanel.euiPanel--paddingSmall .euiPanel__betaBadgeWrapper { - max-width: calc(100% - 16px); -} - -.euiPanel.euiPanel--paddingMedium { - padding: 16px; -} -.euiPanel.euiPanel--paddingMedium .euiPanel__betaBadgeWrapper { - max-width: calc(100% - 32px); -} - -.euiPanel.euiPanel--paddingLarge { - padding: 24px; -} -.euiPanel.euiPanel--paddingLarge .euiPanel__betaBadgeWrapper { - max-width: calc(100% - 48px); -} - -.euiTextColor--default { - color: #343741; -} - -.euiTextColor--subdued { - color: #69707d; -} - -.euiTextColor--secondary { - color: #017d73; -} - -.euiTextColor--accent { - color: #dd0a73; -} - -.euiTextColor--warning { - color: #9b6900; -} - -.euiTextColor--danger { - color: #bd271e; -} - -.euiTextColor--ghost { - color: #717171; +.btn-info:hover { + background: #ebebeb17 !important; color: #fff !important; } -.euiFieldSearch { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, - background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; - padding-left: 40px; - -webkit-appearance: textfield; - /* 1 */ -} -.euiFieldSearch--fullWidth { - max-width: 100%; -} -.euiFieldSearch--compressed { - height: 32px; -} -.euiFieldSearch--inGroup { - height: 38px; - /* 2 */ -} -.euiFieldSearch--inGroup.euiFieldSearch--compressed { - height: 30px; - /* 2 */ -} -.euiFieldSearch::-webkit-input-placeholder { - color: #69707d; -} -.euiFieldSearch:-ms-input-placeholder { - color: #69707d; -} -.euiFieldSearch::-ms-input-placeholder { - color: #69707d; -} -.euiFieldSearch::placeholder { - color: #69707d; -} -.euiFieldSearch--compressed { - padding-top: 8px; - padding-bottom: 8px; -} -.euiFieldSearch--inGroup { - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -.euiFieldSearch:invalid { - /* 4 */ - background-image: linear-gradient( - to top, - #bd271e, - #bd271e 2px, - transparent 2px, - transparent 100% - ); - background-size: 100%; -} -.euiFieldSearch:focus { - /* 4 */ - background-color: white; - background-image: linear-gradient( - to top, - #006bb4, - #006bb4 2px, - transparent 2px, - transparent 100% - ); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); -} -.euiFieldSearch:disabled { - cursor: not-allowed; - color: #98a2b3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); -} -.euiFieldSearch:disabled::-webkit-input-placeholder { - color: #98a2b3; -} -.euiFieldSearch:disabled:-ms-input-placeholder { - color: #98a2b3; -} -.euiFieldSearch:disabled::-ms-input-placeholder { - color: #98a2b3; -} -.euiFieldSearch:disabled::placeholder { - color: #98a2b3; -} -.euiFieldSearch[readOnly] { - cursor: default; - background: rgba(211, 218, 230, 0.12); - border-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.euiFieldSearch-isLoading { - padding-right: 40px; -} -.euiFieldSearch::-webkit-search-decoration { - -webkit-appearance: none; /* 1 */ -} -.euiCallOut { - padding: 16px; - border-left: 2px solid transparent; -} -.euiCallOut.euiCallOut--small { - padding: 8px; -} -.euiCallOut--primary { - border-color: #006bb4; - background-color: #e6f0f8; -} -.euiCallOut--primary .euiCallOutHeader__icon { - fill: #006bb4; -} -.euiCallOut--primary .euiCallOutHeader__title { - color: #006bb4; -} -.euiCallOut--success { - border-color: #017d73; - background-color: #e6f2f1; -} -.euiCallOut--success .euiCallOutHeader__icon { - fill: #01776d; -} -.euiCallOut--success .euiCallOutHeader__title { - color: #01776d; -} -.euiCallOut--warning { - border-color: #f5a700; - background-color: #fef6e6; -} -.euiCallOut--warning .euiCallOutHeader__icon { - fill: #936400; -} -.euiCallOut--warning .euiCallOutHeader__title { - color: #936400; -} -.euiCallOut--danger { - border-color: #bd271e; - background-color: #f8e9e9; -} -.euiCallOut--danger .euiCallOutHeader__icon { - fill: #b4251d; -} -.euiCallOut--danger .euiCallOutHeader__title { - color: #b4251d; -} -/** - * 1. Align icon with first line of title text if it wraps. - * 2. If content exists under the header, space it appropriately. - * 3. Apply margin to all but last item in the flex. - */ -.euiCallOutHeader { - color: #1a1c21; - font-size: 1rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 600; - letter-spacing: -0.02em; - font-weight: 400; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: baseline; - -ms-flex-align: baseline; - align-items: baseline; - /* 1 */ -} -.euiCallOutHeader + * { - margin-top: 8px; /* 1 */ -} -.euiCallOutHeader > * + * { - margin-left: 8px; /* 3 */ -} -.euiCallOut--small .euiCallOutHeader { - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - font-weight: 400; -} -/** - * 1. Vertically center icon with first line of title. - */ -.euiCallOutHeader__icon { - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - -webkit-transform: translateY(2px); - transform: translateY(2px); - /* 1 */ -} -.euiFormControlLayout--group { - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, - background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 1px; - /* 1 */ -} -.euiFormControlLayout--group .euiFormControlLayout__childrenWrapper { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.euiFormControlLayout--group .euiFormControlLayout__prepend, -.euiFormControlLayout--group .euiFormControlLayout__append { - -ms-flex-negative: 0; - flex-shrink: 0; - height: 38px; - /* 1 */ - line-height: 16px; -} -.euiFormControlLayout--group .euiFormControlLayout__prepend:disabled, -.euiFormControlLayout--group .euiFormControlLayout__append:disabled { - background-color: #eef2f7; - color: #98a2b3; -} -.euiFormControlLayout--group .euiFormControlLayout__prepend.euiFormLabel, -.euiFormControlLayout--group .euiFormControlLayout__prepend.euiText, -.euiFormControlLayout--group .euiFormControlLayout__append.euiFormLabel, -.euiFormControlLayout--group .euiFormControlLayout__append.euiText { - white-space: nowrap; - margin-bottom: 0; - padding: 12px; - border: none; - background-color: #eef2f7; - line-height: 16px; -} -.euiFormControlLayout--group .euiFormControlLayout__prepend { - border-right: 1px solid rgba(0, 0, 0, 0.1); -} -.euiFormControlLayout--group .euiFormControlLayout__append { - border-left: 1px solid rgba(0, 0, 0, 0.1); -} -.euiFormControlLayout--group.euiFormControlLayout--compressed - .euiFormControlLayout__prepend, -.euiFormControlLayout--group.euiFormControlLayout--compressed - .euiFormControlLayout__append { - height: 30px; - /* 1 */ -} -.euiFormControlLayout--group.euiFormControlLayout--compressed - .euiFormControlLayout__prepend.euiFormLabel, -.euiFormControlLayout--group.euiFormControlLayout--compressed - .euiFormControlLayout__prepend.euiText, -.euiFormControlLayout--group.euiFormControlLayout--compressed - .euiFormControlLayout__append.euiFormLabel, -.euiFormControlLayout--group.euiFormControlLayout--compressed - .euiFormControlLayout__append.euiText { - padding-top: 8px; - padding-bottom: 8px; -} -.euiFormControlLayoutIcons { - pointer-events: none; - position: absolute; - top: 0; - bottom: 0; - left: 12px; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} -.euiFormControlLayoutIcons > * + * { - margin-left: 6px; -} -.euiFormControlLayoutIcons--right { - left: auto; - right: 12px; -} -*:disabled + .euiFormControlLayoutIcons { - cursor: not-allowed; - color: #98a2b3; -} -.euiFormControlLayoutClearButton { - width: 16px; - height: 16px; - pointer-events: all; - background-color: #98a2b3; - border-radius: 16px; - line-height: 0; -} -.euiFormControlLayoutClearButton:focus { - -webkit-animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal - forwards focusRingAnimate; - animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards - focusRingAnimate; -} -.euiFormControlLayoutClearButton .euiFormControlLayoutClearButton__icon { - width: 8px; - height: 8px; - fill: #fff; - stroke: #fff; - stroke-width: 2px; -} -.euiFormControlLayoutCustomIcon { - pointer-events: none; -} -.euiFormControlLayoutCustomIcon .euiFormControlLayoutCustomIcon__icon { - -webkit-transform: translateY(-1px); - transform: translateY(-1px); -} -.euiFormControlLayoutCustomIcon--clickable { - width: 16px; - height: 16px; - pointer-events: all; -} -.euiFormControlLayoutCustomIcon--clickable - .euiFormControlLayoutCustomIcon__icon { - vertical-align: baseline; - -webkit-transform: none; - transform: none; -} -.euiFormControlLayoutCustomIcon--clickable:focus { - -webkit-animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal - forwards focusRingAnimate; - animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards - focusRingAnimate; -} -.euiFormControlLayoutCustomIcon--clickable:disabled { - cursor: not-allowed; - color: #98a2b3; -} -.euiFormErrorText { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - padding-top: 8px; - color: #bd271e; -} -.euiFormHelpText { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - padding-top: 8px; - color: #69707d; -} -.euiDatePickerRange { - max-width: 400px; - width: 100%; - height: auto; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, - background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 1px; - /* 1 */ -} -.euiDatePickerRange--fullWidth { - max-width: 100%; -} -.euiDatePickerRange--compressed { - height: 32px; -} -.euiDatePickerRange--inGroup { - height: 38px; /* 2 */ -} -.euiDatePickerRange--inGroup.euiDatePickerRange--compressed { - height: 30px; - /* 2 */ -} -.euiDatePickerRange > * { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; -} -.euiDatePickerRange .euiFieldText.euiDatePicker { - -webkit-box-shadow: none !important; - box-shadow: none !important; - text-align: center; -} -.euiDatePickerRange .react-datepicker-popper .euiFieldText.euiDatePicker { - text-align: left; -} -.euiDatePickerRange--inGroup { - -webkit-box-shadow: none; - box-shadow: none; - padding: 0; -} -.euiDatePickerRange--inGroup .euiDatePicker { - height: 38px; -} -.euiDatePickerRange > .euiDatePickerRange__icon { - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - padding-left: 12px; - padding-right: 12px; -} -.euiDatePickerRange > .euiDatePickerRange__delimeter { - line-height: 1 !important; - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - padding-left: 6px; - padding-right: 6px; -} -.euiDatePickerRange--readOnly { - background: #eef2f7; -} -.euiDatePopoverButton__popover .euiDatePopoverButton__popoverAnchor { - display: block; -} -.euiDatePopoverButton { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - display: block; - width: 100%; - padding: 0 8px; - line-height: 38px; - height: 38px; - word-break: break-all; - -webkit-transition: background 150ms ease-in; - transition: background 150ms ease-in; -} -.euiDatePopoverButton::-webkit-input-placeholder { - color: #69707d; -} -.euiDatePopoverButton:-ms-input-placeholder { - color: #69707d; -} -.euiDatePopoverButton::-ms-input-placeholder { - color: #69707d; -} -.euiDatePopoverButton::placeholder { - color: #69707d; -} -.euiDatePopoverButton-isSelected, -.euiDatePopoverButton-needsUpdating, -.euiDatePopoverButton:hover, -.euiDatePopoverButton:focus { - background-color: #e6f2f1; -} -.euiDatePopoverButton-needsUpdating { - color: #01776d; -} -.euiDatePopoverButton-isInvalid { - background-color: #f8e9e9; - color: #b4251d; -} -.euiDatePopoverButton--start { - text-align: right; -} -.euiDatePopoverButton--end { - text-align: left; -} -.euiDatePopoverContent { - width: 400px; - max-width: 100%; -} -.euiDatePopoverContent__padded { - padding: 8px; -} -.euiDatePopoverContent__padded--large { - padding: 16px; -} -.euiQuickSelectPopover__content { - width: 400px; - max-width: 100%; -} -.euiQuickSelectPopover__section { - scrollbar-width: thin; - max-height: 132px; - overflow: hidden; - overflow-y: auto; -} -.euiQuickSelectPopover__section::-webkit-scrollbar { - width: 16px; - height: 16px; -} -.euiQuickSelectPopover__section::-webkit-scrollbar-thumb { - background-color: rgba(105, 112, 125, 0.5); - border: 6px solid transparent; - background-clip: content-box; -} -.euiQuickSelectPopover__section::-webkit-scrollbar-corner, -.euiQuickSelectPopover__section::-webkit-scrollbar-track { - background-color: transparent; -} -.euiQuickSelectPopover__buttonText { - margin-right: 4px !important; -} -.euiQuickSelect__applyButton { - min-width: 0; -} -.euiRefreshInterval__startButton { - min-width: 90px; -} -.euiSuperDatePicker__flexWrapper { - max-width: 100%; - width: 606px; -} -.euiSuperDatePicker__flexWrapper--isAutoRefreshOnly { - width: 400px; -} -.euiSuperDatePicker__flexWrapper--noUpdateButton { - width: 480px; -} -.euiSuperDatePicker { - max-width: 100% !important; -} -.euiSuperDatePicker > .euiFormControlLayout__childrenWrapper { - -webkit-box-flex: 1; - -ms-flex: 1 1 100%; - flex: 1 1 100%; - overflow: hidden; -} -.euiSuperDatePicker - > .euiFormControlLayout__childrenWrapper - > .euiDatePickerRange { - max-width: none; - width: auto; -} -.euiSuperDatePicker__prettyFormat { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - display: block; - width: 100%; - padding: 0 8px; - line-height: 38px; - height: 38px; - word-break: break-all; - -webkit-transition: background 150ms ease-in; - transition: background 150ms ease-in; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; - text-align: left; -} -.euiSuperDatePicker__prettyFormat::-webkit-input-placeholder { - color: #69707d; -} -.euiSuperDatePicker__prettyFormat:-ms-input-placeholder { - color: #69707d; -} -.euiSuperDatePicker__prettyFormat::-ms-input-placeholder { - color: #69707d; -} -.euiSuperDatePicker__prettyFormat::placeholder { - color: #69707d; -} -.euiSuperDatePicker__prettyFormat:hover, -.euiSuperDatePicker__prettyFormat:focus { - text-decoration: none; -} -.euiSuperDatePicker__prettyFormat:hover .euiSuperDatePicker__prettyFormatLink, -.euiSuperDatePicker__prettyFormat:focus .euiSuperDatePicker__prettyFormatLink { - text-decoration: underline; -} -.euiSuperDatePicker__prettyFormatLink { - color: #006bb4; - padding-left: 4px; - -ms-flex-negative: 0; - flex-shrink: 0; -} -.globalFilterItem { - line-height: 28px!important; - border: none; - color: #343741; -} -.euiButtonEmpty.euiButtonEmpty--iconRight .euiButtonEmpty__content { - height: 100%; - width: 100%; - vertical-align: middle; - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; -} -.globalFilterItem:not(.globalFilterItem-isDisabled) { - background-color: #fbfcfd!important; - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1)!important; -} -.euiFieldText { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, - background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; - /* Invalid state normally comes from :invalid, but several components - /* like EuiDatePicker need it toggled through an extra class. - */ -} -.euiFieldText--fullWidth { - max-width: 100%; -} -.euiFieldText--compressed { - height: 32px; -} -.euiFieldText--inGroup { - height: 38px; /* 2 */ -} -.euiFieldText--inGroup.euiFieldText--compressed { - height: 30px; /* 2 */ -} -.euiFieldText::-webkit-input-placeholder { - color: #69707d; -} -.euiFieldText:-ms-input-placeholder { - color: #69707d; -} -.euiFieldText::-ms-input-placeholder { - color: #69707d; -} -.euiFieldText::placeholder { - color: #69707d; -} -.euiFieldText--compressed { - padding-top: 8px; - padding-bottom: 8px; -} -.euiFieldText--inGroup { - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -.euiFieldText:invalid { - /* 4 */ - background-image: linear-gradient( - to top, - #bd271e, - #bd271e 2px, - transparent 2px, - transparent 100% - ); - background-size: 100%; -} -.euiFieldText:focus { - /* 4 */ - background-color: white; - background-image: linear-gradient( - to top, - #006bb4, - #006bb4 2px, - transparent 2px, - transparent 100% - ); - background-size: 100% 100%; /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); -} -.euiFieldText:disabled { - cursor: not-allowed; - color: #98a2b3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); -} -.euiFieldText:disabled::-webkit-input-placeholder { - color: #98a2b3; -} -.euiFieldText:disabled:-ms-input-placeholder { - color: #98a2b3; -} -.euiFieldText:disabled::-ms-input-placeholder { - color: #98a2b3; -} -.euiFieldText:disabled::placeholder { - color: #98a2b3; -} -.euiFieldText[readOnly] { - cursor: default; - background: rgba(211, 218, 230, 0.12); - border-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.euiFieldText--withIcon { - padding-left: 40px; -} -.euiFieldText-isLoading { - padding-right: 40px; -} -.euiFieldText.euiFieldText-isInvalid { - background-image: linear-gradient( - to top, - #bd271e, - #bd271e 2px, - transparent 2px, - transparent 100% - ); - background-size: 100%; -} -.euiFilterButton { - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; - height: 38px; /* 1 */ - font-size: 14px; -} -.euiFilterButton:not(:last-child):not(.euiFilterButton--noDivider) { - border-right: 1px solid rgba(0, 0, 0, 0.1); -} -.euiFilterButton:disabled { - font-style: italic; -} -.euiFilterButton:hover:not(:disabled), -.euiFilterButton:focus { - text-decoration: none; -} -.euiFilterButton:hover:not(:disabled) .euiFilterButton__textShift, -.euiFilterButton:focus .euiFilterButton__textShift { - text-decoration: underline; -} -.euiFilterButton.euiFilterButton--grow { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - width: 100%; - text-align: left; -} -.euiFilterButton.euiFilterButton--grow .euiButtonEmpty__content { - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; -} -.euiFilterButton.euiFilterButton-hasActiveFilters { - font-weight: 500; -} -.euiFilterButton .euiFilterButton__notification { - margin-left: 8px; - vertical-align: text-bottom; -} -.euiFilterButton__text-hasNotification { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; -} -.euiFilterButton__textShift { - vertical-align: middle; -} -.euiFilterButton__textShift::after { - display: block; - content: attr(data-text); - font-weight: 700; - height: 0; - overflow: hidden; - visibility: hidden; -} -.euiFilterSelectItem { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - padding: 4px 12px; - display: block; - width: 100%; - text-align: left; - color: #343741; - border-bottom: 1px solid #d3dae6; - border-color: #eef2f7; -} -.euiFilterSelectItem:hover, -.euiFilterSelectItem:focus { - text-decoration: underline; -} -.euiFilterSelectItem:focus { - background-color: #e6f0f8; -} -.euiFilterSelectItem.euiContextMenuItem-isDisabled { - color: #c2c3c6; - cursor: default; -} -.euiFilterSelectItem.euiContextMenuItem-isDisabled:hover, -.euiFilterSelectItem.euiContextMenuItem-isDisabled:focus { - text-decoration: none; -} -.euiFilterSelect__items { - scrollbar-width: thin; - overflow-y: auto; - max-height: 480px; -} -.euiFilterSelect__items::-webkit-scrollbar { - width: 16px; - height: 16px; -} -.euiFilterSelect__items::-webkit-scrollbar-thumb { - background-color: rgba(105, 112, 125, 0.5); - border: 6px solid transparent; - background-clip: content-box; -} -.euiFilterSelect__items::-webkit-scrollbar-corner, -.euiFilterSelect__items::-webkit-scrollbar-track { - background-color: transparent; -} -.euiFilterSelect__note { - height: 64px; - text-align: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: distribute; - justify-content: space-around; -} -.euiFilterSelect__noteContent { - color: #69707d; - font-size: 14px; -} -.euiBadge { - font-size: 12px; - font-weight: 500; - line-height: 18px; /* 1 */ - display: inline-block; - text-decoration: none; - -webkit-box-sizing: content-box; - box-sizing: content-box; - border-radius: 2px; - border: solid 1px transparent; - padding: 0 8px; - background-color: transparent; - white-space: nowrap; - vertical-align: middle; - text-align: center; - overflow: hidden; -} -.euiBadge + .euiBadge { - margin-left: 4px; -} -.euiBadge .euiBadge__content { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - overflow: hidden; -} -.euiBadge .euiBadge__text { - overflow: hidden; - text-overflow: ellipsis; - -webkit-box-flex: 1; - -ms-flex: 1 1 auto; - flex: 1 1 auto; -} -.euiBadge:focus { - -webkit-animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal - forwards focusRingAnimate; - animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards - focusRingAnimate; -} -.euiBadge .euiBadge__icon { - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - margin-right: 4px; -} -.euiBadge .euiBadge__icon:focus { - background-color: rgba(255, 255, 255, 0.8); - color: #000; - border-radius: 2px; -} -.euiBadge.euiBadge--iconRight .euiBadge__content { - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; -} -.euiBadge.euiBadge--iconRight .euiBadge__content .euiBadge__icon { - margin-left: 4px; - margin-right: 0; -} -.euiBadge--default { - background-color: #d3dae6 !important; - color: #000 !important; -} -.euiBadge--primary { - background-color: #69b2e4; - color: #000; -} -.euiBadge--secondary { - background-color: #70dad1; - color: #000; -} -.euiBadge--warning { - background-color: #e7c274; - color: #000; -} -.euiBadge--danger { - background-color: #ec8e88; - color: #000; -} -.euiBadge--accent { - background-color: #edc6d9; - color: #000; -} -.euiBadge--hollow { - background-color: #fff; - border-color: #d3dae6; - color: #343741; -} -.euiComboBox { - max-width: 400px; - width: 100%; - height: auto; - position: relative; /** - * 1. Allow pills to truncate their text with an ellipsis. - * 2. Don't allow pills to overlap with the caret or clear button. - * 3. The height on combo can be larger than normal text inputs. - */ /** - * 1. Force field height to match other field heights. - * 2. Force input height to expand to fill this element. - * 3. Reset appearance on Safari. - * 4. Fix react-input-autosize appearance. - * 5. Prevent a lot of input from causing the react-input-autosize to overflow the container. - */ -} -.euiComboBox--fullWidth { - max-width: 100%; -} -.euiComboBox--compressed { - height: 32px; -} -.euiComboBox--inGroup { - height: 38px; - /* 2 */ -} -.euiComboBox--inGroup.euiComboBox--compressed { - height: 30px; /* 2 */ -} -.euiComboBox--compressed, -.euiComboBox .euiFormControlLayout--compressed { - height: auto; -} -.euiComboBox .euiComboBox__inputWrap { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, - background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, - background-image 150ms ease-in, background-size 150ms ease-in, - -webkit-box-shadow 150ms ease-in; - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; - max-width: 400px; - width: 100%; - height: auto; - padding: 4px 8px; - padding-right: 40px; - /* 2 */ - display: -webkit-box; - display: -ms-flexbox; - display: flex; - /* 1 */ -} -.euiComboBox .euiComboBox__inputWrap::-webkit-input-placeholder { - color: #69707d; -} -.euiComboBox .euiComboBox__inputWrap:-ms-input-placeholder { - color: #69707d; -} -.euiComboBox .euiComboBox__inputWrap::-ms-input-placeholder { - color: #69707d; -} -.euiComboBox .euiComboBox__inputWrap::placeholder { - color: #69707d; -} -.euiComboBox .euiComboBox__inputWrap--withIcon { - padding-left: 40px; -} -.euiComboBox .euiComboBox__inputWrap--fullWidth { - max-width: 100%; -} -.euiComboBox .euiComboBox__inputWrap--compressed { - height: 32px; -} -.euiComboBox .euiComboBox__inputWrap--inGroup { - height: 38px; /* 2 */ -} -.euiComboBox - .euiComboBox__inputWrap--inGroup.euiComboBox - .euiComboBox__inputWrap--compressed { - height: 30px; /* 2 */ -} -.euiComboBox .euiComboBox__inputWrap.euiComboBox__inputWrap-isClearable { - padding-right: 56px; /* 2 */ -} -.euiComboBox .euiComboBox__inputWrap:not(.euiComboBox__inputWrap--noWrap) { - padding: 4px; - height: auto; /* 3 */ - -ms-flex-wrap: wrap; - flex-wrap: wrap; /* 1 */ - -ms-flex-line-pack: start; - align-content: flex-start; -} -.euiComboBox - .euiComboBox__inputWrap:not(.euiComboBox__inputWrap--noWrap):hover { - cursor: text; -} -.euiComboBox .euiComboBox__input { - display: -webkit-inline-box !important; - display: -ms-inline-flexbox !important; - display: inline-flex !important; /* 1 */ - height: 32px; - /* 2 */ - overflow: hidden; /* 5 */ -} -.euiComboBox .euiComboBox__input > input { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - /* 3 */ - padding: 0; - border: none; +#wz-search-filter-bar-input { background: transparent; - font-size: 14px; - color: #343741; - margin: 4px; - line-height: 1.5; - /* 4 */ -} -.euiComboBox.euiComboBox-isOpen .euiComboBox__inputWrap { - background-color: white; - background-image: linear-gradient( - to top, - #006bb4, - #006bb4 2px, - transparent 2px, - transparent 100% - ); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), - 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); -} -.euiComboBox.euiComboBox-isInvalid .euiComboBox__inputWrap { - background-image: linear-gradient( - to top, - #bd271e, - #bd271e 2px, - transparent 2px, - transparent 100% - ); - background-size: 100%; -} -.euiComboBox.euiComboBox-isDisabled .euiComboBox__inputWrap { - cursor: not-allowed; - color: #98a2b3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); -} -.euiComboBox.euiComboBox-isDisabled - .euiComboBox__inputWrap::-webkit-input-placeholder { - color: #98a2b3; -} -.euiComboBox.euiComboBox-isDisabled - .euiComboBox__inputWrap:-ms-input-placeholder { - color: #98a2b3; -} -.euiComboBox.euiComboBox-isDisabled - .euiComboBox__inputWrap::-ms-input-placeholder { - color: #98a2b3; -} -.euiComboBox.euiComboBox-isDisabled .euiComboBox__inputWrap::placeholder { - color: #98a2b3; -} -.euiComboBox.euiComboBox--compressed .euiComboBox__inputWrap { - line-height: 32px; - /* 2 */ - padding-top: 0; - padding-bottom: 0; -} -.euiComboBox__input { - max-width: 100%; -} -.euiComboBox__input input[aria-hidden='true'] { - border: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - outline: none !important; -} -.euiComboBoxPill { - margin: 4px !important; - line-height: 22px; - vertical-align: baseline; -} -.euiComboBoxPill--plainText { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - max-width: 100%; /* 1 */ - overflow: hidden !important; - text-overflow: ellipsis !important; - white-space: nowrap !important; - word-wrap: normal !important; /* 2 */ - line-height: 24px; - font-size: 14px; - padding: 0; - color: #343741; - vertical-align: middle; - display: inline-block; -} -.euiComboBoxPlaceholder { - position: absolute; - pointer-events: none; - padding: 0 4px; - line-height: 32px; - color: #98a2b3; - margin-bottom: 0 !important; -} -.euiComboBoxOptionsList { - max-width: 400px; - width: 100%; - height: auto; - /* 3 */ - z-index: 8001; - position: absolute; - /* 2 */ - top: 0; - /* 2 */ } - .euiComboBoxOptionsList--fullWidth { - max-width: 100%; } - .euiComboBoxOptionsList--compressed { - height: 32px; } - .euiComboBoxOptionsList--inGroup { - height: 38px; - /* 2 */ } - .euiComboBoxOptionsList--inGroup.euiComboBoxOptionsList--compressed { - height: 30px; - /* 2 */ } - .euiComboBoxOptionsList .ReactVirtualized__List { - scrollbar-width: thin; } - .euiComboBoxOptionsList .ReactVirtualized__List::-webkit-scrollbar { - width: 16px; - height: 16px; } - .euiComboBoxOptionsList .ReactVirtualized__List::-webkit-scrollbar-thumb { - background-color: rgba(105, 112, 125, 0.5); - border: 6px solid transparent; - background-clip: content-box; } - .euiComboBoxOptionsList .ReactVirtualized__List::-webkit-scrollbar-corner, .euiComboBoxOptionsList .ReactVirtualized__List::-webkit-scrollbar-track { - background-color: transparent; } - .euiComboBoxOptionsList.euiComboBoxOptionsList--bottom { - /* 4 */ - -webkit-box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -1px rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -1px rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); } - .euiComboBoxOptionsList.euiComboBoxOptionsList--top { - /* 4 */ - -webkit-box-shadow: 0 -2px 4px -1px rgba(152, 162, 179, 0.2), 0 0 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 -2px 4px -1px rgba(152, 162, 179, 0.2), 0 0 2px 0 rgba(152, 162, 179, 0.2); } - - .euiComboBoxOptionsList--bottom { - border-radius: 0 0 4px 4px !important; - border-top: none !important; } - - .euiComboBoxOptionsList--top { - border-radius: 4px 4px 0 0 !important; } - - /** - * 1. Prevent really long input from overflowing the container. - */ - .euiComboBoxOptionsList__empty { - padding: 8px; - text-align: center; - color: #69707D; - word-wrap: break-word; - /* 1 */ } - - .euiComboBoxOptionsList__rowWrap { - padding: 0; - max-height: 200px; - overflow: hidden; } - - .euiComboBoxOption { - font-size: 14px; - padding: 4px 8px 4px 16px; - width: 100%; - text-align: left; - border: 1px solid #D3DAE6; - border-color: transparent; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; } - .euiComboBoxOption:hover { - text-decoration: underline; } - .euiComboBoxOption.euiComboBoxOption-isFocused { - cursor: pointer; - color: #006BB4; - background-color: #e6f0f8; } - .euiComboBoxOption.euiComboBoxOption-isDisabled { - color: #98A2B3; - cursor: not-allowed; } - .euiComboBoxOption.euiComboBoxOption-isDisabled:hover { - text-decoration: none; } - - .euiComboBoxOption__content { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; } - - /** - * 1. Force each title to be the same height as an option, so that the virtualized scroll logic - * works. - */ - .euiComboBoxTitle { - font-size: 12px; - padding: 11px 8px 4px; - /* 1 */ - width: 100%; - font-weight: 700; - color: #000; } - - .euiContextMenu { - width: 256px; - max-width: 100%; - position: relative; - overflow: hidden; - -webkit-transition: height 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: height 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - border-radius: 4px; } - .euiContextMenu .euiContextMenu__content { - padding: 8px; } -.euiSwitch { - position: relative; - display: inline-block; - min-height: 20px; /** - * 1. The input is "hidden" but still focusable. - * 2. Make sure it's still hidden when [disabled]. - */ /** - * The thumb is slightly scaled when in use, unless it's disabled. - */ - /** - * When input is not checked, we shift around the positioning of sibling/child selectors. - */ -} -.euiSwitch .euiSwitch__label { - padding-left: 8px; - line-height: 20px; - font-size: 14px; - vertical-align: middle; -} -.euiSwitch .euiSwitch__input, -.euiSwitch .euiSwitch__input[disabled] { - position: absolute; - opacity: 0; /* 1 */ - width: 100%; - height: 100%; - cursor: pointer; -} -.euiSwitch .euiSwitch__input:focus + .euiSwitch__body .euiSwitch__thumb { - -webkit-animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal - forwards focusRingAnimate; - animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards - focusRingAnimate; - border-color: #006bb4; -} -.euiSwitch .euiSwitch__body { - pointer-events: none; - width: 44px; - height: 20px; - background-color: #006bb4; - display: inline-block; - position: relative; - border-radius: 20px; - vertical-align: middle; -} -.euiSwitch .euiSwitch__thumb { - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - padding: 9px; - border: 1px solid #c9cbcd; - background: #fff no-repeat center; - border-radius: 18px; - -webkit-transition: background-color 150ms ease-in, border-color 150ms ease-in; - transition: background-color 150ms ease-in, border-color 150ms ease-in; - position: absolute; - display: inline-block; - left: 24px; - -webkit-transition: border-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - background-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - left 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - -webkit-transform 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: border-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - background-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - left 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - -webkit-transform 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: border-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - background-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - left 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - transform 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: border-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - background-color 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - left 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - transform 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - -webkit-transform 250ms cubic-bezier(0.34, 1.61, 0.7, 1); -} -.euiSwitch .euiSwitch__track { - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - overflow: hidden; - border-radius: 20px; -} -.euiSwitch .euiSwitch__icon { - position: absolute; - right: -34px; - top: 2px; - bottom: 0; - width: 42px; - height: 16px; - -webkit-transition: left 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - right 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: left 250ms cubic-bezier(0.34, 1.61, 0.7, 1), - right 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - fill: #343741; -} -.euiSwitch .euiSwitch__icon--checked { - right: auto; - left: -8px; - fill: #fff; -} -.euiSwitch:hover - .euiSwitch__input:not(:disabled) - ~ .euiSwitch__body - .euiSwitch__thumb { - -webkit-transform: scale(1.05); - transform: scale(1.05); -} -.euiSwitch:active .euiSwitch__thumb { - -webkit-transform: scale(0.95); - transform: scale(0.95); -} -.euiSwitch .euiSwitch__input:disabled:hover { - cursor: not-allowed; -} -.euiSwitch .euiSwitch__input:disabled ~ .euiSwitch__body, -.euiSwitch .euiSwitch__input:checked:disabled ~ .euiSwitch__body { - background-color: rgba(152, 162, 179, 0.2); -} -.euiSwitch .euiSwitch__input:disabled ~ .euiSwitch__body .euiSwitch__thumb, -.euiSwitch - .euiSwitch__input:checked:disabled - ~ .euiSwitch__body - .euiSwitch__thumb { - border-color: #d3dae6; - background-color: #d3dae6; - -webkit-box-shadow: none; - box-shadow: none; - background-color: rgba(152, 162, 179, 0.2); -} -.euiSwitch .euiSwitch__input:disabled ~ .euiSwitch__body .euiSwitch__icon, -.euiSwitch - .euiSwitch__input:checked:disabled - ~ .euiSwitch__body - .euiSwitch__icon { - fill: #5e646f; -} -.euiSwitch .euiSwitch__input:disabled ~ .euiSwitch__body + label, -.euiSwitch .euiSwitch__input:checked:disabled ~ .euiSwitch__body + label { - color: #98a2b3; -} -.euiSwitch .euiSwitch__input:not(:checked):not(:disabled) ~ .euiSwitch__body { - background-color: rgba(152, 162, 179, 0.2); -} -.euiSwitch - .euiSwitch__input:not(:checked) - ~ .euiSwitch__body - .euiSwitch__thumb { - left: 0; -} -.euiSwitch .euiSwitch__input:not(:checked) ~ .euiSwitch__body .euiSwitch__icon { - right: -8px; -} -.euiSwitch - .euiSwitch__input:not(:checked) - ~ .euiSwitch__body - .euiSwitch__icon.euiSwitch__icon--checked { - right: auto; - left: -34px; -} -.euiButton { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - display: inline-block; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor: pointer; - height: 40px; - line-height: 40px; - text-decoration: none; - border: solid 1px transparent; - text-align: center; - -webkit-transition: all 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: all 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - white-space: nowrap; - max-width: 100%; - vertical-align: middle; - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - border-radius: 4px; - min-width: 112px; -} -.euiButton:hover:not(:disabled) { - -webkit-transform: translateY(-1px); - transform: translateY(-1px); -} -.euiButton:hover:not(:disabled), -.euiButton:focus { - text-decoration: underline; -} -.euiButton:focus { - -webkit-animation: euiButtonActive 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - animation: euiButtonActive 250ms cubic-bezier(0.34, 1.61, 0.7, 1); -} -.euiButton:active:not(:disabled) { - -webkit-transform: translateY(1px); - transform: translateY(1px); -} -.euiButton .euiButton__content { - height: 100%; - width: 100%; - vertical-align: middle; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 0 12px; -} -.euiButton .euiButton__content .euiButton__icon, -.euiButton .euiButton__content .euiButton__spinner { - -ms-flex-negative: 0; - flex-shrink: 0; -} -.euiButton .euiButton__content > * + * { - margin-left: 8px; /* 1 */ -} -.euiButton .euiButton__text { - text-overflow: ellipsis; - overflow: hidden; -} -.euiButton.euiButton--small { - height: 32px; - line-height: 32px; -} -.euiButton.euiButton--iconRight .euiButton__content { - height: 100%; - width: 100%; - vertical-align: middle; - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; -} -.euiButton.euiButton--iconRight .euiButton__content .euiButton__icon, -.euiButton.euiButton--iconRight .euiButton__content .euiButton__spinner { - -ms-flex-negative: 0; - flex-shrink: 0; -} -.euiButton.euiButton--iconRight .euiButton__content > * + * { - margin-left: 0; - /* 1 */ - margin-right: 8px; /* 1 */ -} -.euiButton:hover, -.euiButton:active { - -webkit-box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), - 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), - 0 2px 2px -1px rgba(152, 162, 179, 0.3); -} -.euiButton:enabled:hover, -.euiButton:enabled:focus { - background-color: rgba(0, 107, 180, 0.1); -} -.euiButton:disabled { - color: #c2c3c6; - border-color: #c2c3c6; - pointer-events: none; -} -.euiButton:disabled .euiButton__content { - pointer-events: auto; - cursor: not-allowed; -} -.euiButton:disabled.euiButton--fill { - background-color: #c2c3c6; - border-color: #c2c3c6; -} -.euiButton:disabled.euiButton--fill:hover, -.euiButton:disabled.euiButton--fill:focus { - background-color: #c2c3c6; - border-color: #c2c3c6; -} -.euiButton:disabled:hover, -.euiButton:disabled:focus { - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - text-decoration: none; -} -.euiButton--primary { - color: #006bb4; - border-color: #006bb4; -} -.euiButton--primary.euiButton--fill { - background-color: #006bb4; - border-color: #006bb4; - color: #fff; -} -.euiButton--primary.euiButton--fill:enabled:hover, -.euiButton--primary.euiButton--fill:enabled:focus { - background-color: #005c9b; - border-color: #005c9b; -} -.euiButton--primary.euiButton--fill:disabled .euiButton__spinner { - border-color: #006bb4 rgba(255, 255, 255, 0.7) rgba(255, 255, 255, 0.7) - rgba(255, 255, 255, 0.7); -} -.euiButton--primary:enabled { - -webkit-box-shadow: 0 2px 2px -1px rgba(54, 97, 126, 0.3); - box-shadow: 0 2px 2px -1px rgba(54, 97, 126, 0.3); -} -.euiButton--primary:enabled:hover, -.euiButton--primary:enabled:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(54, 97, 126, 0.15), - 0 2px 2px -1px rgba(54, 97, 126, 0.3); - box-shadow: 0 4px 8px 0 rgba(54, 97, 126, 0.15), - 0 2px 2px -1px rgba(54, 97, 126, 0.3); - background-color: rgba(0, 107, 180, 0.1); -} -.euiButton--secondary { - color: #017d73; - border-color: #017d73; -} -.euiButton--secondary.euiButton--fill { - background-color: #017d73; - border-color: #017d73; - color: #fff; -} -.euiButton--secondary.euiButton--fill:enabled:hover, -.euiButton--secondary.euiButton--fill:enabled:focus { - background-color: #01645c; - border-color: #01645c; -} -.euiButton--secondary.euiButton--fill:disabled .euiButton__spinner { - border-color: #006bb4 rgba(255, 255, 255, 0.7) rgba(255, 255, 255, 0.7) - rgba(255, 255, 255, 0.7); -} -.euiButton--secondary:enabled { - -webkit-box-shadow: 0 2px 2px -1px rgba(39, 87, 83, 0.3); - box-shadow: 0 2px 2px -1px rgba(39, 87, 83, 0.3); -} -.euiButton--secondary:enabled:hover, -.euiButton--secondary:enabled:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(39, 87, 83, 0.15), - 0 2px 2px -1px rgba(39, 87, 83, 0.3); - box-shadow: 0 4px 8px 0 rgba(39, 87, 83, 0.15), - 0 2px 2px -1px rgba(39, 87, 83, 0.3); - background-color: rgba(1, 125, 115, 0.1); -} -.euiButton--warning { - color: #9b6900; - border-color: #f5a700; -} -.euiButton--warning.euiButton--fill { - background-color: #f5a700; - border-color: #f5a700; - color: #000; -} -.euiButton--warning.euiButton--fill:enabled:hover, -.euiButton--warning.euiButton--fill:enabled:focus { - background-color: #dc9600; - border-color: #dc9600; -} -.euiButton--warning.euiButton--fill:disabled .euiButton__spinner { - border-color: #006bb4 rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7); -} -.euiButton--warning:enabled { - -webkit-box-shadow: 0 2px 2px -1px rgba(172, 140, 74, 0.3); - box-shadow: 0 2px 2px -1px rgba(172, 140, 74, 0.3); -} -.euiButton--warning:enabled:hover, -.euiButton--warning:enabled:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(172, 140, 74, 0.15), - 0 2px 2px -1px rgba(172, 140, 74, 0.3); - box-shadow: 0 4px 8px 0 rgba(172, 140, 74, 0.15), - 0 2px 2px -1px rgba(172, 140, 74, 0.3); - background-color: rgba(245, 167, 0, 0.1); -} -.euiButton--danger { - color: #bd271e; - border-color: #bd271e; -} -.euiButton--danger.euiButton--fill { - background-color: #bd271e; - border-color: #bd271e; - color: #fff; -} -.euiButton--danger.euiButton--fill:enabled:hover, -.euiButton--danger.euiButton--fill:enabled:focus { - background-color: #a7221b; - border-color: #a7221b; -} -.euiButton--danger.euiButton--fill:disabled .euiButton__spinner { - border-color: #006bb4 rgba(255, 255, 255, 0.7) rgba(255, 255, 255, 0.7) - rgba(255, 255, 255, 0.7); -} -.euiButton--danger:enabled { - -webkit-box-shadow: 0 2px 2px -1px rgba(123, 97, 96, 0.3); - box-shadow: 0 2px 2px -1px rgba(123, 97, 96, 0.3); -} -.euiButton--danger:enabled:hover, -.euiButton--danger:enabled:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(123, 97, 96, 0.15), - 0 2px 2px -1px rgba(123, 97, 96, 0.3); - box-shadow: 0 4px 8px 0 rgba(123, 97, 96, 0.15), - 0 2px 2px -1px rgba(123, 97, 96, 0.3); - background-color: rgba(189, 39, 30, 0.1); -} -.euiButton--ghost { - color: #fff; - border-color: #fff; -} -.euiButton--ghost.euiButton--fill { - background-color: #fff; - border-color: #fff; - color: #000; -} -.euiButton--ghost.euiButton--fill:enabled:hover, -.euiButton--ghost.euiButton--fill:enabled:focus { - background-color: #f2f2f2; - border-color: #f2f2f2; -} -.euiButton--ghost.euiButton--fill:disabled .euiButton__spinner { - border-color: #006bb4 rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7); -} -.euiButton--ghost:enabled { - -webkit-box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3); - box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3); -} -.euiButton--ghost:enabled:hover, -.euiButton--ghost:enabled:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.15), - 0 2px 2px -1px rgba(0, 0, 0, 0.3); - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.15), 0 2px 2px -1px rgba(0, 0, 0, 0.3); - background-color: rgba(255, 255, 255, 0.1); -} -.euiButton--ghost:disabled, -.euiButton--ghost:disabled:hover, -.euiButton--ghost:disabled:focus { - -webkit-box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3); - box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.3); -} -.euiButton--text { - color: #343741; - border-color: #69707d; -} -.euiButton--text.euiButton--fill { - background-color: #69707d; - border-color: #69707d; - color: #fff; -} -.euiButton--text.euiButton--fill:enabled:hover, -.euiButton--text.euiButton--fill:enabled:focus { - background-color: #5d646f; - border-color: #5d646f; -} -.euiButton--text.euiButton--fill:disabled .euiButton__spinner { - border-color: #006bb4 rgba(255, 255, 255, 0.7) rgba(255, 255, 255, 0.7) - rgba(255, 255, 255, 0.7); -} -.euiButton--text:enabled { - -webkit-box-shadow: 0 2px 2px -1px rgba(115, 115, 115, 0.3); - box-shadow: 0 2px 2px -1px rgba(115, 115, 115, 0.3); -} -.euiButton--text:enabled:hover, -.euiButton--text:enabled:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(115, 115, 115, 0.15), - 0 2px 2px -1px rgba(115, 115, 115, 0.3); - box-shadow: 0 4px 8px 0 rgba(115, 115, 115, 0.15), - 0 2px 2px -1px rgba(115, 115, 115, 0.3); - background-color: rgba(105, 112, 125, 0.1); -} -.euiButton--fullWidth { - display: block; - width: 100%; -} -/** - * 1. We don't want any of the animations that come inherited from the mixin. - * These should act like normal links instead. - * 2. Change the easing, quickness to not bounce so lighter backgrounds don't flash - */ -.euiButtonEmpty { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - display: inline-block; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor: pointer; - height: 40px; - line-height: 40px; - text-decoration: none; - border: solid 1px transparent; - text-align: center; - -webkit-transition: all 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: all 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - white-space: nowrap; - max-width: 100%; - vertical-align: middle; - border-color: transparent; - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-transform: none !important; - transform: none !important; - /* 1 */ - -webkit-animation: none !important; - animation: none !important; - /* 1 */ - -webkit-transition-timing-function: ease-in; - transition-timing-function: ease-in; /* 2 */ - -webkit-transition-duration: 150ms; - transition-duration: 150ms; /* 2 */ -} -.euiButtonEmpty:hover:not(:disabled) { - -webkit-transform: translateY(-1px); - transform: translateY(-1px); -} -.euiButtonEmpty:hover:not(:disabled), -.euiButtonEmpty:focus { - text-decoration: underline; -} -.euiButtonEmpty:focus { - -webkit-animation: euiButtonActive 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - animation: euiButtonActive 250ms cubic-bezier(0.34, 1.61, 0.7, 1); -} -.euiButtonEmpty:active:not(:disabled) { - -webkit-transform: translateY(1px); - transform: translateY(1px); -} -.euiButtonEmpty .euiButtonEmpty__content { - height: 100%; - width: 100%; - vertical-align: middle; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 0 8px; -} -.euiButtonEmpty .euiButtonEmpty__content .euiButton__icon, -.euiButtonEmpty .euiButtonEmpty__content .euiButton__spinner { - -ms-flex-negative: 0; - flex-shrink: 0; -} -.euiButtonEmpty .euiButtonEmpty__content > * + * { - margin-left: 8px; - /* 1 */ + color: white; } -.euiButtonEmpty.euiButtonEmpty--xSmall { - font-size: 14px; +.registerAgent { + background: #1a1b20!important; } -.euiButtonEmpty.euiButtonEmpty--iconRight .euiButtonEmpty__content { - height: 100%; - width: 100%; - vertical-align: middle; - -webkit-box-orient: horizontal; - -webkit-box-direction: reverse; - -ms-flex-direction: row-reverse; - flex-direction: row-reverse; + +.json-beautifier { + background: black; + color: gray; } -.euiButtonEmpty.euiButtonEmpty--iconRight - .euiButtonEmpty__content - .euiButton__icon, -.euiButtonEmpty.euiButtonEmpty--iconRight - .euiButtonEmpty__content - .euiButton__spinner { - -ms-flex-negative: 0; - flex-shrink: 0; + +.wz-configuration-value { + background: transparent; + border-color: #343741; } -.euiButtonEmpty.euiButtonEmpty--iconRight .euiButtonEmpty__content > * + * { - margin-left: 0; /* 1 */ - margin-right: 8px; - /* 1 */ + +.kuiSelect{ + filter: invert(1); } -.euiButtonEmpty:disabled { - color: #c2c3c6; - pointer-events: none; -} -.euiButtonEmpty:disabled .euiButtonEmpty__content { - pointer-events: auto; - cursor: not-allowed; -} -.euiButtonEmpty:disabled .euiButtonEmpty__icon { - fill: #c2c3c6; -} -.euiButtonEmpty:disabled:focus { - background-color: transparent; -} -.euiButtonEmpty:disabled:hover, -.euiButtonEmpty:disabled:focus { - text-decoration: none; -} -.euiButtonEmpty--primary { - color: #006bb4; -} -.euiButtonEmpty--primary .euiButtonEmpty__icon { - fill: #006bb4; -} -.euiButtonEmpty--primary:focus { - background-color: rgba(0, 107, 180, 0.1); -} -.euiButtonEmpty--danger { - color: #bd271e; -} -.euiButtonEmpty--danger .euiButtonEmpty__icon { - fill: #bd271e; -} -.euiButtonEmpty--danger:focus { - background-color: rgba(189, 39, 30, 0.1); -} -.euiButtonEmpty--disabled { - color: #c2c3c6; -} -.euiButtonEmpty--disabled .euiButtonEmpty__icon { - fill: #c2c3c6; -} -.euiButtonEmpty--disabled:focus { - background-color: rgba(194, 195, 198, 0.1); -} -.euiButtonEmpty--disabled:hover { - cursor: not-allowed; -} -.euiButtonEmpty--ghost { + +md-card md-card-content { color: #fff; } -.euiButtonEmpty--ghost .euiButtonEmpty__icon { - fill: #fff; + +.ui-select-choices-row-inner { + color: #dfe5ef; } -.euiButtonEmpty--ghost:focus { - background-color: rgba(255, 255, 255, 0.1); + +md-content.md-default-theme, +md-content { + background-color: #1a1b20; + color: #c8dad9; } -.euiButtonEmpty--text { - color: #343741; + +.wz-metric-color { + background-color: #343741 !important; + border: 1px solid #131417; + color: white; } -.euiButtonEmpty--text .euiButtonEmpty__icon { - fill: #343741; + +.visLegend__toggle { + color: white!important; } -.euiButtonEmpty--text:focus { - background-color: #f5f7fa; + +discover-app-w .container-fluid { + background-color: #1D1E24; } -.euiButtonEmpty--flushLeft { - margin-right: 8px; + +.euiBreadcrumbs--truncate + .euiBreadcrumb:not(.euiBreadcrumb--collapsed).euiBreadcrumb--last, +.euiNavDrawerGroup__item .euiListGroupItem__label, +.euiNavDrawer .euiNavDrawer__expandButton .euiListGroupItem__button { + color: #dfe5ef; } -.euiButtonEmpty--flushLeft .euiButtonEmpty__content { - border-left: none; - padding-left: 0; - padding-right: 0; -} -.euiButtonEmpty--flushRight { - margin-left: 8px; -} -.euiButtonEmpty--flushRight .euiButtonEmpty__content { - border-right: none; - padding-left: 0; - padding-right: 0; -} -.euiButtonIcon { - font-family: 'Inter UI', -apple-system, BlinkMacSystemFont, 'Segoe UI', - Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol'; - font-weight: 400; - letter-spacing: -0.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - display: inline-block; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor: pointer; - height: 40px; - line-height: 40px; - text-decoration: none; - border: solid 1px transparent; - text-align: center; - -webkit-transition: all 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: all 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - white-space: nowrap; - max-width: 100%; - vertical-align: middle; - border: none; - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; - height: auto; - min-height: 24px; - min-width: 24px; - line-height: 0; - padding: 4px; - border-radius: 4px; -} -.euiButtonIcon:hover:not(:disabled) { - -webkit-transform: translateY(-1px); - transform: translateY(-1px); -} -.euiButtonIcon:hover:not(:disabled), -.euiButtonIcon:focus { - text-decoration: underline; -} -.euiButtonIcon:focus { - -webkit-animation: euiButtonActive 250ms cubic-bezier(0.34, 1.61, 0.7, 1); - animation: euiButtonActive 250ms cubic-bezier(0.34, 1.61, 0.7, 1); -} -.euiButtonIcon:active:not(:disabled) { - -webkit-transform: translateY(1px); - transform: translateY(1px); -} -.euiButtonIcon:disabled { - color: #c2c3c6; - pointer-events: none; -} -.euiButtonIcon:disabled .euiButtonIcon__icon { - pointer-events: auto; - cursor: not-allowed; -} -.euiButtonIcon:disabled:hover, -.euiButtonIcon:disabled:focus { - background-color: transparent; - text-decoration: none; -} -.euiButtonIcon--danger { - color: #bd271e; -} -.euiButtonIcon--danger:focus { - background-color: rgba(189, 39, 30, 0.1); -} -.euiButtonIcon--disabled { - color: #c2c3c6; -} -.euiButtonIcon--disabled:focus { - background-color: rgba(194, 195, 198, 0.1); -} -.euiButtonIcon--disabled:hover, -.euiButtonIcon--disabled:focus { - cursor: not-allowed; -} -.euiButtonIcon--ghost { + +.percentage { color: #fff; + background-color: transparent !important; } -.euiButtonIcon--ghost:focus { - background-color: rgba(255, 255, 255, 0.1); + +.wz-nav-item button.md-primary { + color: #0079a5 !important; + background-color: #232635!important; + border-bottom: 2px solid #006BB4; } -.euiButtonIcon--primary { - color: #006bb4; + +md-nav-bar.md-default-theme .md-nav-bar, md-nav-bar .md-nav-bar { + border-color: rgb(52, 55, 65); } -.euiButtonIcon--primary:focus { - background-color: rgba(0, 107, 180, 0.1); -} -.euiButtonIcon--subdued { - color: #69707d; -} -.euiButtonIcon--subdued:focus { - background-color: rgba(105, 112, 125, 0.1); -} -.euiButtonIcon--success { - color: #017d73; -} -.euiButtonIcon--success:focus { - background-color: rgba(1, 125, 115, 0.1); -} -.euiButtonIcon--text { - color: #343741; -} -.euiButtonIcon--text:focus { - background-color: rgba(52, 55, 65, 0.1); -} -.euiButtonIcon--warning { - color: #f5a700; -} -.euiButtonIcon--warning:focus { - background-color: rgba(245, 167, 0, 0.1); -} -.visWrapper .chart-label, -.visWrapper .label-text, -.visWrapper .chart-text { - fill: rgb(105, 112, 125) !important; -} -.visWrapper .slice { - stroke: rgb(255, 255, 255) !important; -} -.visWrapper .label-line { - stroke: rgba(105, 112, 125, 0.2) !important; -} -.kbnAggTable__paginated tr:hover td, -.kbnAggTable__paginated .kbnTableCellFilter { - background-color: rgb(245, 247, 250) !important; -} -.kbnAggTable__paginated table { - background-color: white !important; -} -.sidebar-container { - background-color: rgb(245, 247, 250) !important; - border-right-color: transparent !important; - border-bottom-color: transparent !important; + +.wz-nav-item button.md-unselected { + color: #fff !important; } + .sidebar-container .index-pattern { - background-color: rgb(0, 43, 72) !important; - color: rgb(255, 255, 255) !important; -} -.dscField__icon { - color: rgb(105, 112, 125) !important; -} -.euiTitle--xxsmall { - color: #1a1c21 !important; -} -.dscField--noResults { - color: rgb(105, 112, 125) !important; -} -.form-control { - background-color: rgb(251, 252, 253) !important; - color: rgb(52, 55, 65) !important; - cursor: pointer; - padding: 4px 12px; - border-width: 1px; - border-style: solid; - border-color: rgb(211, 218, 230) !important; - border-image: initial; - border-radius: 4px; + background-color: #1ba9f5!important; + color: white!important; } -.euiSelect { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-weight: 400; - letter-spacing: -.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; - padding-right: 40px; - /* 1 */ - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - line-height: 40px; - /* 2 */ - padding-top: 0; - /* 2 */ - padding-bottom: 0; - /* 2 */ } - .euiSelect--fullWidth { - max-width: 100%; } - .euiSelect--compressed { - height: 32px; } - .euiSelect--inGroup { - height: 38px; - /* 2 */ } - .euiSelect--inGroup.euiSelect--compressed { - height: 30px; - /* 2 */ } - .euiSelect::-webkit-input-placeholder { - color: #69707D; } - .euiSelect:-ms-input-placeholder { - color: #69707D; } - .euiSelect::-ms-input-placeholder { - color: #69707D; } - .euiSelect::placeholder { - color: #69707D; } - .euiSelect--compressed { - padding-top: 8px; - padding-bottom: 8px; } - .euiSelect--inGroup { - -webkit-box-shadow: none !important; - box-shadow: none !important; } - .euiSelect:invalid { - /* 4 */ - background-image: linear-gradient(to top, #BD271E, #BD271E 2px, transparent 2px, transparent 100%); - background-size: 100%; } - .euiSelect:focus { - /* 4 */ - background-color: white; - background-image: linear-gradient(to top, #006BB4, #006BB4 2px, transparent 2px, transparent 100%); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); } - .euiSelect:disabled { - cursor: not-allowed; - color: #98A2B3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); } - .euiSelect:disabled::-webkit-input-placeholder { - color: #98A2B3; } - .euiSelect:disabled:-ms-input-placeholder { - color: #98A2B3; } - .euiSelect:disabled::-ms-input-placeholder { - color: #98A2B3; } - .euiSelect:disabled::placeholder { - color: #98A2B3; } - .euiSelect[readOnly] { - cursor: default; - background: rgba(211, 218, 230, 0.12); - border-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; } - .euiSelect-isLoading { - padding-right: 56px; } - .euiSelect--compressed { - line-height: 32px; - /* 2 */ - padding-top: 0; - /* 2 */ - padding-bottom: 0; - /* 2 */ } - .euiSelect--inGroup { - line-height: 38px; - /* 2 */ } - .euiSelect--inGroup.euiSelect--compressed { - line-height: 30px; - /* 2 */ } - .euiSelect::-ms-expand { - display: none; } - .euiSelect:focus::-ms-value { - color: #343741; - background: transparent; } - - /* - * 1. Make popover the same width as the form control - * 2. Style popover similar to combobox - * 3. Use attribute selector to match popover position without needing the full popover class name - */ - .euiSuperSelect { - width: 100%; } - .euiSuperSelect:not(.euiSuperSelect--fullWidth) { - /* 1 */ - max-width: 400px !important; } - .euiSuperSelect .euiSuperSelect__popoverAnchor { - display: block; } - - .euiSuperSelect__popoverPanel[class*='bottom'] { - /* 3 */ - border-top-color: rgba(211, 218, 230, 0.8); - border-top-right-radius: 0; - /* 2 */ - border-top-left-radius: 0; - /* 2 */ } - - .euiSuperSelect__popoverPanel[class*='top'] { - /* 3 */ - -webkit-box-shadow: 0 0 12px -1px rgba(152, 162, 179, 0.2), 0 0 4px -1px rgba(152, 162, 179, 0.2), 0 0 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 0 12px -1px rgba(152, 162, 179, 0.2), 0 0 4px -1px rgba(152, 162, 179, 0.2), 0 0 2px 0 rgba(152, 162, 179, 0.2); - /* 2 */ - border-bottom-color: rgba(211, 218, 230, 0.8); - border-bottom-right-radius: 0; - /* 2 */ - border-bottom-left-radius: 0; - /* 2 */ } - - .euiSuperSelect__item:hover, .euiSuperSelect__item:focus { - text-decoration: none; - background-color: #e6f0f8; } - - .euiSuperSelect__item--hasDividers:not(:last-of-type) { - border-bottom: 1px solid #D3DAE6; } - - /** - * 1. Leave room for caret. - * 2. Ensure the descenders don't get cut off - * 3. Makes sure the height is correct when there's no selection - */ - .euiSuperSelectControl { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-weight: 400; - letter-spacing: -.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; - padding-right: 40px; - /* 1 */ - display: block; - /* 3 */ - text-align: left; - line-height: 40px; - /* 2 */ - padding-top: 0; - /* 2 */ - padding-bottom: 0; - /* 2 */ - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - .euiSuperSelectControl--fullWidth { - max-width: 100%; } - .euiSuperSelectControl--compressed { - height: 32px; } - .euiSuperSelectControl--inGroup { - height: 38px; - /* 2 */ } - .euiSuperSelectControl--inGroup.euiSuperSelectControl--compressed { - height: 30px; - /* 2 */ } - .euiSuperSelectControl::-webkit-input-placeholder { - color: #69707D; } - .euiSuperSelectControl:-ms-input-placeholder { - color: #69707D; } - .euiSuperSelectControl::-ms-input-placeholder { - color: #69707D; } - .euiSuperSelectControl::placeholder { - color: #69707D; } - .euiSuperSelectControl--compressed { - padding-top: 8px; - padding-bottom: 8px; } - .euiSuperSelectControl--inGroup { - -webkit-box-shadow: none !important; - box-shadow: none !important; } - .euiSuperSelectControl:invalid { - /* 4 */ - background-image: linear-gradient(to top, #BD271E, #BD271E 2px, transparent 2px, transparent 100%); - background-size: 100%; } - .euiSuperSelectControl:focus { - /* 4 */ - background-color: white; - background-image: linear-gradient(to top, #006BB4, #006BB4 2px, transparent 2px, transparent 100%); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); } - .euiSuperSelectControl:disabled { - cursor: not-allowed; - color: #98A2B3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); } - .euiSuperSelectControl:disabled::-webkit-input-placeholder { - color: #98A2B3; } - .euiSuperSelectControl:disabled:-ms-input-placeholder { - color: #98A2B3; } - .euiSuperSelectControl:disabled::-ms-input-placeholder { - color: #98A2B3; } - .euiSuperSelectControl:disabled::placeholder { - color: #98A2B3; } - .euiSuperSelectControl[readOnly] { - cursor: default; - background: rgba(211, 218, 230, 0.12); - border-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; } - .euiSuperSelectControl-isLoading { - padding-right: 56px; } - .euiSuperSelectControl--compressed { - line-height: 32px; - /* 2 */ - padding-top: 0; - /* 2 */ - padding-bottom: 0; - /* 2 */ } - .euiSuperSelectControl.euiSuperSelect--isOpen__button { - background-color: white; - background-image: linear-gradient(to top, #006BB4, #006BB4 2px, transparent 2px, transparent 100%); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); } - .euiCheckbox { - position: relative; - /** - * 1. Float above the visual radio and match its dimension, so that when users try to click it - * they actually click this input. - */ } - .euiCheckbox .euiCheckbox__input { - position: absolute; - left: -10000px; - top: auto; - width: 1px; - height: 1px; - overflow: hidden; } - .euiCheckbox .euiCheckbox__input ~ .euiCheckbox__label { - display: block; - padding-left: 24px; - line-height: 24px; - font-size: 14px; - position: relative; - z-index: 2; - cursor: pointer; } - .euiCheckbox .euiCheckbox__input + .euiCheckbox__square { - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3); - padding: 7px; - border: 1px solid #c9cbcd; - background: #FFF no-repeat center; - border-radius: 4px; - -webkit-transition: background-color 150ms ease-in, border-color 150ms ease-in; - transition: background-color 150ms ease-in, border-color 150ms ease-in; - display: inline-block; - position: absolute; - left: 0; - top: 3px; } - .euiCheckbox .euiCheckbox__input:checked + .euiCheckbox__square { - border-color: #006BB4; - background-color: #006BB4; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='8' viewBox='0 0 10 8'%3E%3Cpath d='M.375 2.625L3.375 5.625M3.375 5.625L8.625.375' fill='none' fill-rule='evenodd' stroke='rgb%28255, 255, 255%29' stroke-linecap='round' stroke-width='1.5' transform='translate(.5 1)'/%3E%3C/svg%3E"); } - .euiCheckbox .euiCheckbox__input:indeterminate + .euiCheckbox__square { - border-color: #006BB4; - background-color: #006BB4; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' viewBox='0 0 6 6'%3E%3Crect width='6' height='6' fill='rgb%28255, 255, 255%29' fill-rule='evenodd'/%3E%3C/svg%3E"); } - .euiCheckbox .euiCheckbox__input[disabled] { - cursor: not-allowed !important; } - .euiCheckbox .euiCheckbox__input[disabled] ~ .euiCheckbox__label { - color: #98A2B3; - cursor: not-allowed !important; } - .euiCheckbox .euiCheckbox__input[disabled] + .euiCheckbox__square { - border-color: #D3DAE6; - background-color: #D3DAE6; - -webkit-box-shadow: none; - box-shadow: none; } - .euiCheckbox .euiCheckbox__input:checked[disabled] + .euiCheckbox__square { - border-color: #D3DAE6; - background-color: #D3DAE6; - -webkit-box-shadow: none; - box-shadow: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='8' viewBox='0 0 10 8'%3E%3Cpath d='M.375 2.625L3.375 5.625M3.375 5.625L8.625.375' fill='none' fill-rule='evenodd' stroke='rgb%2894, 100, 111%29' stroke-linecap='round' stroke-width='1.5' transform='translate(.5 1)'/%3E%3C/svg%3E"); } - .euiCheckbox .euiCheckbox__input:indeterminate[disabled] + .euiCheckbox__square { - border-color: #D3DAE6; - background-color: #D3DAE6; - -webkit-box-shadow: none; - box-shadow: none; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' viewBox='0 0 6 6'%3E%3Ccircle cx='8' cy='11' r='3' fill='rgb%2894, 100, 111%29' fill-rule='evenodd' transform='translate(-5 -8)'/%3E%3C/svg%3E"); } - .euiCheckbox .euiCheckbox__input:focus + .euiCheckbox__square, .euiCheckbox .euiCheckbox__input:active:not(:disabled) + .euiCheckbox__square { - -webkit-animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards focusRingAnimate; - animation: 350ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards focusRingAnimate; - border-color: #006BB4; } - .euiCheckbox.euiCheckbox--inList, .euiCheckbox.euiCheckbox--noLabel { - min-height: 16px; - min-width: 16px; } - .euiCheckbox.euiCheckbox--inList .euiCheckbox__square, .euiCheckbox.euiCheckbox--noLabel .euiCheckbox__square { - top: 0; } - .euiCheckbox.euiCheckbox--inList .euiCheckbox__input, .euiCheckbox.euiCheckbox--noLabel .euiCheckbox__input { - width: 16px; - height: 16px; - /* 1 */ - position: absolute; - /* 1 */ - opacity: 0; - /* 1 */ - z-index: 1; - /* 1 */ - margin: 0; - /* 1 */ - left: 0; - /* 1 */ - cursor: pointer; } - - .euiCheckboxGroup__item + .euiCheckboxGroup__item { - margin-top: 8px; } - .euiCheckboxGroup__item + .euiCheckboxGroup__item.euiCheckbox--compressed { - margin-top: 0; } - - .euiDescribedFormGroup { - max-width: 800px; } - .euiDescribedFormGroup + * { - margin-top: 24px; } - .euiDescribedFormGroup.euiDescribedFormGroup--fullWidth { - max-width: 100%; } - .euiDescribedFormGroup .euiDescribedFormGroup__description { - padding-top: 8px; } - .euiDescribedFormGroup .euiDescribedFormGroup__fields { - width: 400px; - max-width: 100%; } - .euiDescribedFormGroup .euiDescribedFormGroup__fieldPadding--xxxsmall { - padding-top: 8px; } - .euiDescribedFormGroup .euiDescribedFormGroup__fieldPadding--xxsmall { - padding-top: 11px; } - .euiDescribedFormGroup .euiDescribedFormGroup__fieldPadding--xsmall { - padding-top: 14px; } - .euiDescribedFormGroup .euiDescribedFormGroup__fieldPadding--small { - padding-top: 20px; } - .euiDescribedFormGroup .euiDescribedFormGroup__fieldPadding--medium { - padding-top: 32px; } - .euiDescribedFormGroup .euiDescribedFormGroup__fieldPadding--large { - padding-top: 44px; } - @media only screen and (max-width: 574px) { - .euiDescribedFormGroup .euiDescribedFormGroup__fields { - padding-top: 0; } - .euiDescribedFormGroup .euiDescribedFormGroup__fields > .euiFormRow--hasEmptyLabelSpace:first-child { - padding-top: 0; } } - @media only screen and (min-width: 575px) and (max-width: 767px) { - .euiDescribedFormGroup .euiDescribedFormGroup__fields { - padding-top: 0; } - .euiDescribedFormGroup .euiDescribedFormGroup__fields > .euiFormRow--hasEmptyLabelSpace:first-child { - padding-top: 0; } } - - .euiFieldNumber { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-weight: 400; - letter-spacing: -.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; } - .euiFieldNumber--fullWidth { - max-width: 100%; } - .euiFieldNumber--compressed { - height: 32px; } - .euiFieldNumber--inGroup { - height: 38px; - /* 2 */ } - .euiFieldNumber--inGroup.euiFieldNumber--compressed { - height: 30px; - /* 2 */ } - .euiFieldNumber::-webkit-input-placeholder { - color: #69707D; } - .euiFieldNumber:-ms-input-placeholder { - color: #69707D; } - .euiFieldNumber::-ms-input-placeholder { - color: #69707D; } - .euiFieldNumber::placeholder { - color: #69707D; } - .euiFieldNumber--compressed { - padding-top: 8px; - padding-bottom: 8px; } - .euiFieldNumber--inGroup { - -webkit-box-shadow: none !important; - box-shadow: none !important; } - .euiFieldNumber:invalid { - /* 4 */ - background-image: linear-gradient(to top, #BD271E, #BD271E 2px, transparent 2px, transparent 100%); - background-size: 100%; } - .euiFieldNumber:focus { - /* 4 */ - background-color: white; - background-image: linear-gradient(to top, #006BB4, #006BB4 2px, transparent 2px, transparent 100%); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); } - .euiFieldNumber:disabled { - cursor: not-allowed; - color: #98A2B3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); } - .euiFieldNumber:disabled::-webkit-input-placeholder { - color: #98A2B3; } - .euiFieldNumber:disabled:-ms-input-placeholder { - color: #98A2B3; } - .euiFieldNumber:disabled::-ms-input-placeholder { - color: #98A2B3; } - .euiFieldNumber:disabled::placeholder { - color: #98A2B3; } - .euiFieldNumber[readOnly] { - cursor: default; - background: rgba(211, 218, 230, 0.12); - border-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; } - .euiFieldNumber--withIcon { - padding-left: 40px; } - .euiFieldNumber-isLoading { - padding-right: 40px; } - - .euiFieldPassword { - max-width: 400px; - width: 100%; - height: 40px; - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-weight: 400; - letter-spacing: -.005em; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-font-kerning: normal; - font-kerning: normal; - font-size: 14px; - line-height: 1em; - color: #343741; - border: none; - border-radius: 0; - padding: 12px; - padding-left: 40px; } - .euiFieldPassword--fullWidth { - max-width: 100%; } - .euiFieldPassword--compressed { - height: 32px; } - .euiFieldPassword--inGroup { - height: 38px; - /* 2 */ } - .euiFieldPassword--inGroup.euiFieldPassword--compressed { - height: 30px; - /* 2 */ } - .euiFieldPassword::-webkit-input-placeholder { - color: #69707D; } - .euiFieldPassword:-ms-input-placeholder { - color: #69707D; } - .euiFieldPassword::-ms-input-placeholder { - color: #69707D; } - .euiFieldPassword::placeholder { - color: #69707D; } - .euiFieldPassword--compressed { - padding-top: 8px; - padding-bottom: 8px; } - .euiFieldPassword--inGroup { - -webkit-box-shadow: none !important; - box-shadow: none !important; } - .euiFieldPassword:invalid { - /* 4 */ - background-image: linear-gradient(to top, #BD271E, #BD271E 2px, transparent 2px, transparent 100%); - background-size: 100%; } - .euiFieldPassword:focus { - /* 4 */ - background-color: white; - background-image: linear-gradient(to top, #006BB4, #006BB4 2px, transparent 2px, transparent 100%); - background-size: 100% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.16); } - .euiFieldPassword:disabled { - cursor: not-allowed; - color: #98A2B3; - background: #eef2f7; - -webkit-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); - box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); } - .euiFieldPassword:disabled::-webkit-input-placeholder { - color: #98A2B3; } - .euiFieldPassword:disabled:-ms-input-placeholder { - color: #98A2B3; } - .euiFieldPassword:disabled::-ms-input-placeholder { - color: #98A2B3; } - .euiFieldPassword:disabled::placeholder { - color: #98A2B3; } - .euiFieldPassword[readOnly] { - cursor: default; - background: rgba(211, 218, 230, 0.12); - border-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; } - .euiFieldPassword-isLoading { - padding-right: 40px; } - .euiTitle--xxxsmall { - color: #1a1c21!important; - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - } - kbn-table dl.source dt, .kbn-table dl.source dt, tbody[kbn-rows] dl.source dt { - background-color: rgba(0, 86, 144, 0.1)!important; - color: rgb(52, 55, 65)!important; - } - .visWrapper .tick text { - fill: rgb(105, 112, 125)!important; - } - .visWrapper .axis-title text { - font-size: 0.75rem; - font-weight: 700; - fill: rgb(105, 112, 125)!important; - } - .visWrapper .grid > path { - stroke: rgba(105, 112, 125, 0.2)!important; - } - .euiPopover__panel.euiPopover__panel-isOpen { - opacity: 1; - visibility: visible; - pointer-events: auto; } - .euiPopover__panel .euiPopover__panelArrow { - position: absolute; - width: 0; - height: 0; } - .euiPopover__panel .euiPopover__panelArrow:before { - position: absolute; - content: ''; - height: 0; - width: 0; } - .euiPopover__panel .euiPopover__panelArrow:after { - position: absolute; - content: ''; - height: 0; - width: 0; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--top:before { - bottom: -11px; - border-left: 12px solid transparent; - border-right: 12px solid transparent; - border-top: 12px solid #D3DAE6; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--top:after { - bottom: -10px; - border-left: 12px solid transparent; - border-right: 12px solid transparent; - border-top: 12px solid #FFF; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--right:before { - left: -12px; - top: 50%; - border-top: 12px solid transparent; - border-bottom: 12px solid transparent; - border-right: 12px solid #D3DAE6; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--right:after { - left: -11px; - top: 50%; - border-top: 12px solid transparent; - border-bottom: 12px solid transparent; - border-right: 12px solid #FFF; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--bottom:before { - top: -12px; - border-left: 12px solid transparent; - border-right: 12px solid transparent; - border-bottom: 12px solid #D3DAE6; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--bottom:after { - top: -11px; - border-left: 12px solid transparent; - border-right: 12px solid transparent; - border-bottom: 12px solid #FFF; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--left:before { - right: -11px; - top: 50%; - border-top: 12px solid transparent; - border-bottom: 12px solid transparent; - border-left: 12px solid #D3DAE6; } - .euiPopover__panel .euiPopover__panelArrow.euiPopover__panelArrow--left:after { - right: -10px; - top: 50%; - border-top: 12px solid transparent; - border-bottom: 12px solid transparent; - border-left: 12px solid #FFF; } - .euiPopover__panel.euiPopover__panel-noArrow .euiPopover__panelArrow { - display: none; } - .euiPanel .euiHorizontalRule { - border: none; - height: 1.1px; - background-color: #D3DAE6!important; - } - .euiContextMenuItem { - display: block; - padding: 12px; - width: 100%; - text-align: left; - color: #343741!important; - } - kbn-dis{ - background-color: white!important; - } - - .kbnDocViewer__content { - background-color: white!important; - } - - .kbnDocViewer__content .table{ - background-color: white!important; - } - .kbnDocViewer pre, .kbnDocViewer .kbnDocViewer__value { - color: #000!important; - } - .kbnDocViewer .dscFieldName { - color: #69707D!important; - } - .kbnDocTableDetails__row > td tr:hover td { - background: rgb(250, 251, 253)!important; - } - .kbnDocTableRowFilterButton { - background-color: white!important; - } - .euiTitle--xsmall { - color: #1a1c21!important; - } - .kbnTopNav { - background-color: white!important; - border-bottom: 1px solid #d3dae6!important; - } - - discover-app-w{ - background-color: white!important; - } - .euiTable { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - -webkit-font-feature-settings: "calt" 1, "kern" 1, "liga" 1, "tnum" 1; - font-feature-settings: "calt" 1, "kern" 1, "liga" 1, "tnum" 1; - width: 100%; - table-layout: fixed; - border: none; - border-collapse: collapse; - background-color: #FFF; } - - @media only screen and (min-width: 768px) and (max-width: 991px) { - .euiTable--compressed .euiTableCellContent { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - padding: 4px; } } - - @media only screen and (min-width: 992px) and (max-width: 1199px) { - .euiTable--compressed .euiTableCellContent { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - padding: 4px; } } - - @media only screen and (min-width: 1200px) { - .euiTable--compressed .euiTableCellContent { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - padding: 4px; } } - - .euiTableFooterCell, - .euiTableHeaderCell { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - font-weight: 500; - border-top: none; } - .euiTableFooterCell .euiTableHeaderButton, - .euiTableHeaderCell .euiTableHeaderButton { - text-align: left; - font-weight: 500; } - .euiTableFooterCell .euiTableCellContent__text, - .euiTableHeaderCell .euiTableCellContent__text { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - color: #1a1c21; - font-weight: 700; } - - .euiTableHeaderButton { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - color: inherit; - width: 100%; } - .euiTableHeaderButton:hover .euiTableCellContent__text, .euiTableHeaderButton:focus .euiTableCellContent__text { - text-decoration: underline; - color: #006BB4; } - .euiTableHeaderButton:hover .euiTableSortIcon, .euiTableHeaderButton:focus .euiTableSortIcon { - fill: #006BB4; } - - .euiTableSortIcon { - margin-left: 4px; - -ms-flex-negative: 0; - flex-shrink: 0; } - .euiTableHeaderButton-isSorted .euiTableSortIcon { - fill: #1a1c21; } - - .euiTableHeaderCellCheckbox { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - width: 32px; - vertical-align: middle; - border-top: none; } - - .euiTableRow:hover { - background-color: #fafbfd; } - - .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #fafbfd; } - - .euiTableRow.euiTableRow-isExpandedRow.euiTableRow-isSelectable .euiTableCellContent { - padding-left: 40px; } - - .euiTableRow.euiTableRow-isSelected { - background-color: #eef5fa; } - .euiTableRow.euiTableRow-isSelected + .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #eef5fa; } - .euiTableRow.euiTableRow-isSelected:hover, - .euiTableRow.euiTableRow-isSelected:hover + .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #e6f0f8; } - - .euiTableRowCell { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - color: #343741; } - .euiTableRowCell.euiTableRowCell--isMobileHeader { - display: none; } - - .euiTableRowCellCheckbox { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - width: 32px; - vertical-align: middle; } - - .euiTableFooterCell { - background-color: #F5F7FA; - border-bottom: none; } - - /** - * 1. Vertically align all children. - * 2. The padding on this div allows the ellipsis to show if the content is truncated. If - * the padding was on the cell, the ellipsis would be cropped. - * 3. Support wrapping. - * 4. Prevent very long single words (e.g. the name of a field in a document) from overflowing - * the cell. - */ - .euiTableCellContent { - overflow: hidden; - /* 4 */ - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - /* 1 */ - padding: 8px; - /* 2 */ } - - .euiTableCellContent__text { - overflow-wrap: break-word; - /* 4 */ - min-width: 0; - text-overflow: ellipsis; } - @media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { - .euiTableCellContent__text { - word-break: break-all; } } - - .euiTableCellContent--alignRight { - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - text-align: right; } - - .euiTableCellContent--alignCenter { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; } - - .euiTableHeaderCell, - .euiTableFooterCell, - .euiTableCellContent--truncateText { - white-space: nowrap; - /* 3 */ } - .euiTableHeaderCell .euiTableCellContent__text, - .euiTableFooterCell .euiTableCellContent__text, - .euiTableCellContent--truncateText .euiTableCellContent__text { - overflow: hidden; } - - .euiTableCellContent--overflowingContent { - overflow: visible; - white-space: normal; - word-break: break-all; - word-break: break-word; } - - .euiTableCellContent--showOnHover > *:not(:first-child) { - margin-left: 8px; } - - .euiTableRow-hasActions .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem { - -ms-flex-negative: 0; - flex-shrink: 0; - opacity: .7; - -webkit-filter: grayscale(100%); - filter: grayscale(100%); - -webkit-transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), -webkit-filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), -webkit-filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), -webkit-filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - - .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide, - .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled, - .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled:hover, - .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled:focus, - .euiTableRow:hover .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled { - -webkit-filter: grayscale(0%); - filter: grayscale(0%); - opacity: 0; } - - .euiTableRow-hasActions:hover .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem:not(:disabled), .euiTableRow-hasActions:hover .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem:not(:disabled):hover, .euiTableRow-hasActions:hover .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem:not(:disabled):focus { - opacity: 1; - -webkit-filter: grayscale(0%); - filter: grayscale(0%); } - - .euiTableRow-isExpandedRow .euiTableCellContent { - overflow: hidden; - -webkit-animation: 250ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards growExpandedRow; - animation: 250ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards growExpandedRow; } - - @-webkit-keyframes growExpandedRow { - 0% { - max-height: 0; } - 100% { - max-height: 1000px; } } - - @keyframes growExpandedRow { - 0% { - max-height: 0; } - 100% { - max-height: 1000px; } } - - .euiTableRow-isClickable:hover { - background-color: rgba(0, 107, 180, 0.05); - cursor: pointer; } - - .euiTableRow-isClickable:focus { - background-color: rgba(0, 107, 180, 0.1); } - - /** - * Mixin for use in: - * - EuiCard - * - EuiPageContent - */ - @media only screen and (max-width: 574px) { - .euiTable.euiTable--responsive thead { - display: none; } - .euiTable.euiTable--responsive tfoot { - display: none; } - .euiTable.euiTable--responsive .euiTableRow { - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - background-color: #FFF; - border: 1px solid #D3DAE6; - border-radius: 4px; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--flexGrowZero { - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--isClickable { - display: block; - width: 100%; - text-align: left; - -webkit-transition: all 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: all 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--isClickable:hover, .euiTable.euiTable--responsive .euiTableRow.euiTableRow--isClickable:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), 0 2px 2px -1px rgba(152, 162, 179, 0.3); - -webkit-transform: translateY(-2px); - transform: translateY(-2px); - cursor: pointer; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--shadow { - -webkit-box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -1px rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -1px rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - border-bottom-color: rgba(152, 162, 179, 0.5); } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--shadow.euiTableRow--isClickable:hover, .euiTable.euiTable--responsive .euiTableRow.euiTableRow--shadow.euiTableRow--isClickable:focus { - -webkit-box-shadow: 0 12px 24px 0 rgba(152, 162, 179, 0.2), 0 6px 12px 0 rgba(152, 162, 179, 0.2), 0 4px 4px 0 rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 12px 24px 0 rgba(152, 162, 179, 0.2), 0 6px 12px 0 rgba(152, 162, 179, 0.2), 0 4px 4px 0 rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); } - .euiTable.euiTable--responsive .euiTableRow { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding: 8px; - margin-bottom: 8px; } - .euiTable.euiTable--responsive .euiTableRow:hover { - background-color: transparent; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable, .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions { - background-image: linear-gradient(to right, rgba(152, 162, 179, 0.1) 0, rgba(152, 162, 179, 0.1) 1px, transparent 1px, transparent 100%); - background-size: 40px 100%; - background-position-x: right; - background-repeat: no-repeat; - padding-right: 40px; - position: relative; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions { - min-width: 0; - width: 24px; - position: absolute; - top: 16px; - right: 8px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander::before, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions::before { - display: none; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander .euiTableCellContent, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions .euiTableCellContent { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 0; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander .euiTableCellContent .euiLink, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions .euiTableCellContent .euiLink { - padding: 4px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions.euiTableRow-isExpandable .euiTableRowCell--isExpander { - top: auto; - bottom: 16px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelectable { - padding-left: 36px; - position: relative; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelectable .euiTableRowCellCheckbox { - position: absolute; - left: 4px; - top: 12px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected, .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected:hover, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected + .euiTableRow.euiTableRow-isExpandedRow, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected:hover + .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #eef5fa; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow { - background-image: linear-gradient(to right, rgba(152, 162, 179, 0.1) 0, rgba(152, 162, 179, 0.1) 1px, transparent 1px, transparent 100%); - background-size: 40px 100%; - background-position-x: right; - background-repeat: no-repeat; - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - margin-top: -16px; - position: relative; - z-index: 2; - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; - padding-left: 8px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow:hover { - background-color: #FFF; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - width: calc(100% - 40px); } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell::before { - display: none; } - .euiTable.euiTable--responsive .euiTableRowCell { - display: block; - /* IE requires block to grow and wrap. */ - min-width: 50%; - border: none; } - .euiTable.euiTable--responsive .euiTableRowCell[data-header]::before { - font-size: 11px; - font-size: 0.6875rem; - content: attr(data-header); - display: block; - color: #69707D; - padding: 8px; - padding-bottom: 0; - margin-bottom: -8px; - min-height: 24px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } - .euiTable.euiTable--responsive .euiTableRowCell:only-child::before { - min-height: 0; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileHeader { - font-size: 1rem; - line-height: 1.5; - display: block; - width: 100%; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileHeader::before { - display: none; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileFullWidth { - width: 100%; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileFullWidth .euiTableCellContent--alignCenter { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--hideForMobile { - display: none; } - .euiTable.euiTable--responsive .euiTableRowCellCheckbox { - border: none; } - .euiTable.euiTable--responsive .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide { - display: none; } - .euiTable.euiTable--responsive .euiTableRow-hasActions .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem { - opacity: 1; - -webkit-filter: none; - filter: none; - margin-left: 0; - margin-bottom: 8px; } - .euiTable.euiTable--responsive .euiTableCellContent--alignRight { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; } - .euiTable.euiTable--responsive .euiTableCellContent--alignCenter { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; } } - - @media only screen and (min-width: 575px) and (max-width: 767px) { - .euiTable.euiTable--responsive thead { - display: none; } - .euiTable.euiTable--responsive tfoot { - display: none; } - .euiTable.euiTable--responsive .euiTableRow { - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - background-color: #FFF; - border: 1px solid #D3DAE6; - border-radius: 4px; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--flexGrowZero { - -webkit-box-flex: 0; - -ms-flex-positive: 0; - flex-grow: 0; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--isClickable { - display: block; - width: 100%; - text-align: left; - -webkit-transition: all 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: all 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--isClickable:hover, .euiTable.euiTable--responsive .euiTableRow.euiTableRow--isClickable:focus { - -webkit-box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), 0 2px 2px -1px rgba(152, 162, 179, 0.3); - box-shadow: 0 4px 8px 0 rgba(152, 162, 179, 0.15), 0 2px 2px -1px rgba(152, 162, 179, 0.3); - -webkit-transform: translateY(-2px); - transform: translateY(-2px); - cursor: pointer; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--shadow { - -webkit-box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -1px rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 6px 12px -1px rgba(152, 162, 179, 0.2), 0 4px 4px -1px rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - border-bottom-color: rgba(152, 162, 179, 0.5); } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow--shadow.euiTableRow--isClickable:hover, .euiTable.euiTable--responsive .euiTableRow.euiTableRow--shadow.euiTableRow--isClickable:focus { - -webkit-box-shadow: 0 12px 24px 0 rgba(152, 162, 179, 0.2), 0 6px 12px 0 rgba(152, 162, 179, 0.2), 0 4px 4px 0 rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); - box-shadow: 0 12px 24px 0 rgba(152, 162, 179, 0.2), 0 6px 12px 0 rgba(152, 162, 179, 0.2), 0 4px 4px 0 rgba(152, 162, 179, 0.2), 0 2px 2px 0 rgba(152, 162, 179, 0.2); } - .euiTable.euiTable--responsive .euiTableRow { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding: 8px; - margin-bottom: 8px; } - .euiTable.euiTable--responsive .euiTableRow:hover { - background-color: transparent; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable, .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions { - background-image: linear-gradient(to right, rgba(152, 162, 179, 0.1) 0, rgba(152, 162, 179, 0.1) 1px, transparent 1px, transparent 100%); - background-size: 40px 100%; - background-position-x: right; - background-repeat: no-repeat; - padding-right: 40px; - position: relative; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions { - min-width: 0; - width: 24px; - position: absolute; - top: 16px; - right: 8px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander::before, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions::before { - display: none; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander .euiTableCellContent, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions .euiTableCellContent { - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - padding: 0; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandable .euiTableRowCell--isExpander .euiTableCellContent .euiLink, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions .euiTableRowCell--hasActions .euiTableCellContent .euiLink { - padding: 4px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-hasActions.euiTableRow-isExpandable .euiTableRowCell--isExpander { - top: auto; - bottom: 16px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelectable { - padding-left: 36px; - position: relative; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelectable .euiTableRowCellCheckbox { - position: absolute; - left: 4px; - top: 12px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected, .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected:hover, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected + .euiTableRow.euiTableRow-isExpandedRow, - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isSelected:hover + .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #eef5fa; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow { - background-image: linear-gradient(to right, rgba(152, 162, 179, 0.1) 0, rgba(152, 162, 179, 0.1) 1px, transparent 1px, transparent 100%); - background-size: 40px 100%; - background-position-x: right; - background-repeat: no-repeat; - -webkit-box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - box-shadow: 0 2px 2px -1px rgba(152, 162, 179, 0.3), 0 1px 5px -2px rgba(152, 162, 179, 0.3); - margin-top: -16px; - position: relative; - z-index: 2; - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; - padding-left: 8px; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow:hover { - background-color: #FFF; } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - width: calc(100% - 40px); } - .euiTable.euiTable--responsive .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell::before { - display: none; } - .euiTable.euiTable--responsive .euiTableRowCell { - display: block; - /* IE requires block to grow and wrap. */ - min-width: 50%; - border: none; } - .euiTable.euiTable--responsive .euiTableRowCell[data-header]::before { - font-size: 11px; - font-size: 0.6875rem; - content: attr(data-header); - display: block; - color: #69707D; - padding: 8px; - padding-bottom: 0; - margin-bottom: -8px; - min-height: 24px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; } - .euiTable.euiTable--responsive .euiTableRowCell:only-child::before { - min-height: 0; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileHeader { - font-size: 1rem; - line-height: 1.5; - display: block; - width: 100%; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileHeader::before { - display: none; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileFullWidth { - width: 100%; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--isMobileFullWidth .euiTableCellContent--alignCenter { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; } - .euiTable.euiTable--responsive .euiTableRowCell.euiTableRowCell--hideForMobile { - display: none; } - .euiTable.euiTable--responsive .euiTableRowCellCheckbox { - border: none; } - .euiTable.euiTable--responsive .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide { - display: none; } - .euiTable.euiTable--responsive .euiTableRow-hasActions .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem { - opacity: 1; - -webkit-filter: none; - filter: none; - margin-left: 0; - margin-bottom: 8px; } - .euiTable.euiTable--responsive .euiTableCellContent--alignRight { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; } - .euiTable.euiTable--responsive .euiTableCellContent--alignCenter { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; } } - - .euiTableHeaderMobile, - .euiTableHeaderCell--isMobileHeader { - display: none; } - - @media only screen and (max-width: 574px) { - .euiTableHeaderMobile { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - padding: 8px 0; } - .euiTableSortMobile { - display: block; } } - - @media only screen and (min-width: 575px) and (max-width: 767px) { - .euiTableHeaderMobile { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - padding: 8px 0; } - .euiTableSortMobile { - display: block; } } - .euiTableFooterCell, -.euiTableHeaderCell { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - font-weight: 500; - border-top: none; } - .euiTableFooterCell .euiTableHeaderButton, - .euiTableHeaderCell .euiTableHeaderButton { - text-align: left; - font-weight: 500; } - .euiTableFooterCell .euiTableCellContent__text, - .euiTableHeaderCell .euiTableCellContent__text { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; - color: #1a1c21; - font-weight: 700; } - -.euiTableHeaderButton { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - color: inherit; - width: 100%; } - .euiTableHeaderButton:hover .euiTableCellContent__text, .euiTableHeaderButton:focus .euiTableCellContent__text { - text-decoration: underline; - color: #006BB4; } - .euiTableHeaderButton:hover .euiTableSortIcon, .euiTableHeaderButton:focus .euiTableSortIcon { - fill: #006BB4; } - -.euiTableSortIcon { - margin-left: 4px; - -ms-flex-negative: 0; - flex-shrink: 0; } - .euiTableHeaderButton-isSorted .euiTableSortIcon { - fill: #1a1c21; } - -.euiTableHeaderCellCheckbox { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - width: 32px; - vertical-align: middle; - border-top: none; } - -.euiTableRow:hover { - background-color: #fafbfd; } - -.euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #fafbfd; } - -.euiTableRow.euiTableRow-isExpandedRow.euiTableRow-isSelectable .euiTableCellContent { - padding-left: 40px; } - -.euiTableRow.euiTableRow-isSelected { - background-color: #eef5fa; } - .euiTableRow.euiTableRow-isSelected + .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #eef5fa; } - .euiTableRow.euiTableRow-isSelected:hover, - .euiTableRow.euiTableRow-isSelected:hover + .euiTableRow.euiTableRow-isExpandedRow .euiTableRowCell { - background-color: #e6f0f8; } - -.euiTableRowCell { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - color: #343741; } - .euiTableRowCell.euiTableRowCell--isMobileHeader { - display: none; } - -.euiTableRowCellCheckbox { - vertical-align: middle; - border-top: 1px solid #D3DAE6; - border-bottom: 1px solid #D3DAE6; - width: 32px; - vertical-align: middle; } - -.euiTableFooterCell { - background-color: #F5F7FA; - border-bottom: none; } - -/** - * 1. Vertically align all children. - * 2. The padding on this div allows the ellipsis to show if the content is truncated. If - * the padding was on the cell, the ellipsis would be cropped. - * 3. Support wrapping. - * 4. Prevent very long single words (e.g. the name of a field in a document) from overflowing - * the cell. - */ -.euiTableCellContent { - overflow: hidden; - /* 4 */ - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - /* 1 */ - padding: 8px; - /* 2 */ } - -.euiTableCellContent__text { - overflow-wrap: break-word; - /* 4 */ - min-width: 0; - text-overflow: ellipsis; } - @media screen and (-ms-high-contrast: active), screen and (-ms-high-contrast: none) { - .euiTableCellContent__text { - word-break: break-all; } } - -.euiTableCellContent--alignRight { - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - text-align: right; } - -.euiTableCellContent--alignCenter { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; } - -.euiTableHeaderCell, -.euiTableFooterCell, -.euiTableCellContent--truncateText { - white-space: nowrap; - /* 3 */ } - .euiTableHeaderCell .euiTableCellContent__text, - .euiTableFooterCell .euiTableCellContent__text, - .euiTableCellContent--truncateText .euiTableCellContent__text { - overflow: hidden; } - -.euiTableCellContent--overflowingContent { - overflow: visible; - white-space: normal; - word-break: break-all; - word-break: break-word; } - -.euiTableCellContent--showOnHover > *:not(:first-child) { - margin-left: 8px; } - -.euiTableRow-hasActions .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem { - -ms-flex-negative: 0; - flex-shrink: 0; - opacity: .7; - -webkit-filter: grayscale(100%); - filter: grayscale(100%); - -webkit-transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), -webkit-filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), -webkit-filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), -webkit-filter 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - -.euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide, -.euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled, -.euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled:hover, -.euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled:focus, -.euiTableRow:hover .euiTableRow-hasActions .euiTableCellContent--showOnHover .expandedItemActions__completelyHide:disabled { - -webkit-filter: grayscale(0%); - filter: grayscale(0%); - opacity: 0; } - -.euiTableRow-hasActions:hover .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem:not(:disabled), .euiTableRow-hasActions:hover .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem:not(:disabled):hover, .euiTableRow-hasActions:hover .euiTableCellContent--showOnHover .euiTableCellContent__hoverItem:not(:disabled):focus { - opacity: 1; - -webkit-filter: grayscale(0%); - filter: grayscale(0%); } - -.euiTableRow-isExpandedRow .euiTableCellContent { - overflow: hidden; - -webkit-animation: 250ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards growExpandedRow; - animation: 250ms cubic-bezier(0.694, 0.0482, 0.335, 1) 1 normal forwards growExpandedRow; } - .euiDescriptionList.euiDescriptionList--row .euiDescriptionList__title { - color: #1a1c21; - font-size: 1rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 600; - letter-spacing: -.02em; - line-height: 1.5; - margin-top: 16px; } - .euiDescriptionList.euiDescriptionList--row .euiDescriptionList__title:first-of-type { - margin-top: 0; } - - .euiDescriptionList.euiDescriptionList--row .euiDescriptionList__description { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--center { - text-align: center; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--right { - text-align: right; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--reverse .euiDescriptionList__title { - color: #343741; - font-weight: 400; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--reverse .euiDescriptionList__description { - color: #1a1c21; - font-size: 1rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 600; - letter-spacing: -.02em; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--compressed .euiDescriptionList__title { - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--compressed .euiDescriptionList__description { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--compressed.euiDescriptionList--reverse .euiDescriptionList__title { - color: #343741; - font-weight: 400; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--row.euiDescriptionList--compressed.euiDescriptionList--reverse .euiDescriptionList__description { - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--column { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: stretch; - -ms-flex-align: stretch; - align-items: stretch; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } - .euiDescriptionList.euiDescriptionList--column > * { - margin-top: 16px; } - .euiDescriptionList.euiDescriptionList--column > *:first-child, - .euiDescriptionList.euiDescriptionList--column > :nth-child(2) { - margin-top: 0; } - .euiDescriptionList.euiDescriptionList--column .euiDescriptionList__title { - color: #1a1c21; - font-size: 1rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 600; - letter-spacing: -.02em; - line-height: 1.5; - width: 50%; - padding-right: 8px; } - .euiDescriptionList.euiDescriptionList--column .euiDescriptionList__description { - font-size: 1rem; - line-height: 1.5; - width: 50%; - padding-left: 8px; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--center .euiDescriptionList__title { - text-align: right; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--reverse .euiDescriptionList__title { - color: #343741; - font-weight: 400; - font-size: 1rem; - line-height: 1.5; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--reverse .euiDescriptionList__description { - color: #1a1c21; - font-size: 1rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 600; - letter-spacing: -.02em; - line-height: 1.5; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--compressed .euiDescriptionList__title { - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - line-height: 1.5; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--compressed .euiDescriptionList__description { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--compressed.euiDescriptionList--reverse .euiDescriptionList__title { - color: #343741; - font-weight: 400; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; } - .euiDescriptionList.euiDescriptionList--column.euiDescriptionList--compressed.euiDescriptionList--reverse .euiDescriptionList__description { - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--inline .euiDescriptionList__title { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - display: inline; - border-radius: 4px; - font-weight: 400; - background: #F5F7FA; - border: 1px solid #D3DAE6; - padding: 0 4px; - margin: 0 4px; } - .euiDescriptionList.euiDescriptionList--inline .euiDescriptionList__title:first-of-type { - margin-left: 0; } - - .euiDescriptionList.euiDescriptionList--inline .euiDescriptionList__description { - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - display: inline; - word-break: break-all; } - - .euiDescriptionList.euiDescriptionList--inline.euiDescriptionList--compressed .euiDescriptionList__title { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--inline.euiDescriptionList--compressed .euiDescriptionList__description { - font-size: 12px; - font-size: 0.75rem; - line-height: 1.5; } - - .euiDescriptionList.euiDescriptionList--inline.euiDescriptionList--center { - text-align: center; } - - .euiEmptyPrompt { - max-width: 36em; - text-align: center; - padding: 24px; - margin: auto; } - - .euiErrorBoundary { - background: repeating-linear-gradient(45deg, rgba(189, 39, 30, 0.25), rgba(189, 39, 30, 0.25) 1px, rgba(189, 39, 30, 0.05) 1px, rgba(189, 39, 30, 0.05) 20px); - overflow: auto; - padding: 16px; } - - .euiErrorBoundary__text { - background-color: #FFF; - padding: 8px; } - - .euiErrorBoundary__stack { - white-space: pre-wrap; } - .euiProgress { - position: relative; - overflow: hidden; - background-color: #D3DAE6; } - - .euiProgress--xs { - height: 2px; } - - .euiProgress--s { - height: 4px; } - - .euiProgress--m { - height: 8px; } - - .euiProgress--l { - height: 16px; } - - .euiProgress--native { - display: block; - width: 100%; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - border: none; } - .euiProgress--native::-webkit-progress-bar { - background-color: #D3DAE6; } - .euiProgress--native::-webkit-progress-value { - -webkit-transition: width 250ms linear; - transition: width 250ms linear; } - .euiProgress--native::-moz-progress-bar { - -webkit-transition: width 250ms linear; - transition: width 250ms linear; } - - /** - * An indeterminate bar has an unreliable end time. Because of a Firefox animation issue, - * we apply this style to a
instead of a element. - * See https://css-tricks.com/html5-progress-element/ for more info. - */ - .euiProgress--indeterminate:before { - position: absolute; - content: ''; - width: 100%; - top: 0; - bottom: 0; - left: 0; - -webkit-transform: scaleX(0) translateX(0%); - transform: scaleX(0) translateX(0%); - -webkit-animation: euiProgress 1s cubic-bezier(0.694, 0.0482, 0.335, 1) infinite; - animation: euiProgress 1s cubic-bezier(0.694, 0.0482, 0.335, 1) infinite; } - - .euiProgress--fixed { - position: fixed; - z-index: 1001; } - - .euiProgress--absolute { - position: absolute; } - - .euiProgress--fixed, - .euiProgress--absolute { - top: 0; - left: 0; - right: 0; - background-color: transparent; } - .euiProgress--fixed.euiProgress--native::-webkit-progress-bar, - .euiProgress--absolute.euiProgress--native::-webkit-progress-bar { - background-color: transparent; } - .euiProgress--fixed.euiProgress--native::-moz-progress-bar, - .euiProgress--absolute.euiProgress--native::-moz-progress-bar { - background-color: transparent; } - - .euiProgress--primary.euiProgress--native::-webkit-progress-value { - background-color: #006BB4; } - - .euiProgress--primary.euiProgress--native::-moz-progress-bar { - background-color: #006BB4; } - - .euiProgress--primary.euiProgress--indeterminate:before { - background-color: #006BB4; } - - .euiProgress--secondary.euiProgress--native::-webkit-progress-value { - background-color: #017D73; } - - .euiProgress--secondary.euiProgress--native::-moz-progress-bar { - background-color: #017D73; } - - .euiProgress--secondary.euiProgress--indeterminate:before { - background-color: #017D73; } - - .euiProgress--warning.euiProgress--native::-webkit-progress-value { - background-color: #F5A700; } - - .euiProgress--warning.euiProgress--native::-moz-progress-bar { - background-color: #F5A700; } - - .euiProgress--warning.euiProgress--indeterminate:before { - background-color: #F5A700; } - - .euiProgress--danger.euiProgress--native::-webkit-progress-value { - background-color: #BD271E; } - - .euiProgress--danger.euiProgress--native::-moz-progress-bar { - background-color: #BD271E; } - - .euiProgress--danger.euiProgress--indeterminate:before { - background-color: #BD271E; } - - .euiProgress--accent.euiProgress--native::-webkit-progress-value { - background-color: #DD0A73; } - - .euiProgress--accent.euiProgress--native::-moz-progress-bar { - background-color: #DD0A73; } - - .euiProgress--accent.euiProgress--indeterminate:before { - background-color: #DD0A73; } - - .euiProgress--subdued.euiProgress--native::-webkit-progress-value { - background-color: #98A2B3; } - - .euiProgress--subdued.euiProgress--native::-moz-progress-bar { - background-color: #98A2B3; } - - .euiProgress--subdued.euiProgress--indeterminate:before { - background-color: #98A2B3; } - - .euiFilterGroup { - background-color: #fbfcfd; - background-repeat: no-repeat; - background-size: 0% 100%; - /* 3 */ - -webkit-box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 1px -1px rgba(152, 162, 179, 0.2), 0 3px 2px -2px rgba(152, 162, 179, 0.2), inset 0 0 0 1px rgba(0, 0, 0, 0.1); - -webkit-transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in; - transition: box-shadow 150ms ease-in, background-color 150ms ease-in, background-image 150ms ease-in, background-size 150ms ease-in, -webkit-box-shadow 150ms ease-in; - max-width: 400px; - width: 100%; - height: 40px; - max-width: none; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 1px; - /* 1 */ } - .euiFilterGroup > * { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; } - .euiFilterGroup .euiPopover__anchor { - display: block; } - - .euiFilterGroup__popoverPanel { - width: 288px; } - - .visLib--legend-left .visLegend__valueDetails, .visLib--legend-right .visLegend__valueDetails { - border-bottom: 1px solid white!important; - } - .visLegend__valueDetails { - background-color: white!important; - } - .euiPopoverTitle { - color: #1a1c21; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 700; - padding: 12px; - text-transform: uppercase; - border-bottom: 1px solid #D3DAE6; - border-top-left-radius: 3px; - border-top-right-radius: 3px; } - .euiPopover__panel.euiPanel--paddingSmall .euiPopoverTitle { - padding: 12px 8px; - margin: -8px -8px 8px; } - .euiPopover__panel.euiPanel--paddingMedium .euiPopoverTitle { - padding: 12px 16px; - margin: -16px -16px 16px; } - .euiPopover__panel.euiPanel--paddingLarge .euiPopoverTitle { - padding: 12px 24px; - margin: -24px -24px 24px; } - .euiTitle + .euiTitle { - margin-top: 24px; } - - .euiTitle--uppercase { - text-transform: uppercase; } - - .euiTitle--xxxsmall { - color: #1a1c21!important; - } - - .euiTitle--xxsmall { - color: #1a1c21!important; - } - - .euiTitle--xsmall { - color: #1a1c21!important; - } - - .euiTitle--small:not(.wz-text-link) { - color: #1a1c21!important; - } - - .euiTitle--medium { - color: #1a1c21!important; - } - - .euiTitle--large { - color: #1a1c21!important; - } - .euiToast { - border: 1px solid #D3DAE6; - -webkit-box-shadow: 0 40px 64px 0 rgba(65, 78, 101, 0.1), 0 24px 32px 0 rgba(65, 78, 101, 0.1), 0 16px 16px 0 rgba(65, 78, 101, 0.1), 0 8px 8px 0 rgba(65, 78, 101, 0.1), 0 4px 4px 0 rgba(65, 78, 101, 0.1), 0 2px 2px 0 rgba(65, 78, 101, 0.1); - box-shadow: 0 40px 64px 0 rgba(65, 78, 101, 0.1), 0 24px 32px 0 rgba(65, 78, 101, 0.1), 0 16px 16px 0 rgba(65, 78, 101, 0.1), 0 8px 8px 0 rgba(65, 78, 101, 0.1), 0 4px 4px 0 rgba(65, 78, 101, 0.1), 0 2px 2px 0 rgba(65, 78, 101, 0.1); - border-color: #c6cad1; - border-top-color: #e3e4e8; - border-bottom-color: #aaafba; - position: relative; - padding: 16px; - background-color: #FFF; - width: 100%; } - .euiToast:hover .euiToast__closeButton, - .euiToast:focus .euiToast__closeButton { - opacity: 1; } - - /** - * 1. Fit button to icon. - */ - .euiToast__closeButton { - position: absolute; - top: 16px; - right: 16px; - line-height: 0; - /* 1 */ - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - opacity: 0; - -webkit-transition: opacity 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: opacity 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - .euiToast__closeButton svg { - fill: #8d8e90; } - .euiToast__closeButton:hover svg { - fill: #1a1c21; } - .euiToast__closeButton:focus { - background-color: #e6f0f8; - opacity: 1; } - .euiToast__closeButton:focus svg { - fill: #006BB4; } - - .euiToast--primary { - border-top: 2px solid #006BB4; } - - .euiToast--success { - border-top: 2px solid #017D73; } - - .euiToast--warning { - border-top: 2px solid #F5A700; } - - .euiToast--danger { - border-top: 2px solid #BD271E; } - - /** - * 1. Align icon with first line of title text if it wraps. - * 2. Apply margin to all but last item in the flex. - * 3. Account for close button. - */ - .euiToastHeader { - padding-right: 24px; - /* 3 */ - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-align: baseline; - -ms-flex-align: baseline; - align-items: baseline; - /* 1 */ } - .euiToastHeader > * + * { - margin-left: 8px; - /* 2 */ } - - /** - * 1. Vertically center icon with first line of title. - */ - .euiToastHeader__icon { - -webkit-box-flex: 0; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - fill: #1a1c21; - -webkit-transform: translateY(2px); - transform: translateY(2px); - /* 1 */ } - - .euiToastHeader__title { - color: #1a1c21; - font-size: 1rem; - line-height: 1.5; - line-height: 1.5rem; - font-weight: 600; - letter-spacing: -.02em; - font-weight: 300; } - .euiTabs { - scrollbar-width: thin; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - position: relative; - max-width: 100%; - overflow-x: auto; - overflow-y: hidden; } - .euiTabs::-webkit-scrollbar { - width: 16px; - height: 16px; } - .euiTabs::-webkit-scrollbar-thumb { - background-color: rgba(105, 112, 125, 0.5); - border: 6px solid transparent; - background-clip: content-box; } - .euiTabs::-webkit-scrollbar-corner, .euiTabs::-webkit-scrollbar-track { - background-color: transparent; } - .euiTabs:before { - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 1px; - background-color: #D3DAE6; - content: ''; } - .euiTabs::-webkit-scrollbar { - height: 3px; } - .euiTabs.euiTabs--small .euiTab { - font-size: 14px; - font-size: 0.875rem; - padding: 8px; } - .euiTabs.euiTabs--expand .euiTab { - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; - -ms-flex-preferred-size: 0%; - flex-basis: 0%; } - - .euiTab { - font-size: 1rem; - line-height: 1.5; - position: relative; - cursor: pointer; - padding: 12px 16px; - background-color: transparent; - -webkit-transition: color 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), background-color 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); - transition: color 250ms cubic-bezier(0.694, 0.0482, 0.335, 1), background-color 250ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - .euiTab:hover:not(.euiTab-isSelected) { - color: #343741; - text-decoration: underline; } - .euiTab:focus { - background-color: #e6f0f8; - text-decoration: underline; } - .euiTab:focus:before { - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 1px; - background-color: #D3DAE6; - content: ''; } - .euiTab.euiTab-isDisabled { - color: #98A2B3; } - .euiTab.euiTab-isDisabled:hover { - cursor: not-allowed; - text-decoration: none; - color: #98A2B3; } - .euiTab.euiTab-isSelected { - cursor: default; - color: #006BB4; } - .euiTab.euiTab-isSelected:after { - position: absolute; - bottom: 0; - left: 0; - content: ' '; - width: 100%; - height: 2px; - background-color: #006BB4; - -webkit-animation: euiTab 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); - animation: euiTab 150ms cubic-bezier(0.694, 0.0482, 0.335, 1); } - - .euiTab__content { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - -webkit-transition: -webkit-transform 150ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: -webkit-transform 150ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: transform 150ms cubic-bezier(0.34, 1.61, 0.7, 1); - transition: transform 150ms cubic-bezier(0.34, 1.61, 0.7, 1), -webkit-transform 150ms cubic-bezier(0.34, 1.61, 0.7, 1); - -webkit-transform: translateY(0); - transform: translateY(0); } - - - - - .application .ace-tm { - background-color: #F5F7FA; - color: #343741; } - .application .ace-tm .ace_scrollbar::-webkit-scrollbar { - width: 16px; - height: 16px; } - .application .ace-tm .ace_scrollbar::-webkit-scrollbar-thumb { - background-color: rgba(105, 112, 125, 0.5); - border: 6px solid transparent; - background-clip: content-box; } - .application .ace-tm .ace_scrollbar::-webkit-scrollbar-corner, .application .ace-tm .ace_scrollbar::-webkit-scrollbar-track { - background-color: transparent; } - .application .ace-tm .ace_gutter-active-line, - .application .ace-tm .ace_marker-layer .ace_active-line { - background-color: rgba(211, 218, 230, 0.7); } - .application .ace-tm .ace_snippet-marker { - width: 100%; - background-color: #e9edf3; - border: none; } - .application .ace-tm .ace_indent-guide { - background: linear-gradient(to left, #98A2B3 0%, #98A2B3 1px, transparent 1px, transparent 100%); } - .application .ace-tm .ace_search { - z-index: 1001; } - .application .ace-tm .ace_layer.ace_marker-layer { - overflow: visible; } - .application .ace-tm .ace_warning { - color: #BD271E; } - .application .ace-tm .ace_method { - color: #c80a68; } - .application .ace-tm .ace_url, - .application .ace-tm .ace_start_triple_quote, - .application .ace-tm .ace_end_triple_quote { - color: #00756c; } - .application .ace-tm .ace_multi_string { - color: #007c1e; - font-style: italic; } - .application .ace-tm .ace_gutter { - background-color: #FFF; - color: #69707D; - border-left: 1px solid #e9edf3; } - .application .ace-tm .ace_print-margin { - width: 1px; - background: #D3DAE6; } - .application .ace-tm .ace_fold { - background-color: #6B72E6; } - .application .ace-tm .ace_cursor { - color: #000; } - .application .ace-tm .ace_invisible { - color: #D3DAE6; } - .application .ace-tm .ace_storage, - .application .ace-tm .ace_keyword { - color: #00739d; } - .application .ace-tm .ace_constant { - color: #900; } - .application .ace-tm .ace_constant.ace_buildin { - color: #5848f6; } - .application .ace-tm .ace_constant.ace_language { - color: #5457ea; } - .application .ace-tm .ace_constant.ace_library { - color: #007c1e; } - .application .ace-tm .ace_invalid { - background-color: #f8e9e9; - color: #b4251d; } - .application .ace-tm .ace_support.ace_function { - color: #3c4c72; } - .application .ace-tm .ace_support.ace_constant { - color: #007c1e; } - .application .ace-tm .ace_support.ace_type, - .application .ace-tm .ace_support.ace_class { - color: #5963b5; } - .application .ace-tm .ace_keyword.ace_operator { - color: #646a77; } - .application .ace-tm .ace_string { - color: #007c1e; } - .application .ace-tm .ace_comment { - color: #41755c; } - .application .ace-tm .ace_comment.ace_doc { - color: #00739d; } - .application .ace-tm .ace_comment.ace_doc.ace_tag { - color: #656b77; } - .application .ace-tm .ace_constant.ace_numeric { - color: #00739d; } - .application .ace-tm .ace_variable { - color: #00739d; } - .application .ace-tm .ace_xml-pe { - color: #646a77; } - .application .ace-tm .ace_entity.ace_name.ace_function { - color: #0000A2; } - .application .ace-tm .ace_heading { - color: #0c07ff; } - .application .ace-tm .ace_list { - color: #b90690; } - .application .ace-tm .ace_meta.ace_tag { - color: #00168e; } - .application .ace-tm .ace_string.ace_regex { - color: #d00000; } - .application .ace-tm .ace_marker-layer .ace_selection { - background: #b3d3e9; } - .application .ace-tm.ace_multiselect .ace_selection.ace_start { - -webkit-box-shadow: 0 0 3px 0px #FFF; - box-shadow: 0 0 3px 0px #FFF; } - .application .ace-tm .ace_marker-layer .ace_step { - background: #fdedcc; } - .application .ace-tm .ace_marker-layer .ace_stack { - background: #cce5e3; } - .application .ace-tm .ace_marker-layer .ace_bracket { - margin: -1px 0 0 -1px; - border: 1px solid #D3DAE6; } - .application .ace-tm .ace_marker-layer .ace_selected-word { - background: #F5F7FA; - border: 1px solid #D3DAE6; } - .sidebar-container { - padding-left: 0px !important; - padding-right: 0px !important; - background-color: #F5F7FA; - border-right-color: transparent; - border-bottom-color: transparent; } - .sidebar-container .sidebar-well { - background-color: #e6f0f8; } - .sidebar-container .sidebar-list .sidebar-controls { - border-radius: 4px; - margin-right: -13px; - margin-top: 2px; } - .sidebar-container .sidebar-list .sidebar-controls .navbar-btn-link { - padding-left: 8px; - padding-right: 8px; } - .sidebar-container .sidebar-list .sidebar-controls .sidebar-controls-error { - cursor: default; } - .sidebar-container .sidebar-list ul { - list-style: none; - margin-bottom: 0; } - .sidebar-container .sidebar-list .sidebar-item { - border-top-color: transparent; - font-size: 12px; - border-top: solid 1px transparent; - border-bottom: solid 1px transparent; - line-height: normal; } - .sidebar-container .sidebar-list .sidebar-item label { - font-size: 12px; - font-weight: 600; - color: #343741; - margin-bottom: 4px; - display: block; } - .sidebar-container .sidebar-list .sidebar-item label[for] { - cursor: pointer; } - .sidebar-container .sidebar-list .sidebar-item.active { - background-color: #dddee1; - color: #343741; - border-color: #D3DAE6; } - .sidebar-container .sidebar-list .sidebar-item-title, - .sidebar-container .sidebar-list .sidebar-item-text { - margin: 0; - padding: 4px 8px; - text-align: center; - width: 100%; - border: none; - border-radius: 0; } - .sidebar-container .sidebar-list .sidebar-item-title { - max-width: 100%; - /* 1 */ - overflow: hidden !important; - text-overflow: ellipsis !important; - white-space: nowrap !important; - word-wrap: normal !important; - /* 2 */ - text-align: left; } - .sidebar-container .sidebar-list .sidebar-item-title.full-title { - white-space: normal; } - .sidebar-container .sidebar-list .sidebar-item-text { - background: #FFF; } - .sidebar-container .sidebar-list-header { - padding-left: 8px; - padding-right: 8px; - color: #000; - border: 1px solid transparent; } - .sidebar-container .sidebar-list-header .sidebar-list-header-label { - font-size: 14px; - line-height: 1.5; - font-weight: 700; } - .sidebar-container .index-pattern { - font-weight: 700; - padding: 4px 8px; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - background-color: #002b48; - color: #FFF; - line-height: 24px; } - .sidebar-container .index-pattern .index-pattern-label { - font-size: 14px; - font-weight: 700; - margin: 0; } - .sidebar-container .index-pattern > * { - -webkit-box-flex: 0; - -webkit-flex: 0 1 auto; - -ms-flex: 0 1 auto; - flex: 0 1 auto; - -webkit-align-self: center; - -ms-flex-item-align: center; - align-self: center; } - .sidebar-container .index-pattern-selection { - padding: 8px; - padding-bottom: 0; } - .sidebar-container .index-pattern-selection .ui-select-choices { - width: auto; - max-height: 300px; } - - .dscFieldDetails .progress { - background-color: #e9ebee; - margin-bottom: 0; - border-radius: 0; } - - .dscFieldDetails .progress-bar { - padding-left: 10px; - text-align: right; - line-height: 20px; - max-width: 100%; } - - discover-app { - background-color: #FFF; } - - .dscSidebar__listHeader { - margin-top: 5px; } - - .dscFieldList--popular { - padding-top: 10px; } - - .dscWrapper { - padding-right: 0; - padding-left: 21px; - z-index: 1; } - - .dscWrapper__content { - padding-right: 16px; - clear: both; } - - .dscTimechart { - display: block; - position: relative; } - .dscTimechart .series > rect { - fill-opacity: 0.5; - stroke-width: 1; } - - .dscTimechart__header { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: center; - -webkit-justify-content: center; - -ms-flex-pack: center; - justify-content: center; - min-height: 40px; - padding: 4px 0; } - - .dscOverlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 20; - padding-top: 12px; - opacity: 0.75; - text-align: center; - background-color: transparent; } - - .dscTable { - overflow: auto; } - .dscTable .kbnDocTable__row { - font-family: "Roboto Mono", Consolas, Menlo, Courier, monospace; - font-size: 12px; } - - .dscTable__footer { - background-color: #D3DAE6; - padding: 5px 10px; - text-align: center; } - - /** - * 1. Override sidebar-item-title styles. - */ - .dscSidebarItem { - position: relative; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - padding-top: 0 !important; - /* 1 */ - padding-bottom: 0 !important; - /* 1 */ - height: 32px; } - .dscSidebarItem:hover .dscSidebarItem__action, .dscSidebarItem:focus .dscSidebarItem__action { - opacity: 1; } - - .dscSidebarItem--active { - background: #e9ebee; - color: #000; - font-weight: bold; } - - /** - * 1. Truncate long text so it doesn't push the actions outside of the container. - */ - .dscSidebarItem__label { - overflow: hidden; - /* 1 */ - text-overflow: ellipsis; - /* 1 */ } - - /** - * 1. Only visually hide the action, so that it's still accessible to screen readers. - * 2. When tabbed to, this element needs to be visible for keyboard accessibility. - */ - .dscSidebarItem__action { - opacity: 0; - /* 1 */ } - .dscSidebarItem__action:focus { - opacity: 1; - /* 2 */ } - - .dscFieldDetails { - padding: 10px; - background-color: #e9ebee; - color: #343741; } - - .dscFieldDetails__progress { - background-color: #FFF; - color: #69707D; - padding: 4px; } - - .dscFieldDetailsItem { - margin-top: 5px; } - - .dscFieldDetails__filter { - cursor: pointer; } - - .dscFieldDetailsItem__title { - line-height: 1.5; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; } - - /** - * 1. If the field name is very long, don't let it squash the buttons. - */ - .dscFieldDetailsItem__buttonGroup { - -webkit-box-flex: 0; - -webkit-flex: 0 0 auto; - -ms-flex: 0 0 auto; - flex: 0 0 auto; - /* 1 */ } - - .dscFieldDetailsItem__button { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - border: none; - padding: 0; - background-color: transparent; } - - .dscField--noResults { - color: #69707D; } - - .dscField__icon { - margin-right: 5px; - text-align: center; - display: inline-block; - width: 12px; - color: #69707D; } - - .dscResults h3 { - margin: -20px 0 10px 0; - text-align: center; } - - .dscResults__interval { - display: inline-block; - width: auto; } - - .dscSkipButton { - position: absolute; - left: -10000px; - top: 4px; - width: 1px; - height: 1px; - overflow: hidden; } - .dscSkipButton:focus { - left: initial; - right: 16px; - width: auto; - height: auto; } - - .leaflet-bar { - -webkit-box-shadow: 0 6px 12px -1px rgba(65, 78, 101, 0.2), 0 4px 4px -1px rgba(65, 78, 101, 0.2), 0 2px 2px 0 rgba(65, 78, 101, 0.2); - box-shadow: 0 6px 12px -1px rgba(65, 78, 101, 0.2), 0 4px 4px -1px rgba(65, 78, 101, 0.2), 0 2px 2px 0 rgba(65, 78, 101, 0.2); } - - .leaflet-container { - background: #FFF; - min-width: 1px !important; - min-height: 1px !important; } - - .leaflet-clickable:hover { - stroke-width: 8px; - stroke-opacity: 0.8; } - - /** - * 1. Since Leaflet is an external library, we also have to provide EUI variables - * to non-override colors for darkmode. - */ - .leaflet-control a { - background-color: #FFF; - /* 1 */ - border-color: #D3DAE6; - /* 1 */ - color: #343741; - /* 1 */ } - - .leaflet-retina .leaflet-draw-toolbar a { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 540 60' height='60' width='540'%3E%3Cg fill='rgb%2852, 55, 65%29'%3E%3Cg%3E%3Cpath d='M18 36v6h6v-6h-6zm4 4h-2v-2h2v2z'/%3E%3Cpath d='M36 18v6h6v-6h-6zm4 4h-2v-2h2v2z'/%3E%3Cpath d='M23.142 39.145l-2.285-2.29 16-15.998 2.285 2.285z'/%3E%3C/g%3E%3Cpath d='M100 24.565l-2.096 14.83L83.07 42 76 28.773 86.463 18z'/%3E%3Cpath d='M140 20h20v20h-20z'/%3E%3Cpath d='M221 30c0 6.078-4.926 11-11 11s-11-4.922-11-11c0-6.074 4.926-11 11-11s11 4.926 11 11z'/%3E%3Cpath d='M270,19c-4.971,0-9,4.029-9,9c0,4.971,5.001,12,9,14c4.001-2,9-9.029,9-14C279,23.029,274.971,19,270,19z M270,31.5c-2.484,0-4.5-2.014-4.5-4.5c0-2.484,2.016-4.5,4.5-4.5c2.485,0,4.5,2.016,4.5,4.5C274.5,29.486,272.485,31.5,270,31.5z'/%3E%3Cg%3E%3Cpath d='M337,30.156v0.407v5.604c0,1.658-1.344,3-3,3h-10c-1.655,0-3-1.342-3-3v-10c0-1.657,1.345-3,3-3h6.345 l3.19-3.17H324c-3.313,0-6,2.687-6,6v10c0,3.313,2.687,6,6,6h10c3.314,0,6-2.687,6-6v-8.809L337,30.156'/%3E%3Cpath d='M338.72 24.637l-8.892 8.892H327V30.7l8.89-8.89z'/%3E%3Cpath d='M338.697 17.826h4v4h-4z' transform='rotate(-134.99 340.703 19.817)'/%3E%3C/g%3E%3Cg%3E%3Cpath d='M381 42h18V24h-18v18zm14-16h2v14h-2V26zm-4 0h2v14h-2V26zm-4 0h2v14h-2V26zm-4 0h2v14h-2V26z'/%3E%3Cpath d='M395 20v-4h-10v4h-6v2h22v-2h-6zm-2 0h-6v-2h6v2z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A"); - /* 1 */ } - - .leaflet-control-layers-expanded { - padding: 0; - margin: 0; - font-size: 11px; - font-size: 0.6875rem; - font-family: "Inter UI", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-weight: 500; - line-height: 1.5; } - .leaflet-control-layers-expanded label { - font-weight: 500; - margin: 0; - padding: 0; } - - /* over-rides leaflet popup styles to look like kibana tooltip */ - .leaflet-popup-content-wrapper { - margin: 0; - padding: 0; - background: #404040; - color: #FFF; - border-radius: 4px !important; } - - .leaflet-popup { - pointer-events: none; } - - .leaflet-popup-content { - margin: 0; - font-size: 14px; - font-size: 0.875rem; - line-height: 1.5; - font-weight: 400; - word-wrap: break-word; - overflow: hidden; - pointer-events: none; } - .leaflet-popup-content > * { - margin: 8px 8px 0; } - .leaflet-popup-content > :last-child { - margin-bottom: 8px; } - .leaflet-popup-content table td, .leaflet-popup-content table th { - padding: 4px; } - - .leaflet-popup-tip-container, - .leaflet-popup-close-button, - .leaflet-draw-tooltip { - display: none !important; } - - .leaflet-container .leaflet-control-attribution { - background-color: rgba(255, 255, 255, 0.3); - color: #69707D; } - .leaflet-container .leaflet-control-attribution p { - display: inline; } - - .leaflet-draw-actions a { - background-color: #D3DAE6; - color: #000; } - - img.leaflet-tile { - -webkit-filter: brightness(1.03) grayscale(0.73); - filter: brightness(1.03) grayscale(0.73); } - - img.leaflet-tile.filters-off { - -webkit-filter: none; - filter: none; } - - - -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile { - will-change: opacity; - } -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - will-change: transform; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } - - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } -.leaflet-control-zoom-out { - font-size: 20px; - } - -.leaflet-touch .leaflet-control-zoom-in { - font-size: 22px; - } -.leaflet-touch .leaflet-control-zoom-out { - font-size: 24px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: border-box; - box-sizing: border-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - border: none; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-clickable { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } - -.leaflet-draw-section{position:relative}.leaflet-draw-toolbar{margin-top:12px}.leaflet-draw-toolbar-top{margin-top:0}.leaflet-draw-toolbar-notop a:first-child{border-top-right-radius:0}.leaflet-draw-toolbar-nobottom a:last-child{border-bottom-right-radius:0}.leaflet-draw-toolbar a{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQ4AAAAeCAYAAADdEPCKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA8JJREFUeNrsms912kAQxgWPu0kFkApiVxA4wDVQQVAFQAU2FYArMKnAnNEBpYIoHcgVWK7AmXFGyUYWSIIdIZTv956eFu0+Dfvv0+zsOg4AAAAAAAAAAAAAAAAAAAAAAAAAAKgCDTQBqDrD4bBNt9l2u71TeDe/8zbxeKFhqwie503oFgwGg8Dye1PrS3YK1bdlsQNe4zQ1ekOpg6d0baRjw5pPli7dRnS15VHEddeut0xSttuVR6HYjZRtXiefk01f8nacT+kOPXMV/sIfoZBxVoYwXBt9GxPSBA5FNB64zyndty0eplCIkJzH45DOfabrA99tCwe9P25Ik7WmgJhCeAglkZzRbbkne042V0p15sH8aIiGY4jHmOwGCoLB9nop2dy/c0lzW/AYcOk/rJW8jExRsehJLFNEg4W5L/dYLLndWTiiE20Wqm8e76NhqfN35hfD5mTaIxrqAnIu4cgQDTXxkH78IaLBA/VesqYykLl9b2x6HmRzJ6IRyhXDArWQceXIhLpmD+SSvUiawD2jTsm6zGUO8Vh3pQ3CU0VDi5ZF0eCK9i0PrCzRcORLNKlDvEaWJ8scRZdU1vayxVye9GPvgu0YgjISobbFm2iQrY8ZH6MeldmUENtQ9TYMz8olQVineCLxWJ9S/k0JsY2jvI2ThKMiolE3RgXL2vQ6PhleVGCmqS/in12FOm8yRMNNeCNW1/pn6ufNAdF4m0scA9GIbdh6UbOKoiEUEY2gJsLRVip7TKzjXZq4UjD3kiEageHe1wJz+ZEmGuJ1jqpch2ZFRcMp6BJHNRlTnTPafjLSO3blxZ3f7SmjwcwUDQmEjjRFsgL8IxoiKpOq/+lmRUUjdqvyvvt7TQbRzzOK5TrhzdzK1T5SzE/Byu7JBWGKxkXQqqho8No6JJv3Tr5tpLp4HBsnX3D03TrZQntH1N6LA+290Oxv+Q/s4dz9R4LBy5aLDOo3c4oGb00+lyUaBqucolCLGIfsksxzFJ0rnV/h9k57b+jYDcSafMmTLztOtcDzvFGOvE6V69AqMKgbIiBliUb8FczyOiJHL+p+DvFYyS5G6QfApL3H4lmaJ1bHSn3u09WT8xxpy83P8rHya3JS2Jex/EACwXV7SeRfGfGNb3VZqrzGg6vkicRBuq/O761AX0TiSdKB1v/ROBFaUDx4KVL6kXPZfuXI/qM8sn5i1GDs/D052jsw2cZK9jPPNVhelvgkGK58FGYHPoR8zsO/9PoCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKggvwQYACihxUu99ixmAAAAAElFTkSuQmCC);background-image:linear-gradient(transparent,transparent),url(/built_assets/dlls/69d89e51f62b6a582c311c35c0f778aa.svg);background-repeat:no-repeat;background-size:270px 30px;background-clip:padding-box}.leaflet-retina .leaflet-draw-toolbar a{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAA8CAYAAAAtzWNjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB8BJREFUeNrs3dFR20oUxnFxh/ebDuJUEFJBzAO8BiowrgBcAVABpAJMBfg5PERUEKeCKB34dnD3kCNGFpIl2SuyZ/X/zXiMja1hOVrtp5UsJwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEmyx78AAIbr+Ph47O7GLV6afvv2LeU/Zsvj42Pr+h4dHfVa333KAQDeBu8Dd3fgBua5oT9bBqPLlq8dfOBwA/hzjd3gPKe+xgPHhrRtKl27dpy4u3fGNjwAdgsb36Xfu58Tg31ftq9PFc9/brmHPJSw8Vxj93NiKHQEUd8QZzg2pTETgUPDxoP+fOPuvrrbrdsAreiyUQ0wUYTjDu0dubvnIF14WtbphWtvRtj4MxDpU3cGQ8eT+3uvKtp2ReBYDxt5jY2Fjif3t15VtOvN6rsXYMe90sCRp7E8fV1XdQYDG57ihtl88OhwvLd16jY2cyV1vXC3ibuNNrw0inoX1umbhrpLDWeurUujbZQgJe38WNF3q0yLIUt3LC4q1oEPodR/Q9/Nt7FNe8B1vzfRh93A2rnGboDOCu+vrbF73SqA9vVWX1/ndoR8Dsdz2raUrjeEjUSfkyB17l5neSAaJ+2PB7YOHYbq+9AQNMr1nrj3nRoeiM9kT67levHDvX5qaa++Y00rw4Zwj2caRs8KA9FhYH28qe827Uxs+n2wfVhnJjrXuBg2hHs8c8t6VeMQwoaV+u4H2PnP9eEXmZLU9GU9bMQYPAalw8BbNrI4EO/QZjOHEjr02XLYmBfef6nPrdxtqtusEw0boYXM1NhyfYWNzjXOD5Po+y/1uZW7TeUwSl5j93hJfdvbM9T5gz2ksuWGq2iu7csMbKSvPM9wBH+oTOv7w8OiPlmZ6djQ5oW73evenazvE934mmura+Ov0l6vtGnT33xfCht5n18WZzPkXJehn9MSUODoXONS2FircT6b4X43Ks+AwEjgqBmw82PgLykrxOOEHsKGqeAxtMCh0+Q/km7TsXUyHYiDn9Fy7ZZ1ely3d99iJkT662HA7Xs5sbvQ92ZtalPT59dCR+C1HSd+DlMHfe6GnrPxqsZtDoHUzIyshY6A2+2tvr6vy7EfwMpfFzYODewh+QwbQjbcv90t6D3+gbnwFDYSXc5F6PXVT6OUN1iLusMk8rx7z5fSTMc48D39g1IQ3CVs5LV9p9uu0I097jSkAbfzVY13CBuWahxsff8hbAQTNhCmc8/Lmxhoc9UhkvuG99y3XE6IljuGjXyblRlbt2UwuS4MKl0fW7LcMWzkJ4hm1Ndg4CBsmNxjGBSdevZd45EuN2RVbW7aWK9aLidEPz2EjWXhdVbk19142vKxJY01bhE2loXXmaivXnfjacvHcQQO42FD/uaHHjemfGIlHGNjy/Xl/RbhIdqZvg5hQ85jOaHb2NMhbFBjS4HDcthQZ4m/Y/qvWL1eA6Lyu+K5pkNBkxj/ER3DxhmrTvRhgxpbCRwRhA0x73EWImOVRACq1u8T/TRKVb8+q9nri+EKq23CxgUDUfRhgxp7sP+XO6+1sCEzECu9YNdlD4sncCAEac3zd/pplDbX4di0HCtOmsKG4sTxCGtcuqgXNfbgTWY4YgkbBbc97b1xOAUhhOrlhvCbX9vgu97XhY0swsODlrdZ6FDjwK4gSuAYcNhI9CN01z0s+j9WSRN7+qEu16frv/x+wgYIGwSOYYeNQui4TfwfAklZJYOqcdpDjTMj3467SLafxVvp+62by7ZKb58IG1FaqzFho1+9ncMRc9go7cXdeVweH4kNj5yvcOl5eRbClpyrNNty/Z7F8IWEeiGvjC4QL72QFzW2Fjgqrs9/HnnYyC/pLIPRyNPySNfhkZmsSeLvu1Ruja3fk6TbdUNSa9+K6/y74/vf002oMZr5PKQy1j3B/BZ12CiYeloOKTvQPX13d+ppcacG9/ynSfuZt5XH/vCWxju+/4CeQo3xtoHjZQ8nWb8ee9QnW+nx+JTAEXXoWHoYSKcW+4AeVpi1fPnM0PeJFGtxUHeNkSb6voOa5SKgGj8+Pm5VY30fNfagj3M4nq+3r19jLqny6wAOFVx7SNCsxGEPvHJ4QWokHwUddQySp5b7gLZdZixvGsLG3FCbFq5NWaGW+TVGfnZYjEyzFwcxOSF4QW8Jw9HR0cKFhbUau8c711iWy383nMDxWcPG5wENRqlrs6yEba+xv9KA8aQDkpVPLog08OX1OtPh6vwp+fMV803ndUhd5QTR20hOoLzV0FF1Au21fmrLGjlUVjyx/STZ/nsyfB56eyvlbXXXx9Q48Pq6gLVWv46PvdvztSBdEes2Rlexhw7Xfhl8ftUMqJmmagkZyxgGIFSeKP1Sc0MBsmubz3Sm451ugGcGTxIttkemyrvOWlWFSzOzWBu21V2Z2Lbr5cu91NjCx2Y1NHipr357bJAzHKn1Pdgd9wAz15GnulKnOmuRMSxHXfM0Gdi1U/TwirRZgsfc+jquIeGDa5Ps9W5zYuDS4GGUNLDl9EpDwgc3EG9dY2OHUQZVXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXvlfgAEAnX0PAxdRd2IAAAAASUVORK5CYII=);background-image:linear-gradient(transparent,transparent),url(/built_assets/dlls/69d89e51f62b6a582c311c35c0f778aa.svg)} -.leaflet-draw a{display:block;text-align:center;text-decoration:none}.leaflet-draw a .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.leaflet-draw-actions{display:none;list-style:none;margin:0;padding:0;position:absolute;left:26px;top:0;white-space:nowrap}.leaflet-touch .leaflet-draw-actions{left:32px}.leaflet-right .leaflet-draw-actions{right:26px;left:auto}.leaflet-touch .leaflet-right .leaflet-draw-actions{right:32px;left:auto}.leaflet-draw-actions li{display:inline-block} -.leaflet-draw-actions li:first-child a{border-left:0}.leaflet-draw-actions li:last-child a{-webkit-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.leaflet-right .leaflet-draw-actions li:last-child a{-webkit-border-radius:0;border-radius:0}.leaflet-right .leaflet-draw-actions li:first-child a{-webkit-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.leaflet-draw-actions a{background-color:#919187;border-left:1px solid #AAA;color:#FFF;font:11px/19px "Helvetica Neue",Arial,Helvetica,sans-serif;line-height:28px;text-decoration:none;padding-left:10px;padding-right:10px;height:28px} -.leaflet-touch .leaflet-draw-actions a{font-size:12px;line-height:30px;height:30px}.leaflet-draw-actions-bottom{margin-top:0}.leaflet-draw-actions-top{margin-top:1px}.leaflet-draw-actions-top a,.leaflet-draw-actions-bottom a{height:27px;line-height:27px}.leaflet-draw-actions a:hover{background-color:#a0a098}.leaflet-draw-actions-top.leaflet-draw-actions-bottom a{height:26px;line-height:26px}.leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:-2px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polyline{background-position:0 -1px} -.leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-31px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polygon{background-position:-29px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-62px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-rectangle{background-position:-60px -1px}.leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-92px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circle{background-position:-90px -1px} -.leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-122px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-marker{background-position:-120px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-152px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit{background-position:-150px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-182px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove{background-position:-180px -1px} -.leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-212px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled{background-position:-210px -1px}.leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-242px -2px}.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled{background-position:-240px -2px}.leaflet-mouse-marker{background-color:#fff;cursor:crosshair}.leaflet-draw-tooltip{background:#363636;background:rgba(0,0,0,0.5);border:1px solid transparent;-webkit-border-radius:4px;border-radius:4px;color:#fff;font:12px/18px "Helvetica Neue",Arial,Helvetica,sans-serif;margin-left:20px;margin-top:-21px;padding:4px 8px;position:absolute;visibility:hidden;white-space:nowrap;z-index:6} -.leaflet-draw-tooltip:before{border-right:6px solid black;border-right-color:rgba(0,0,0,0.5);border-top:6px solid transparent;border-bottom:6px solid transparent;content:"";position:absolute;top:7px;left:-7px}.leaflet-error-draw-tooltip{background-color:#f2dede;border:1px solid #e6b6bd;color:#b94a48}.leaflet-error-draw-tooltip:before{border-right-color:#e6b6bd}.leaflet-draw-tooltip-single{margin-top:-12px}.leaflet-draw-tooltip-subtext{color:#f8d5e4}.leaflet-draw-guide-dash{font-size:1%;opacity:.6;position:absolute;width:5px;height:5px} -.leaflet-edit-marker-selected{background-color:rgba(254,87,161,0.1);border:4px dashed rgba(254,87,161,0.6);-webkit-border-radius:4px;border-radius:4px;box-sizing:content-box}.leaflet-edit-move{cursor:move}.leaflet-edit-resize{cursor:pointer}.leaflet-oldie .leaflet-draw-toolbar{border:1px solid #999} -/* - leaflet.responsive.popup 0.2.0 - (c) 2017 https://github.com/yafred -*/ - - -/* North */ -.leaflet-resp-popup-north .leaflet-popup-tip { - box-shadow: none; +.wz-menu-content { + background-color: #1a1b20; + border-bottom: 1px solid #343741; + color: white; } - -/* South */ -.leaflet-resp-popup-south .leaflet-popup-tip-container { - top: 0; - margin-top: -20px; +.wz-menu-button.wz-menu-active { + background-color: #16171c !important; } -.leaflet-resp-popup-south .leaflet-popup-tip { - margin: 11px auto 0; - box-shadow: none; +.wz-menu-button:not([disabled]):hover { + background: #16171c; } - -/* West */ -.leaflet-resp-popup-west .leaflet-popup-tip-container { - right: 0; - margin-right: -20px; - left: 100%; - margin-left: -2px; - top: 50%; - margin-top: -11px; +.wzXmlEditor { + background: #1d1e24; + border: 1px solid #343741; + color: #c8dad9; } -.leaflet-resp-popup-west .leaflet-popup-tip { - margin: 1px -8px 0 -8px; - box-shadow: none; +.CodeMirror { + border-top: 1px solid #5c606f; } - -/* East */ -.leaflet-resp-popup-east .leaflet-popup-tip-container { - width: 20px; - left: 2px; - top: 50%; - margin-top: -11px; +.wz-select-input { + border: none !important; } -.leaflet-resp-popup-east .leaflet-popup-tip { - margin: 0 11px; - box-shadow: none; +.euiCard { + color: #dfe5ef; } - -/* South-East */ -.leaflet-resp-popup-south-east .leaflet-popup-tip-container { - left: 0; - margin-left: 0; - top: 0; - margin-top: -20px; +.md-subheader.md-default-theme, .md-subheader { + color: #dfe5ef; } -.leaflet-resp-popup-south-east .leaflet-popup-tip { - margin: 11px 11px 11px -8px; - box-shadow: none; +.euiCard__top.wz-card-actions-top { + background: #272931; } -.leaflet-resp-popup-south-east .leaflet-popup-content-wrapper { - border-radius: 0 20px 20px 20px; +.table { + color: #dfe5ef !important; } - -/* East-South */ -.leaflet-resp-popup-east-south .leaflet-popup-tip-container { - width: 20px; - left: 0; - top: 0; +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #1a1b21; + color: #dfe5ef !important; } -.leaflet-resp-popup-east-south .leaflet-popup-tip { - margin: -8px 11px; - box-shadow: none; +.table-hover > tbody > tr:hover { + background-color: rgba(27, 169, 245, 0.05) !important; } -.leaflet-resp-popup-east-south .leaflet-popup-content-wrapper { - border-radius: 0 20px 20px 20px; +#wz-search-filter-bar { + background: #16171c; + color: #dfe5ef; } - -/* North-East */ -.leaflet-resp-popup-north-east .leaflet-popup-tip-container { - left: 0; - margin-left: 0; - margin-top: -1px; +#wz-search-filter-bar-input{ + box-shadow: none; } -.leaflet-resp-popup-north-east .leaflet-popup-tip { - margin: -8px 11px 11px -8px; - box-shadow: none; +.kuiLocalSearchInput, .kuiLocalSearchInput:focus { + border: 1px solid #343741 !important; + background: #16171c; + color: #dfe5ef; } -.leaflet-resp-popup-north-east .leaflet-popup-content-wrapper { - border-radius: 20px 20px 20px 0; +.wzMultipleSelector .panel-primary { + border: 1px solid #343741!important; + -webkit-box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1) !important; + box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1) !important; + border-radius: 2px; } - -/* East-North */ -.leaflet-resp-popup-east-north .leaflet-popup-tip-container { - left: 0; - margin-left: -20px; - margin-top: -20px; +.wzMultipleSelector .panel-primary > .panel-heading { + color: #fff; + border-color: #343741; } -.leaflet-resp-popup-east-north .leaflet-popup-tip { - margin: 11px 11px 11px 11px; - box-shadow: none; +.wzMultipleSelector select { + border-color: #343741; } - -/* North-West */ -.leaflet-resp-popup-north-west .leaflet-popup-tip-container { - width: 20px; - margin-right: 0; - margin-top: -1px; - left: 100%; - right: 0; +.btn-info { + border: 1px solid #343741 !important; } -.leaflet-resp-popup-north-west .leaflet-popup-tip { - margin: -8px 11px 11px 11px; - box-shadow: none; +.table-resizable > thead th:not(:first-child) { + border-left: 1px dashed #343741; } -.leaflet-resp-popup-north-west .leaflet-popup-content-wrapper { - border-radius: 20px 20px 0 20px; +md-dialog.md-default-theme.md-content-overflow .md-actions, +md-dialog.md-content-overflow .md-actions, +md-dialog.md-default-theme.md-content-overflow md-dialog-actions, +md-dialog.md-content-overflow md-dialog-actions, +md-divider.md-default-theme, md-divider { + border-top-color: rgb(52, 55, 65); } - -/* West-North */ -.leaflet-resp-popup-west-north .leaflet-popup-tip-container { - margin-left: 0; - margin-top: -20px; - left: 100%; - right: 0; +.wz-item-detail { + border: 1px solid #343741; } -.leaflet-resp-popup-west-north .leaflet-popup-tip { - margin: 11px 11px 0px -8px; - box-shadow: none; +.wz-item-list { + background-color: #16171c; + border: 1px solid #343741; } -.leaflet-resp-popup-west-north .leaflet-popup-content-wrapper { - border-radius: 20px 20px 0 20px; +.euiFlexGroup .euiFlexGroup:hover { + background: #1D1E24; } - -/* South-West */ -.leaflet-resp-popup-south-west .leaflet-popup-tip-container { - width: 20px; - left: 100%; - top: 0; - margin-top: -20px; +.wz-dev-box .CodeMirror { + border: 1px solid #343741 !important; } -.leaflet-resp-popup-south-west .leaflet-popup-tip { - margin: 11px 11px 11px 11px; - box-shadow: none; +.wz-dev-column-separator { + background: #1d1e24; } -.leaflet-resp-popup-south-west .leaflet-popup-content-wrapper { - border-radius: 20px 0 20px 20px; +.CodeMirror-styled-background { + background-color: #343741; } - -/* West-South */ -.leaflet-resp-popup-west-south .leaflet-popup-tip-container { - margin-left: 0; - margin-right: -20px; - left: 100%; - right: 0; - top: 0; +.wz-dev-column-separator:hover { + background-color: #0b4462; } -.leaflet-resp-popup-west-south .leaflet-popup-tip { - margin: -8px; - box-shadow: none; +.CodeMirror-hints{ + background-color: #16171c !important; + border-color: #000; + color: #dfe5ef; } -.leaflet-resp-popup-west-south .leaflet-popup-content-wrapper { - border-radius: 20px 0 20px 20px; +.wz-input-text { + background-color: #16171c; + border: 1px solid #343741; + color: #dfe5ef; } \ No newline at end of file diff --git a/public/less/layout.less b/public/less/layout.less index 6bd4b2d18..26e366548 100644 --- a/public/less/layout.less +++ b/public/less/layout.less @@ -18,6 +18,9 @@ html { background: white !important; } +#kibana-body{ + min-height: calc(~'100vh - 1px') !important; +} /* Margins */ .wz-margin-right-8 { @@ -417,11 +420,6 @@ md-dialog.modalTheme .md-button { background-color: #0079a5 !important; } -.euiButton--primary.euiButton--fill { - background-color: #0079a5 !important; - border-color: #0079a5 !important; -} - .columns-bar { margin-top: -17px; margin-left: -16px; diff --git a/public/less/loader.js b/public/less/loader.js index 0ebd7a44d..6abec209a 100644 --- a/public/less/loader.js +++ b/public/less/loader.js @@ -23,7 +23,6 @@ import './typography.less'; import './ui_framework.css'; import './jquery-ui.css'; -//import './dark_theme/wz_theme_dark.css'; import chrome from 'ui/chrome'; const IS_DARK_THEME = chrome.getUiSettingsClient().get('theme:darkMode'); /* eslint-disable no-undef */ @@ -32,15 +31,5 @@ if (IS_DARK_THEME) { newSS.rel = 'stylesheet'; newSS.href = '../plugins/wazuh/less/dark_theme/wz_theme_dark.css'; document.getElementsByTagName('head')[0].appendChild(newSS); - - newSS = document.createElement('link'); - newSS.rel = 'stylesheet'; - newSS.href = '../plugins/wazuh/less/dark_theme/bootstrap_light.css'; - document.getElementsByTagName('head')[0].appendChild(newSS); - - newSS = document.createElement('link'); - newSS.rel = 'stylesheet'; - newSS.href = '../plugins/wazuh/less/dark_theme/kui_light.css'; - document.getElementsByTagName('head')[0].appendChild(newSS); } /* eslint-enable no-undef */ diff --git a/public/services/common-data.js b/public/services/common-data.js index 1707e4d40..f23c95047 100644 --- a/public/services/common-data.js +++ b/public/services/common-data.js @@ -128,6 +128,8 @@ export class CommonData { audit: { group: 'audit' }, pci: { group: 'pci_dss' }, gdpr: { group: 'gdpr' }, + hipaa: { group: 'hipaa' }, + nist: { group: 'nist' }, aws: { group: 'amazon' }, virustotal: { group: 'virustotal' }, osquery: { group: 'osquery' }, @@ -153,6 +155,12 @@ export class CommonData { } else if (tab === 'gdpr') { this.removeDuplicateExists('rule.gdpr'); filters.push(filterHandler.gdprQuery()); + } else if (tab === 'hipaa') { + this.removeDuplicateExists('rule.hipaa'); + filters.push(filterHandler.hipaaQuery()); + } else if (tab === 'nist') { + this.removeDuplicateExists('rule.nist_800_53'); + filters.push(filterHandler.nistQuery()); } else { this.removeDuplicateRuleGroups(tabFilters[tab].group); filters.push(filterHandler.ruleGroupQuery(tabFilters[tab].group)); @@ -208,6 +216,40 @@ export class CommonData { } } + /** + * GET HIPAA + */ + async getHIPAA() { + try { + const hipaaTabs = []; + const data = await this.genericReq.request('GET', '/api/hipaa/all'); + if (!data.data) return []; + for (const key in data.data) { + hipaaTabs.push({ title: key, content: data.data[key] }); + } + return hipaaTabs; + } catch (error) { + return Promise.reject(error); + } + } + + /** + * GET NIST 800-53 + */ + async getNIST() { + try { + const nistTabs = []; + const data = await this.genericReq.request('GET', '/api/nist/all'); + if (!data.data) return []; + for (const key in data.data) { + nistTabs.push({ title: key, content: data.data[key] }); + } + return nistTabs; + } catch (error) { + return Promise.reject(error); + } + } + /** * Assign given filter * @param {Object} filterHandler diff --git a/public/services/reporting.js b/public/services/reporting.js index 8849cd3a7..10b473f4d 100644 --- a/public/services/reporting.js +++ b/public/services/reporting.js @@ -113,4 +113,51 @@ export class ReportingService { this.errorHandler.handle(error.message || error); } } + + async startConfigReport(obj, type, components) { + try { + this.$rootScope.reportBusy = true; + this.$rootScope.reportStatus = 'Generating PDF document...'; + this.$rootScope.$applyAsync(); + + const docType = + type === 'agentConfig' + ? `wazuh-agent-${obj.id}` + : `wazuh-group-${obj.name}`; + + const name = `${docType}-configuration-${(Date.now() / 1000) | 0}.pdf`; + const browserTimezone = moment.tz.guess(true); + + const data = { + array: [], + name, + filters: [ + type === 'agentConfig' ? { agent: obj.id } : { group: obj.name } + ], + time: '', + searchBar: '', + tables: [], + tab: type, + browserTimezone, + components + }; + + await this.genericReq.request('POST', '/reports', data); + + this.$rootScope.reportBusy = false; + this.$rootScope.reportStatus = false; + this.$rootScope.$applyAsync(); + this.errorHandler.info( + 'Success. Go to Wazuh > Management > Reporting', + 'Reporting' + ); + + return; + } catch (error) { + this.$rootScope.reportBusy = false; + this.$rootScope.reportStatus = false; + this.errorHandler.handle(error.message || error); + this.$rootScope.$applyAsync(); + } + } } diff --git a/public/services/resolves/check-timestamp.js b/public/services/resolves/check-timestamp.js index 9b87c408e..f7621bf7c 100644 --- a/public/services/resolves/check-timestamp.js +++ b/public/services/resolves/check-timestamp.js @@ -11,13 +11,13 @@ */ export async function checkTimestamp(appState, genericReq, $location, wzMisc) { try { - const data = await genericReq.request('GET', '/elastic/timestamp'); + const data = await genericReq.request('GET', '/api/timestamp'); const current = appState.getCreatedAt(); if (data && data.data) { if (!current) appState.setCreatedAt(data.data.lastRestart); wzMisc.setLastRestart(data.data.lastRestart); } else { - wzMisc.setBlankScr('Your .wazuh-version index is empty or corrupt.'); + wzMisc.setBlankScr('Your wazuh-version registry is empty or corrupt.'); $location.search('tab', null); $location.path('/blank-screen'); } diff --git a/public/services/resolves/get-config.js b/public/services/resolves/get-config.js index e0fd15175..7f403ff4a 100644 --- a/public/services/resolves/get-config.js +++ b/public/services/resolves/get-config.js @@ -20,6 +20,8 @@ export async function getWzConfig($q, genericReq, wazuhConfig) { 'checks.setup': true, 'extensions.pci': true, 'extensions.gdpr': true, + 'extensions.hipaa': true, + 'extensions.nist': true, 'extensions.audit': true, 'extensions.oscap': false, 'extensions.ciscat': false, @@ -30,8 +32,6 @@ export async function getWzConfig($q, genericReq, wazuhConfig) { timeout: 20000, 'wazuh.shards': 1, 'wazuh.replicas': 0, - 'wazuh-version.shards': 1, - 'wazuh-version.replicas': 0, 'ip.selector': true, 'ip.ignore': [], 'xpack.rbac.enabled': true, diff --git a/public/services/resolves/settings-wizard.js b/public/services/resolves/settings-wizard.js index d02e48406..ebe1a04b9 100644 --- a/public/services/resolves/settings-wizard.js +++ b/public/services/resolves/settings-wizard.js @@ -114,6 +114,8 @@ export function settingsWizard( audit: config['extensions.audit'], pci: config['extensions.pci'], gdpr: config['extensions.gdpr'], + hipaa: config['extensions.hipaa'], + nist: config['extensions.nist'], oscap: config['extensions.oscap'], ciscat: config['extensions.ciscat'], aws: config['extensions.aws'], diff --git a/public/templates/agents-prev/agents-prev.html b/public/templates/agents-prev/agents-prev.html index 5acc2459f..7e900658f 100644 --- a/public/templates/agents-prev/agents-prev.html +++ b/public/templates/agents-prev/agents-prev.html @@ -22,123 +22,133 @@
- -
-
- - Status - - - -
- There are no agents yet. -
-
- -
-
-
- - Details - - -
-
- -
-
-

Active

-
-

{{ctrl.summary.agentsCountActive}}

-
-
-
- -
-
-

Disconnected

-
-

{{ctrl.summary.agentsCountDisconnected}}

-
-
-
- -
-
-

Never connected

-
-

{{ctrl.summary.agentsCountNeverConnected}}

-
-
-
- -
-
-

Agents coverage

-
-

{{(ctrl.summary.agentsCoverity | number:2)}}%

-
-
-
-
-
- -
-
-

Last registered agent

-
- -

- -

-
-
-
- -
-
-

Most active agent

-
- -

- -

-
-
-
-
+
+
- -
- - - - Refresh -
- -
- - -
- +
+
+
+ + Status + + + +
+ There are no agents yet.
-
-
- - +
+
+ + Details + + +
+
+ +
+
+

Active

+
+

{{ctrl.summary.agentsCountActive}}

+
+
+
+ +
+
+

Disconnected

+
+

{{ctrl.summary.agentsCountDisconnected}}

+
+
+
+ +
+
+

Never connected

+
+

{{ctrl.summary.agentsCountNeverConnected}}

+
+
+
+
+
+

Agents coverage

+
+

{{(ctrl.summary.agentsCoverity | + number:2)}}%

+
+
+
+
+
+ +
+
+

Last registered agent

+
+ +

+ -

+
+
+
+ +
+
+

Most active agent

+
+ +

+ -

+
+
+
+
+
+ +
+ + + + Refresh +
+ +
+ + + + Add new agent + + + +
+ +
+
+ +
+
+
+
\ No newline at end of file diff --git a/public/templates/agents/agents-hipaa.html b/public/templates/agents/agents-hipaa.html new file mode 100644 index 000000000..999bc5db2 --- /dev/null +++ b/public/templates/agents/agents-hipaa.html @@ -0,0 +1,104 @@ + + + + +
+ + + +
+ HIPAA Requirement: {{tab.title}} + +
+
+
+
+
+
+
+
+ +
+ + + Top 5 rule groups + + + + + + + + + + + + Top 5 rules + + + + + + + + + + + + Top 5 HIPAA requirements + + + + + + + + + +
+ +
+ + + HIPAA Requirements + + + + + + + + + + + + + Rule level distribution + + + + + + + + + +
+ +
+ + + Alerts summary + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/public/templates/agents/agents-nist.html b/public/templates/agents/agents-nist.html new file mode 100644 index 000000000..9b37bda36 --- /dev/null +++ b/public/templates/agents/agents-nist.html @@ -0,0 +1,104 @@ + + + + +
+ + + +
+ NIST-800-53 Requirement: {{tab.title}} + +
+
+
+
+
+
+
+
+ +
+ + + Top 5 rule groups + + + + + + + + + + + + Top 5 rules + + + + + + + + + + + + Top 5 NIST-800-53 requirements + + + + + + + + + +
+ +
+ + + NIST-800-53 Requirements + + + + + + + + + + + + + Rule level distribution + + + + + + + + + +
+ +
+ + + Alerts summary + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/public/templates/agents/agents-welcome.html b/public/templates/agents/agents-welcome.html index f15ef90ca..78c8db2c5 100644 --- a/public/templates/agents/agents-welcome.html +++ b/public/templates/agents/agents-welcome.html @@ -7,20 +7,18 @@ not fetch data for this agent. Reason: {{emptyAgent}}
- + Try again
-
+
-
@@ -36,7 +34,7 @@ }" />
-
+
\ No newline at end of file diff --git a/public/templates/agents/agents.head b/public/templates/agents/agents.head index 77626fd34..fc56dcb52 100644 --- a/public/templates/agents/agents.head +++ b/public/templates/agents/agents.head @@ -135,12 +135,16 @@ - {{ tabNames['pci'] }} {{ tabNames['gdpr'] }} + {{ + tabNames['hipaa'] }} + {{ + tabNames['nist'] }} diff --git a/public/templates/agents/agents.pug b/public/templates/agents/agents.pug index 01942f943..d8c5dd5c0 100644 --- a/public/templates/agents/agents.pug +++ b/public/templates/agents/agents.pug @@ -9,6 +9,8 @@ include ./agents-audit.html include ./agents-ciscat.html include ./agents-pci.html include ./agents-gdpr.html +include ./agents-hipaa.html +include ./agents-nist.html include ./agents-virustotal.html include ./agents-syscollector.html include ./agents-osquery.html diff --git a/public/templates/management/configuration/integrity-monitoring/integrity-monitoring.head b/public/templates/management/configuration/integrity-monitoring/integrity-monitoring.head index d16d9e379..11a233f2c 100644 --- a/public/templates/management/configuration/integrity-monitoring/integrity-monitoring.head +++ b/public/templates/management/configuration/integrity-monitoring/integrity-monitoring.head @@ -32,7 +32,7 @@ Monitored Ignored No diff - Who-data + Who-data diff --git a/public/templates/management/configuration/welcome.html b/public/templates/management/configuration/welcome.html index 4575e7d47..4cca908d6 100644 --- a/public/templates/management/configuration/welcome.html +++ b/public/templates/management/configuration/welcome.html @@ -13,65 +13,58 @@
- - + + Edit configuration - + + Main configurations - +
- + - + - +
Name Description
Global configuration Global and remote settings
Cluster Master node configuration
Registration service Automatic agent registration service
- +
- + - + - + - + @@ -81,20 +74,17 @@ Alerts and output management -
Name Description
Global configuration Logging settings that apply to the agent
Communication Settings related to the connection with the manager
Anti-flooding settings Agent bucket parameters to avoid event flooding
Labels User-defined information about the agent included in alerts
+
- + - + @@ -103,20 +93,18 @@ Auditing and policy monitoring -
Name Description
Alerts Settings related to the alerts and their format
Integrations Slack, VirusTotal and PagerDuty integrations with external APIs
+
- + - + @@ -131,15 +119,13 @@ System threats and incident response -
Name Description
Policy monitoring Configuration to ensure compliance with security policies, standards and hardening guides
OpenSCAP Configuration assessment and automation of compliance monitoring using SCAP checks
+
- + @@ -153,14 +139,12 @@ - + - + @@ -170,7 +154,7 @@ - +
Name Description
Vulnerabilities Discover what applications are affected by well-known vulnerabilities
Gather relevant information about system OS, hardware, networking and packages
Active response Active threat addressing by inmmediate response
Active response Active threat addressing by inmmediate response Configuration options of the Command wodle
Docker listener Monitor and collect the activity from Docker containers such as creation, running, starting, stopping or pausing events @@ -181,26 +165,22 @@ Log data analysis - +
- + - + - + @@ -211,8 +191,7 @@ Cloud security monitoring -
Name Description
Log collection Log analysis from text files, Windows events or syslog outputs
Integrity monitoring Identify changes in content, permissions, ownership, and attributes of files
Agentless Run integrity checks on devices such as routers, firewalls and switches
+
@@ -234,14 +213,11 @@ More info about this section - Wazuh + Wazuh administration documentation - Wazuh + Wazuh capabilities documentation - Local + Local configuration reference diff --git a/public/templates/management/groups/groups.html b/public/templates/management/groups/groups.html index 9c4f5735c..40d3db71d 100644 --- a/public/templates/management/groups/groups.html +++ b/public/templates/management/groups/groups.html @@ -142,6 +142,10 @@
+ + + +
@@ -174,6 +178,10 @@ + + + +
- - Status - - Logs - Cluster - - Reporting - - \ No newline at end of file +
+ +
diff --git a/public/templates/management/monitoring/monitoring.head b/public/templates/management/monitoring/monitoring.head index 9129100cf..c1251c1e3 100644 --- a/public/templates/management/monitoring/monitoring.head +++ b/public/templates/management/monitoring/monitoring.head @@ -14,15 +14,9 @@ - - Status - Logs - Cluster - - Reporting - - +
+ +
@@ -110,15 +104,9 @@ - - Status - Logs - Cluster - - Reporting - - +
+ +
diff --git a/public/templates/management/reporting.html b/public/templates/management/reporting.html index 245619604..ca8ce47b5 100644 --- a/public/templates/management/reporting.html +++ b/public/templates/management/reporting.html @@ -1,30 +1,8 @@
-
-
- - - - -
\ No newline at end of file diff --git a/public/templates/management/ruleset/rules/rules-detail.html b/public/templates/management/ruleset/rules/rules-detail.html index 887b7c114..5e68b3123 100644 --- a/public/templates/management/ruleset/rules/rules-detail.html +++ b/public/templates/management/ruleset/rules/rules-detail.html @@ -3,8 +3,7 @@
+ tooltip-placement="bottom" ng-click="closeDetailView(true)">

@@ -16,8 +15,7 @@
-
ID: {{currentRule.id}}
+
ID: {{currentRule.id}}
Level: {{currentRule.level}}
@@ -33,8 +31,7 @@
-
+
-
- +
diff --git a/public/templates/management/ruleset/rules/rules-list.html b/public/templates/management/ruleset/rules/rules-list.html index 773caab66..d6fc758f5 100644 --- a/public/templates/management/ruleset/rules/rules-list.html +++ b/public/templates/management/ruleset/rules/rules-list.html @@ -5,7 +5,7 @@ + {label: 'Group', value: 'group'}, {label: 'PCI control', value: 'pci'}, {label: 'GDPR', value: 'gdpr'}, {label: 'HIPAA', value: 'hipaa'}, {label: 'NIST-800-53', value: 'nist-800-53'}]" />
@@ -51,6 +51,16 @@ + + HIPAA: {{getFilter('hipaa')}} + + + + + NIST-800-53: {{getFilter('nist-800-53')}} + + +
@@ -63,11 +73,11 @@ switch-text="Custom rules" switch-change="switchLocalRules()"> - diff --git a/public/templates/management/ruleset/ruleset.head b/public/templates/management/ruleset/ruleset.head index 13f05f74f..f70518ec6 100644 --- a/public/templates/management/ruleset/ruleset.head +++ b/public/templates/management/ruleset/ruleset.head @@ -1,9 +1,4 @@
-
- - - Rules - Decoders - Lists - -
\ No newline at end of file +
+ +
diff --git a/public/templates/overview/overview-hipaa.html b/public/templates/overview/overview-hipaa.html new file mode 100644 index 000000000..67acbf299 --- /dev/null +++ b/public/templates/overview/overview-hipaa.html @@ -0,0 +1,107 @@ + + +
+ + + +
+ HIPAA Requirement: {{tab.title}} + +
+
+
+
+
+
+
+
+ +
+ + + HIPAA requirements + + + + + + + + + + + + Top 10 agents by alerts number + + + + + + + + + +
+ +
+ + + Top requirements over time + + + + + + + + + +
+ +
+ + + Last alerts + + + + + + + + + + +
+ +
+ + + Requirements by agent + + + + + + + + + +
+ +
+ + + Alerts summary + + + + + + + + + +
+
\ No newline at end of file diff --git a/public/templates/overview/overview-nist.html b/public/templates/overview/overview-nist.html new file mode 100644 index 000000000..0f8a1ba3b --- /dev/null +++ b/public/templates/overview/overview-nist.html @@ -0,0 +1,107 @@ + + +
+ + + +
+ NIST 800-53 Requirement: {{tab.title}} + +
+
+
+
+
+
+
+
+ +
+ + + NIST 800-53 requirements + + + + + + + + + + + + Top 10 agents by alerts number + + + + + + + + + +
+ +
+ + + Top requirements over time + + + + + + + + + +
+ +
+ + + Last alerts + + + + + + + + + + +
+ +
+ + + Requirements by agent + + + + + + + + + +
+ +
+ + + Alerts summary + + + + + + + + + +
+
\ No newline at end of file diff --git a/public/templates/overview/overview-welcome.html b/public/templates/overview/overview-welcome.html index 3f13e3d16..1e0b176a3 100644 --- a/public/templates/overview/overview-welcome.html +++ b/public/templates/overview/overview-welcome.html @@ -1,4 +1,4 @@ -
+
{{ octrl.tabNames['pci'] }} {{ octrl.tabNames['gdpr'] }} + {{ octrl.tabNames['hipaa'] }} + {{ octrl.tabNames['nist'] }} diff --git a/public/templates/overview/overview.pug b/public/templates/overview/overview.pug index 675c5473a..24ceb03a6 100644 --- a/public/templates/overview/overview.pug +++ b/public/templates/overview/overview.pug @@ -9,6 +9,8 @@ include ./overview-audit.html include ./overview-ciscat.html include ./overview-pci.html include ./overview-gdpr.html +include ./overview-hipaa.html +include ./overview-nist.html include ./overview-aws.html include ./overview-virustotal.html include ./overview-osquery.html diff --git a/public/utils/codemirror/index.js b/public/utils/codemirror/index.js index f0c9562c1..d19d46f6d 100644 --- a/public/utils/codemirror/index.js +++ b/public/utils/codemirror/index.js @@ -4,6 +4,7 @@ import './codemirror.css'; import './foldgutter.css'; import './ttcn.css'; +import './lesser-dark.css'; import './javascript.js'; import './xml.js'; import './formatting.js'; diff --git a/public/utils/codemirror/lesser-dark.css b/public/utils/codemirror/lesser-dark.css new file mode 100644 index 000000000..1acc33c37 --- /dev/null +++ b/public/utils/codemirror/lesser-dark.css @@ -0,0 +1,131 @@ +/* +http://lesscss.org/ dark theme +Ported to CodeMirror by Peter Kroon +*/ +.cm-s-lesser-dark { + line-height: 1.3em; +} +.cm-s-lesser-dark.CodeMirror { + background: #25262E; + color: #ebefe7; + text-shadow: 0 -1px 1px #262626; +} +.cm-s-lesser-dark div.CodeMirror-selected { + background: #002835; +} /* 33322B*/ +.cm-s-lesser-dark .CodeMirror-line::selection, +.cm-s-lesser-dark .CodeMirror-line > span::selection, +.cm-s-lesser-dark .CodeMirror-line > span > span::selection { + background: #002835; +} +.cm-s-lesser-dark .CodeMirror-line::-moz-selection, +.cm-s-lesser-dark .CodeMirror-line > span::-moz-selection, +.cm-s-lesser-dark .CodeMirror-line > span > span::-moz-selection { + background: #002835; +} +.cm-s-lesser-dark .CodeMirror-cursor { + border-left: 1px solid white; +} +.cm-s-lesser-dark pre { + padding: 0 8px; +} /*editable code holder*/ + +.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { + color: #7efc7e; +} /*65FC65*/ + +.cm-s-lesser-dark .CodeMirror-gutters { + background: #1D1E24; + border-right: 1px solid #343741; +} +.cm-s-lesser-dark .CodeMirror-guttermarker { + color: #599eff; +} +.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { + color: #777; +} +.cm-s-lesser-dark .CodeMirror-linenumber { + color: #777; +} + +.cm-s-lesser-dark span.cm-header { + color: #a0a; +} +.cm-s-lesser-dark span.cm-quote { + color: #090; +} +.cm-s-lesser-dark span.cm-keyword { + color: #599eff; +} +.cm-s-lesser-dark span.cm-atom { + color: #c2b470; +} +.cm-s-lesser-dark span.cm-number { + color: #66c27d; +} +.cm-s-lesser-dark span.cm-def { + color: #c8dad9; +} +.cm-s-lesser-dark span.cm-variable { + color: #4dc0ba; +} +.cm-s-lesser-dark span.cm-variable:first-child { + color: #f094c1; +} +.cm-s-lesser-dark span.cm-variable-2 { + color: #669199; +} +.cm-s-lesser-dark span.cm-variable-3, +.cm-s-lesser-dark span.cm-type { + color: #c8dad9; +} +.cm-s-lesser-dark span.cm-property { + color: #92a75c; +} +.cm-s-lesser-dark span.cm-operator { + color: #92a75c; +} +.cm-s-lesser-dark span.cm-comment { + color: #666; +} +.cm-s-lesser-dark span.cm-string { + color: #7cbad1; +} +.cm-s-lesser-dark span.cm-string-2 { + color: #f50; +} +.cm-s-lesser-dark span.cm-meta { + color: #738c73; +} +.cm-s-lesser-dark span.cm-qualifier { + color: #555; +} +.cm-s-lesser-dark span.cm-builtin { + color: #ff9e59; +} +.cm-s-lesser-dark span.cm-bracket { + color: #ebefe7; +} +.cm-s-lesser-dark span.cm-tag { + color: #669199; +} +.cm-s-lesser-dark span.cm-attribute { + color: #81a4d5; +} +.cm-s-lesser-dark span.cm-hr { + color: #999; +} +.cm-s-lesser-dark span.cm-link { + color: #7070e6; +} +.cm-s-lesser-dark span.cm-error { + color: #95b8a6; +} + +.cm-s-lesser-dark .CodeMirror-activeline-background { + background: #3c3a3a; +} +.cm-s-lesser-dark .CodeMirror-matchingbracket { + outline: 1px solid grey; + color: #c8dad9 !important; +} diff --git a/public/utils/components-os-support.js b/public/utils/components-os-support.js new file mode 100644 index 000000000..8420d0ad0 --- /dev/null +++ b/public/utils/components-os-support.js @@ -0,0 +1,18 @@ +/* + * Wazuh app - Components compatibility operative system + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ + +export const UnsupportedComponents = { + linux: [], + windows: ['audit', 'oscap', 'vuls', 'docker'], + darwin: ['audit', 'oscap', 'vuls', 'docker'], + other: ['audit', 'oscap', 'vuls', 'docker'] +}; diff --git a/public/utils/config-equivalences.js b/public/utils/config-equivalences.js index e7e066884..4f3294056 100644 --- a/public/utils/config-equivalences.js +++ b/public/utils/config-equivalences.js @@ -26,10 +26,6 @@ export const configEquivalences = { 'wazuh.shards': 'Define the number of shards to use for the .wazuh index.', 'wazuh.replicas': 'Define the number of replicas to use for the .wazuh index.', - 'wazuh-version.shards': - 'Define the number of shards to use for the .wazuh-version index.', - 'wazuh-version.replicas': - 'Define the number of replicas to use for the .wazuh-version index.', 'ip.selector': 'Defines if the user is allowed to change the selected index pattern directly from the top menu bar.', 'ip.ignore': diff --git a/public/utils/filter-handler.js b/public/utils/filter-handler.js index 244b709e6..d2319b1a3 100644 --- a/public/utils/filter-handler.js +++ b/public/utils/filter-handler.js @@ -140,4 +140,28 @@ export class FilterHandler { delete result.query; return result; } + + hipaaQuery() { + const result = this.base(); + result.meta.type = 'exists'; + result.meta.value = 'exists'; + result.meta.key = 'rule.hipaa'; + result.exists = { + field: 'rule.hipaa' + }; + delete result.query; + return result; + } + + nistQuery() { + const result = this.base(); + result.meta.type = 'exists'; + result.meta.value = 'exists'; + result.meta.key = 'rule.nist_800_53'; + result.exists = { + field: 'rule.nist_800_53' + }; + delete result.query; + return result; + } } diff --git a/public/utils/tab-names.js b/public/utils/tab-names.js index c905df8a7..38f0f2236 100644 --- a/public/utils/tab-names.js +++ b/public/utils/tab-names.js @@ -21,6 +21,8 @@ export const TabNames = { ciscat: 'CIS-CAT', pci: 'PCI DSS', gdpr: 'GDPR', + hipaa: 'HIPAA', + nist: 'NIST 800-53', aws: 'Amazon AWS', virustotal: 'VirusTotal', configuration: 'Configuration', diff --git a/server/controllers/wazuh-api.js b/server/controllers/wazuh-api.js index f2309d5af..09158d1cd 100644 --- a/server/controllers/wazuh-api.js +++ b/server/controllers/wazuh-api.js @@ -14,6 +14,8 @@ import needle from 'needle'; import { pciRequirementsFile } from '../integration-files/pci-requirements'; import { gdprRequirementsFile } from '../integration-files/gdpr-requirements'; +import { hipaaRequirementsFile } from '../integration-files/hipaa-requirements'; +import { nistRequirementsFile } from '../integration-files/nist-requirements'; import { ElasticWrapper } from '../lib/elastic-wrapper'; import { getPath } from '../../util/get-path'; import { Monitoring } from '../monitoring'; @@ -28,6 +30,8 @@ import { apiRequestList } from '../../util/api-request-list'; import * as ApiHelper from '../lib/api-helper'; import { Queue } from '../jobs/queue'; import querystring from 'querystring'; +import fs from 'fs'; +import path from 'path'; export class WazuhApiCtrl { /** * Constructor @@ -37,6 +41,7 @@ export class WazuhApiCtrl { this.queue = Queue; this.wzWrapper = new ElasticWrapper(server); this.monitoringInstance = new Monitoring(server, true); + this.wazuhVersion = path.join(__dirname, '../wazuh-version.json'); } /** @@ -540,6 +545,170 @@ export class WazuhApiCtrl { return isDown; } + /** + * This get PCI requirements + * @param {Object} req + * @param {Object} reply + * @returns {Array} requirements or ErrorResponse + */ + async getHipaaRequirement(req, reply) { + try { + let hipaa_description = ''; + + if (req.params.requirement === 'all') { + if (!req.headers.id) { + return hipaaRequirementsFile; + } + let api = await this.wzWrapper.getWazuhConfigurationById( + req.headers.id + ); + + if (api.error_code > 1) { + log( + 'wazuh-api:getHipaaRequirement', + 'Elasticsearch unexpected error or cannot connect' + ); + // Can not connect to elasticsearch + return ErrorResponse( + 'Elasticsearch unexpected error or cannot connect', + 3007, + 400, + reply + ); + } else if (api.error_code > 0) { + log('wazuh-api:getHipaaRequirement', 'Credentials do not exist'); + // Credentials not found + return ErrorResponse('Credentials do not exist', 3008, 400, reply); + } + + const response = await needle( + 'get', + `${api.url}:${api.port}/rules/hipaa`, + {}, + ApiHelper.buildOptionsObject(api) + ); + + if ((((response || {}).body || {}).data || {}).items) { + let HIPAAobject = {}; + for (const item of response.body.data.items) { + if (typeof hipaaRequirementsFile[item] !== 'undefined') + HIPAAobject[item] = hipaaRequirementsFile[item]; + } + return HIPAAobject; + } else { + log( + 'wazuh-api:getPciRequirement', + 'An error occurred trying to parse HIPAA requirements' + ); + return ErrorResponse( + 'An error occurred trying to parse HIPAA requirements', + 3009, + 400, + reply + ); + } + } else { + if ( + typeof hipaaRequirementsFile[req.params.requirement] !== 'undefined' + ) { + hipaa_description = hipaaRequirementsFile[req.params.requirement]; + } + + return { + hipaa: { + requirement: req.params.requirement, + description: hipaa_description + } + }; + } + } catch (error) { + log('wazuh-api:getPciRequirement', error.message || error); + return ErrorResponse(error.message || error, 3010, 400, reply); + } + } + + /** + * This get NIST 800-53 requirements + * @param {Object} req + * @param {Object} reply + * @returns {Array} requirements or ErrorResponse + */ + async getNistRequirement(req, reply) { + try { + let nist_description = ''; + + if (req.params.requirement === 'all') { + if (!req.headers.id) { + return nistRequirementsFile; + } + let api = await this.wzWrapper.getWazuhConfigurationById( + req.headers.id + ); + + if (api.error_code > 1) { + log( + 'wazuh-api:getNistRequirement', + 'Elasticsearch unexpected error or cannot connect' + ); + // Can not connect to elasticsearch + return ErrorResponse( + 'Elasticsearch unexpected error or cannot connect', + 3007, + 400, + reply + ); + } else if (api.error_code > 0) { + log('wazuh-api:getNistRequirement', 'Credentials do not exist'); + // Credentials not found + return ErrorResponse('Credentials do not exist', 3008, 400, reply); + } + + const response = await needle( + 'get', + `${api.url}:${api.port}/rules/nist-800-53`, + {}, + ApiHelper.buildOptionsObject(api) + ); + + if ((((response || {}).body || {}).data || {}).items) { + let NISTobject = {}; + for (const item of response.body.data.items) { + if (typeof nistRequirementsFile[item] !== 'undefined') + NISTobject[item] = nistRequirementsFile[item]; + } + return NISTobject; + } else { + log( + 'wazuh-api:getNistRequirement', + 'An error occurred trying to parse NIST 800-53 requirements' + ); + return ErrorResponse( + 'An error occurred trying to parse NIST 800-53 requirements', + 3009, + 400, + reply + ); + } + } else { + if ( + typeof nistRequirementsFile[req.params.requirement] !== 'undefined' + ) { + nist_description = nistRequirementsFile[req.params.requirement]; + } + + return { + nist: { + requirement: req.params.requirement, + description: nist_description + } + }; + } + } catch (error) { + log('wazuh-api:getNistRequirement', error.message || error); + return ErrorResponse(error.message || error, 3010, 400, reply); + } + } + /** * Check main Wazuh daemons status * @param {*} api API entry stored in .wazuh @@ -1143,6 +1312,63 @@ export class WazuhApiCtrl { return apiRequestList; } + /** + * This get the timestamp field + * @param {Object} req + * @param {Object} reply + * @returns {Object} timestamp field or ErrorResponse + */ + async getTimeStamp(req, reply) { + try { + const source = JSON.parse(fs.readFileSync(this.wazuhVersion, 'utf8')); + if (source.installationDate && source.lastRestart) { + log( + 'wazuh-api:getTimeStamp', + `Installation date: ${source.installationDate}. Last restart: ${source.lastRestart}`, + 'debug' + ); + return { + installationDate: source.installationDate, + lastRestart: source.lastRestart + }; + } else { + throw new Error('Could not fetch wazuh-version registry'); + } + } catch (error) { + log('wazuh-api:getTimeStamp', error.message || error); + return ErrorResponse( + error.message || 'Could not fetch wazuh-version registry', + 4001, + 500, + reply + ); + } + } + + /** + * This get the wazuh setup settings + * @param {Object} req + * @param {Object} reply + * @returns {Object} setup info or ErrorResponse + */ + async getSetupInfo(req, reply) { + try { + const source = JSON.parse(fs.readFileSync(this.wazuhVersion, 'utf8')); + return !Object.values(source).length + ? { statusCode: 200, data: '' } + : { statusCode: 200, data: source }; + } catch (error) { + log('wazuh-api:getSetupInfo', error.message || error); + return ErrorResponse( + `Could not get data from wazuh-version registry due to ${error.message || + error}`, + 4005, + 500, + reply + ); + } + } + /** * Get basic syscollector information for given agent. * @param {Object} req diff --git a/server/controllers/wazuh-elastic.js b/server/controllers/wazuh-elastic.js index 81d05e54a..ce2996a7d 100644 --- a/server/controllers/wazuh-elastic.js +++ b/server/controllers/wazuh-elastic.js @@ -21,6 +21,7 @@ import { import { Base } from '../reporting/base-query'; import { checkKnownFields } from '../lib/refresh-known-fields'; + export class WazuhElasticCtrl { /** * Constructor @@ -31,42 +32,6 @@ export class WazuhElasticCtrl { this.wzWrapper = new ElasticWrapper(server); } - /** - * This get the timestamp field - * @param {Object} req - * @param {Object} reply - * @returns {Object} timestamp field or ErrorResponse - */ - async getTimeStamp(req, reply) { - try { - const data = await this.wzWrapper.getWazuhVersionIndexAsSearch(); - const source = - ((((data || {}).hits || {}).hits || [])[0] || {})._source || {}; - - if (source.installationDate && source.lastRestart) { - log( - 'wazuh-elastic:getTimeStamp', - `Installation date: ${data.hits.hits[0]._source.installationDate}. Last restart: ${data.hits.hits[0]._source.lastRestart}`, - 'debug' - ); - return { - installationDate: data.hits.hits[0]._source.installationDate, - lastRestart: data.hits.hits[0]._source.lastRestart - }; - } else { - throw new Error('Could not fetch .wazuh-version index'); - } - } catch (error) { - log('wazuh-elastic:getTimeStamp', error.message || error); - return ErrorResponse( - error.message || 'Could not fetch .wazuh-version index', - 4001, - 500, - reply - ); - } - } - /** * This retrieve a template from Elasticsearch * @param {Object} req @@ -238,8 +203,12 @@ export class WazuhElasticCtrl { payload.aggs['2'].terms.field = req.params.field; payload.pattern = req.params.pattern; - - const data = await this.wzWrapper.searchWazuhAlertsWithPayload(payload); + const spaces = this._server.plugins.spaces; + const namespace = spaces && spaces.getSpaceId(req); + const data = await this.wzWrapper.searchWazuhAlertsWithPayload( + payload, + namespace + ); return data.hits.total.value === 0 || typeof data.aggregations['2'].buckets[0] === 'undefined' @@ -343,6 +312,9 @@ export class WazuhElasticCtrl { */ async getlist(req, reply) { try { + const spaces = this._server.plugins.spaces; + const namespace = spaces && spaces.getSpaceId(req); + const config = getConfiguration(); const usingCredentials = await this.wzWrapper.usingCredentials(); @@ -360,9 +332,14 @@ export class WazuhElasticCtrl { req.auth.credentials.roles.includes('superuser'); const data = await this.wzWrapper.getAllIndexPatterns(); - - if ((((data || {}).hits || {}).hits || []).length === 0) - throw new Error('There is no index pattern'); + if (namespace && namespace !== 'default') { + data.hits.hits = data.hits.hits.filter(item => + (item._id || '').includes(namespace) + ); + } + if ((((data || {}).hits || {}).hits || []).length === 0) { + throw new Error('There are no index patterns'); + } if (((data || {}).hits || {}).hits) { let list = this.validateIndexPattern(data.hits.hits); @@ -395,15 +372,36 @@ export class WazuhElasticCtrl { } } + async checkCustomSpaceMonitoring(namespace, monitoringPattern) { + try { + const patterns = await this.wzWrapper.getAllIndexPatterns(); + const exists = patterns.hits.hits.filter( + item => + item._source['index-pattern'].title === monitoringPattern && + item._source.namespace === namespace + ); + if (!exists.length) { + const title = monitoringPattern; + const id = `${namespace}:index-pattern:${monitoringPattern}`; + await this.wzWrapper.createMonitoringIndexPattern(title, id, namespace); + return id; + } else { + return exists[0]._id; + } + } catch (error) { + return Promise.reject(error); + } + } + /** * Replaces visualizations main fields to fit a certain pattern. * @param {Array} app_objects Object containing raw visualizations. * @param {String} id Index-pattern id to use in the visualizations. Eg: 'wazuh-alerts' */ - buildVisualizationsRaw(app_objects, id) { + async buildVisualizationsRaw(app_objects, id, namespace = false) { try { const config = getConfiguration(); - const monitoringPattern = + let monitoringPattern = (config || {})['wazuh.monitoring.pattern'] || 'wazuh-monitoring-3.x-*'; log( 'wazuh-elastic:buildVisualizationsRaw', @@ -429,17 +427,35 @@ export class WazuhElasticCtrl { ) { const defaultStr = aux_source.kibanaSavedObjectMeta.searchSourceJSON; - defaultStr.includes('wazuh-monitoring') - ? (aux_source.kibanaSavedObjectMeta.searchSourceJSON = defaultStr.replace( - /wazuh-monitoring/g, - monitoringPattern[monitoringPattern.length - 1] === '*' - ? monitoringPattern - : monitoringPattern + '*' - )) - : (aux_source.kibanaSavedObjectMeta.searchSourceJSON = defaultStr.replace( - /wazuh-alerts/g, - id - )); + const isMonitoring = defaultStr.includes('wazuh-monitoring'); + if (isMonitoring) { + if (namespace && namespace !== 'default') { + monitoringPattern = await this.checkCustomSpaceMonitoring( + namespace, + monitoringPattern + ); + if ( + monitoringPattern.includes(namespace) && + monitoringPattern.includes('index-pattern:') + ) { + monitoringPattern = monitoringPattern.split( + 'index-pattern:' + )[1]; + } + } + aux_source.kibanaSavedObjectMeta.searchSourceJSON = defaultStr.replace( + /wazuh-monitoring/g, + monitoringPattern[monitoringPattern.length - 1] === '*' || + (namespace && namespace !== 'default') + ? monitoringPattern + : monitoringPattern + '*' + ); + } else { + aux_source.kibanaSavedObjectMeta.searchSourceJSON = defaultStr.replace( + /wazuh-alerts/g, + id + ); + } } // Replace index-pattern for selector visualizations @@ -569,8 +585,13 @@ export class WazuhElasticCtrl { `Index pattern: ${req.params.pattern}`, 'debug' ); - - const raw = await this.buildVisualizationsRaw(file, req.params.pattern); + const spaces = this._server.plugins.spaces; + const namespace = spaces && spaces.getSpaceId(req); + const raw = await this.buildVisualizationsRaw( + file, + req.params.pattern, + namespace + ); return { acknowledge: true, raw: raw }; } catch (error) { log('wazuh-elastic:createVis', error.message || error); @@ -601,20 +622,25 @@ export class WazuhElasticCtrl { const file = ClusterVisualizations['monitoring']; const nodes = req.payload.nodes.items; const name = req.payload.nodes.name; - const master_node = req.payload.nodes.master_node; + const masterNode = req.payload.nodes.master_node; - const pattern_doc = await this.wzWrapper.getIndexPatternUsingGet( - req.params.pattern + const spaces = this._server.plugins.spaces; + const namespace = spaces && spaces.getSpaceId(req); + + const patternDoc = await this.wzWrapper.getIndexPatternUsingGet( + req.params.pattern, + namespace ); - const pattern_name = pattern_doc._source['index-pattern'].title; + + const patternName = patternDoc._source['index-pattern'].title; const raw = await this.buildClusterVisualizationsRaw( file, req.params.pattern, nodes, name, - master_node, - pattern_name + masterNode, + patternName ); return { acknowledge: true, raw: raw }; diff --git a/server/controllers/wazuh-reporting.js b/server/controllers/wazuh-reporting.js index e3164b447..d29774775 100644 --- a/server/controllers/wazuh-reporting.js +++ b/server/controllers/wazuh-reporting.js @@ -30,6 +30,8 @@ import { WazuhApiCtrl } from './wazuh-api'; import clockIconRaw from '../reporting/clock-icon-raw'; import filterIconRaw from '../reporting/filter-icon-raw'; import ProcessEquivalence from '../../util/process-state-equivalence'; +import { KeyEquivalence } from '../../util/csv-key-equivalence'; +import { AgentConfiguration } from '../reporting/agent-configuration'; import { AgentsVisualizations, @@ -236,6 +238,97 @@ export class WazuhReportingCtrl { } } + /** + * This performs the rendering of given tables + * @param {Array} tables tables to render + */ + renderConfigTables(tables) { + for (const table of tables) { + let rowsparsed = table.rows; + if (Array.isArray(rowsparsed) && rowsparsed.length) { + const rows = + rowsparsed.length > 100 ? rowsparsed.slice(0, 99) : rowsparsed; + this.dd.content.push({ + text: table.title, + style: { fontSize: 11, color: '#000' }, + margin: table.title && table.type === 'table' ? [0, 0, 0, 5] : '' + }); + + if (table.title === 'Monitored directories') { + this.dd.content.push({ + text: + 'RT: Real time | WD: Who-data | Per.: Permission | MT: Modification time | SL: Symbolic link | RL: Recursion level', + style: { fontSize: 8, color: '#78C8DE' }, + margin: [0, 0, 0, 5] + }); + } + + const full_body = []; + + const modifiedRows = []; + for (const row of rows) { + modifiedRows.push( + row.map(cell => ({ text: cell, style: 'standard' })) + ); + } + let widths = []; + widths = Array(table.columns.length - 1).fill('auto'); + widths.push('*'); + + if (table.type === 'config') { + full_body.push( + table.columns.map(col => ({ + text: col, + border: [0, 0, 0, 20], + fontSize: 0, + colSpan: 2 + })), + ...modifiedRows + ); + this.dd.content.push({ + fontSize: 8, + table: { + headerRows: 0, + widths, + body: full_body, + dontBreakRows: true + }, + layout: { + fillColor: i => (i === 0 ? '#fff' : null), + hLineColor: () => '#D3DAE6', + hLineWidth: () => 1, + vLineWidth: () => 0 + } + }); + } else if (table.type === 'table') { + full_body.push( + table.columns.map(col => ({ + text: col, + style: 'whiteColor', + border: [0, 0, 0, 0] + })), + ...modifiedRows + ); + this.dd.content.push({ + fontSize: 8, + table: { + headerRows: 1, + widths, + body: full_body + }, + layout: { + fillColor: i => (i === 0 ? '#78C8DE' : null), + hLineColor: () => '#78C8DE', + hLineWidth: () => 1, + vLineWidth: () => 0 + } + }); + } + this.dd.content.push('\n'); + } + } + } + /** * Format Date to string YYYY-mm-ddTHH:mm:ss * @param {*} date JavaScript Date @@ -362,13 +455,34 @@ export class WazuhReportingCtrl { async renderHeader(section, tab, isAgents, apiId) { try { if (section && typeof section === 'string') { - this.dd.content.push({ - text: descriptions[tab].title + ' report', - style: 'h1' - }); + if (section !== 'agentConfig' && section !== 'groupConfig') { + this.dd.content.push({ + text: descriptions[tab].title + ' report', + style: 'h1' + }); + } else if (section === 'agentConfig') { + this.dd.content.push({ + text: `Agent ${isAgents} configuration`, + style: 'h1' + }); + } else if (section === 'groupConfig') { + this.dd.content.push({ + text: `Agents in group`, + style: { fontSize: 14, color: '#000' }, + margin: [0, 20, 0, 0] + }); + } this.dd.content.push('\n'); } + if (isAgents && typeof isAgents === 'object') { + await this.buildAgentsTable( + isAgents, + apiId, + section === 'groupConfig' ? tab : false + ); + } + if (isAgents && typeof isAgents === 'string') { const agent = await this.apiRequest.makeGenericRequest( 'GET', @@ -388,35 +502,23 @@ export class WazuhReportingCtrl { } await this.buildAgentsTable([isAgents], apiId); - let dateAddStr = ''; - if (((agent || {}).data || {}).dateAdd) { - dateAddStr = `Registration date: ${agent.data.dateAdd}.`; - } - - let dateLastKeepAlive = ''; - if (((agent || {}).data || {}).lastKeepAlive) { - dateLastKeepAlive += `Last keep alive: ${agent.data.lastKeepAlive}.`; - } - - if (dateAddStr.length) { - this.dd.content.push({ text: dateAddStr, style: 'standard' }); - this.dd.content.push('\n'); - } - - if (dateLastKeepAlive.length) { - this.dd.content.push({ text: dateLastKeepAlive, style: 'standard' }); - this.dd.content.push('\n'); - } - if (((agent || {}).data || {}).group) { + let agGroups = ''; + let index = 0; + for (let ag of agent.data.group) { + agGroups = agGroups.concat(ag); + if (index < agent.data.group.length - 1) { + agGroups = agGroups.concat(', '); + } + index++; + } this.dd.content.push({ - text: `Group: ${agent.data.group}`, + text: `Group${agent.data.group.length > 1 ? 's' : ''}: ${agGroups}`, style: 'standard' }); this.dd.content.push('\n'); } } - if (descriptions[tab] && descriptions[tab].description) { this.dd.content.push({ text: descriptions[tab].description, @@ -525,44 +627,79 @@ export class WazuhReportingCtrl { * @param {Array} ids ids of agents * @param {String} apiId API id */ - async buildAgentsTable(ids, apiId) { + async buildAgentsTable(ids, apiId, multi = false) { if (!ids || !ids.length) return; try { const rows = []; - for (const item of ids) { - let data = false; - try { - const agent = await this.apiRequest.makeGenericRequest( - 'GET', - `/agents/${item}`, - {}, - apiId - ); - if (agent && agent.data) { - data = {}; - Object.assign(data, agent.data); - } - } catch (error) { - continue; + if (multi) { + const agents = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/groups/${multi}`, + {}, + apiId + ); + for (let item of ((agents || {}).data || {}).items || []) { + const str = Array(6).fill('-'); + if ((item || {}).id) str[0] = item.id; + if ((item || {}).name) str[1] = item.name; + if ((item || {}).ip) str[2] = item.ip; + if ((item || {}).version) str[3] = item.version; + // 3.7 < + if ((item || {}).manager_host) str[4] = item.manager_host; + // 3.7 >= + if ((item || {}).manager) str[4] = item.manager; + if ((item || {}).os && item.os.name && item.os.version) + str[5] = `${item.os.name} ${item.os.version}`; + str[6] = (item || {}).dateAdd ? item.dateAdd : '-'; + str[7] = (item || {}).lastKeepAlive ? item.lastKeepAlive : '-'; + rows.push(str); + } + } else { + for (const item of ids) { + let data = false; + try { + const agent = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/${item}`, + {}, + apiId + ); + if (agent && agent.data) { + data = {}; + Object.assign(data, agent.data); + } + } catch (error) { + continue; + } + const str = Array(6).fill('-'); + str[0] = item; + if ((data || {}).name) str[1] = data.name; + if ((data || {}).ip) str[2] = data.ip; + if ((data || {}).version) str[3] = data.version; + // 3.7 < + if ((data || {}).manager_host) str[4] = data.manager_host; + // 3.7 >= + if ((data || {}).manager) str[4] = data.manager; + if ((data || {}).os && data.os.name && data.os.version) + str[5] = `${data.os.name} ${data.os.version}`; + str[6] = (data || {}).dateAdd ? data.dateAdd : '-'; + str[7] = (data || {}).lastKeepAlive ? data.lastKeepAlive : '-'; + rows.push(str); } - const str = Array(6).fill('-'); - str[0] = item; - if ((data || {}).name) str[1] = data.name; - if ((data || {}).ip) str[2] = data.ip; - if ((data || {}).version) str[3] = data.version; - // 3.7 < - if ((data || {}).manager_host) str[4] = data.manager_host; - // 3.7 >= - if ((data || {}).manager) str[4] = data.manager; - if ((data || {}).os && data.os.name && data.os.version) - str[5] = `${data.os.name} ${data.os.version}`; - rows.push(str); } - PdfTable( this.dd, rows, - ['ID', 'Name', 'IP', 'Version', 'Manager', 'OS'], + [ + 'ID', + 'Name', + 'IP', + 'Version', + 'Manager', + 'OS', + 'Registration date', + 'Last keep alive' + ], null, null, true @@ -1369,6 +1506,99 @@ export class WazuhReportingCtrl { } } + getConfigRows = (data, labels) => { + const result = []; + for (let prop in data || []) { + if (Array.isArray(data[prop])) { + data[prop].forEach((x, idx) => { + if (typeof x === 'object') data[prop][idx] = JSON.stringify(x); + }); + } + result.push([ + (labels || {})[prop] || KeyEquivalence[prop] || prop, + data[prop] || '-' + ]); + } + return result; + }; + + getConfigTables = (data, section, tab, array = []) => { + let plainData = {}; + const nestedData = []; + const tableData = []; + if (data.length === 1 && Array.isArray(data)) { + tableData[section.config[tab].configuration] = data; + } else { + for (let key in data) { + if ( + (typeof data[key] !== 'object' && !Array.isArray(data[key])) || + (Array.isArray(data[key]) && typeof data[key][0] !== 'object') + ) { + plainData[key] = + Array.isArray(data[key]) && typeof data[key][0] !== 'object' + ? data[key].map(x => { + return typeof x === 'object' ? JSON.stringify(x) : x + '\n'; + }) + : data[key]; + } else if ( + Array.isArray(data[key]) && + typeof data[key][0] === 'object' + ) { + tableData[key] = data[key]; + } else { + if (section.isGroupConfig && ['pack', 'content'].includes(key)) { + tableData[key] = [data[key]]; + } else { + nestedData.push(data[key]); + } + } + } + } + array.push({ + title: (section.options || {}).hideHeader + ? '' + : (section.tabs || [])[tab] || + (section.isGroupConfig ? ((section.labels || [])[0] || [])[tab] : ''), + columns: ['', ''], + type: 'config', + rows: this.getConfigRows(plainData, (section.labels || [])[0]) + }); + for (let key in tableData) { + const columns = Object.keys(tableData[key][0]); + columns.forEach((col, i) => { + columns[i] = col[0].toUpperCase() + col.slice(1); + }); + + const rows = tableData[key].map(x => { + let row = []; + for (let key in x) { + row.push( + typeof x[key] !== 'object' + ? x[key] + : Array.isArray(x[key]) + ? x[key].map(x => { + return x + '\n'; + }) + : JSON.stringify(x[key]) + ); + } + return row; + }); + array.push({ + title: ((section.labels || [])[0] || [])[key] || '', + type: 'table', + columns, + rows + }); + } + + nestedData.forEach(nest => { + this.getConfigTables(nest, section, tab + 1, array); + }); + + return array; + }; + /** * Builds a PDF report from multiple PNG images * @param {Object} req @@ -1392,13 +1622,28 @@ export class WazuhReportingCtrl { const pattern = headers.pattern || false; const from = (payload.time || {}).from || false; const to = (payload.time || {}).to || false; - const kfilters = req.payload.filters; + let kfilters = req.payload.filters; + const isAgentConfig = tab === 'agentConfig'; + const isGroupConfig = tab === 'groupConfig'; + + // Pass the namespace if present to all the requesters + if (pattern) { + const spaces = this.server.plugins.spaces; + const namespace = spaces && spaces.getSpaceId(req); + this.vulnerabilityRequest.namespace = namespace; + this.overviewRequest.namespace = namespace; + this.rootcheckRequest.namespace = namespace; + this.pciRequest.namespace = namespace; + this.gdprRequest.namespace = namespace; + this.auditRequest.namespace = namespace; + this.syscheckRequest.namespace = namespace; + } if (!tab) throw new Error( 'Reporting needs a valid app tab in order to work properly' ); - if (!section) + if (!section && !isAgentConfig && !isGroupConfig) throw new Error( 'Reporting needs a valid app section in order to work properly' ); @@ -1411,9 +1656,440 @@ export class WazuhReportingCtrl { 'Reporting needs a valid file name in order to work properly' ); - const isSycollector = tab === 'syscollector'; - let tables = []; + if (isGroupConfig) { + const equivalences = { + localfile: 'Local files', + osquery: 'Osquery', + command: 'Command', + syscheck: 'Syscheck', + 'open-scap': 'OpenSCAP', + 'cis-cat': 'CIS-CAT', + syscollector: 'Syscollector', + rootcheck: 'Rootcheck', + labels: 'Labels', + sca: 'Security configuration assessment' + }; + const g_id = kfilters[0].group; + kfilters = []; + const enabledComponents = req.payload.components; + this.dd.content.push({ + text: `Group ${g_id} configuration`, + style: 'h1' + }); + if (enabledComponents['0']) { + let configuration = {}; + try { + configuration = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/groups/${g_id}/configuration`, + {}, + apiId + ); + } catch (err) {} //eslint-disable-line + if (Object.keys(configuration.data.items[0].config).length) { + this.dd.content.push({ + text: `Configurations`, + style: { fontSize: 14, color: '#000' }, + margin: [0, 10, 0, 15] + }); + const section = { + labels: [], + isGroupConfig: true + }; + for (let config of configuration.data.items) { + let filterTitle = ''; + let index = 0; + for (let filter of Object.keys(config.filters)) { + filterTitle = filterTitle.concat( + `${filter}: ${config.filters[filter]}` + ); + if (index < Object.keys(config.filters).length - 1) { + filterTitle = filterTitle.concat(' | '); + } + index++; + } + this.dd.content.push({ + text: filterTitle, + style: 'h4', + margin: [0, 0, 0, 10] + }); + let idx = 0; + section.tabs = []; + for (let _d of Object.keys(config.config)) { + for (let c of AgentConfiguration.configurations) { + for (let s of c.sections) { + for (let cn of s.config || []) { + if (cn.configuration === _d) { + section.labels = s.labels || [[]]; + } + } + for (let wo of s.wodle || []) { + if (wo.name === _d) { + section.labels = s.labels || [[]]; + } + } + } + } + section.labels[0]['pack'] = 'Packs'; + section.labels[0]['content'] = 'Evaluations'; + section.labels[0]['7'] = 'Scan listening netwotk ports'; + section.tabs.push(equivalences[_d]); + + if (Array.isArray(config.config[_d])) { + /* LOG COLLECTOR */ + if (_d === 'localfile') { + let groups = []; + config.config[_d].forEach(obj => { + if (!groups[obj.logformat]) { + groups[obj.logformat] = []; + } + groups[obj.logformat].push(obj); + }); + Object.keys(groups).forEach(group => { + let saveidx = 0; + groups[group].forEach((x, i) => { + if ( + Object.keys(x).length > + Object.keys(groups[group][saveidx]).length + ) { + saveidx = i; + } + }); + const columns = Object.keys(groups[group][saveidx]); + const rows = groups[group].map(x => { + let row = []; + columns.forEach(key => { + row.push( + typeof x[key] !== 'object' + ? x[key] + : Array.isArray(x[key]) + ? x[key].map(x => { + return x + '\n'; + }) + : JSON.stringify(x[key]) + ); + }); + return row; + }); + columns.forEach((col, i) => { + columns[i] = col[0].toUpperCase() + col.slice(1); + }); + tables.push({ + title: 'Local files', + type: 'table', + columns, + rows + }); + }); + } else if (_d === 'labels') { + const obj = config.config[_d][0].label; + const columns = Object.keys(obj[0]); + if (!columns.includes('hidden')) { + columns.push('hidden'); + } + const rows = obj.map(x => { + let row = []; + columns.forEach(key => { + row.push(x[key]); + }); + return row; + }); + columns.forEach((col, i) => { + columns[i] = col[0].toUpperCase() + col.slice(1); + }); + tables.push({ + title: 'Labels', + type: 'table', + columns, + rows + }); + } else { + for (let _d2 of config.config[_d]) { + tables.push(...this.getConfigTables(_d2, section, idx)); + } + } + } else { + tables.push( + ...this.getConfigTables(config.config[_d], section, idx) + ); + } + for (const table of tables) { + this.renderConfigTables([table]); + } + idx++; + tables = []; + } + tables = []; + } + } + } + if (enabledComponents['1']) { + let agentsInGroup = []; + try { + agentsInGroup = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/groups/${g_id}`, + {}, + apiId + ); + } catch (err) {} //eslint-disable-line + await this.renderHeader( + tab, + g_id, + (((agentsInGroup || []).data || []).items || []).map(x => x.id), + apiId + ); + } + let agentsInGroup = []; + try { + agentsInGroup = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/groups/${g_id}`, + {}, + apiId + ); + } catch (err) {} //eslint-disable-line + await this.renderHeader( + tab, + g_id, + (((agentsInGroup || []).data || []).items || []).map(x => x.id), + apiId + ); + } + if (isAgentConfig) { + const configurations = AgentConfiguration.configurations; + const enabledComponents = req.payload.components; + const a_id = kfilters[0].agent; + let wmodules = {}; + try { + wmodules = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/${a_id}/config/wmodules/wmodules`, + {}, + apiId + ); + } catch (err) {} //eslint-disable-line + kfilters = []; + await this.renderHeader(tab, tab, a_id, apiId); + let idxComponent = 0; + for (let config of configurations) { + let titleOfSection = false; + for (let section of config.sections) { + if ( + enabledComponents[idxComponent] && + (section.config || section.wodle) + ) { + let idx = 0; + const configs = (section.config || []).concat( + section.wodle || [] + ); + + for (let conf of configs) { + let data = {}; + try { + if (!conf['name']) { + data = await this.apiRequest.makeGenericRequest( + 'GET', + `/agents/${a_id}/config/${conf.component}/${conf.configuration}`, + {}, + apiId + ); + } else { + for (let wodle of wmodules.data['wmodules']) { + if (Object.keys(wodle)[0] === conf['name']) { + data.data = wodle; + } + } + } + if ( + data && + data.data && + Object.keys(data.data[Object.keys(data.data)[0]]).length > + 0 + ) { + if (!titleOfSection) { + this.dd.content.push({ + text: config.title, + style: 'h1', + margin: [0, 0, 0, 15] + }); + titleOfSection = true; + } + for (let _d of Object.keys(data.data)) { + if (idx === 0) { + this.dd.content.push({ + text: section.subtitle, + style: 'h4' + }); + this.dd.content.push({ + text: section.desc, + style: { fontSize: 12, color: '#000' }, + margin: [0, 0, 0, 10] + }); + } + if (Array.isArray(data.data[_d])) { + /* LOG COLLECTOR */ + if (conf.filterBy) { + let groups = []; + data.data[_d].forEach(obj => { + if (!groups[obj.logformat]) { + groups[obj.logformat] = []; + } + groups[obj.logformat].push(obj); + }); + Object.keys(groups).forEach(group => { + let saveidx = 0; + groups[group].forEach((x, i) => { + if ( + Object.keys(x).length > + Object.keys(groups[group][saveidx]).length + ) { + saveidx = i; + } + }); + const columns = Object.keys( + groups[group][saveidx] + ); + const rows = groups[group].map(x => { + let row = []; + columns.forEach(key => { + row.push( + typeof x[key] !== 'object' + ? x[key] + : Array.isArray(x[key]) + ? x[key].map(x => { + return x + '\n'; + }) + : JSON.stringify(x[key]) + ); + }); + return row; + }); + columns.forEach((col, i) => { + columns[i] = + col[0].toUpperCase() + col.slice(1); + }); + tables.push({ + title: section.labels[0][group], + type: 'table', + columns, + rows + }); + }); + } else if (_d.configuration !== 'socket') { + tables.push( + ...this.getConfigTables( + data.data[_d], + section, + idx + ) + ); + } else { + for (let _d2 of data.data[_d]) { + tables.push( + ...this.getConfigTables(_d2, section, idx) + ); + } + } + } else { + /*INTEGRITY MONITORING MONITORED DIRECTORIES */ + if (conf.matrix) { + const directories = data.data[_d].directories; + delete data.data[_d].directories; + tables.push( + ...this.getConfigTables( + data.data[_d], + section, + idx + ) + ); + let diffOpts = []; + Object.keys(section.opts).forEach(x => { + diffOpts.push(x); + }); + const columns = [ + '', + ...diffOpts.filter( + x => x !== 'check_all' && x !== 'check_sum' + ) + ]; + let rows = []; + directories.forEach(x => { + let row = []; + row.push(x.dir); + columns.forEach(y => { + if (y !== '') { + row.push( + x.opts.indexOf(y) > -1 ? 'yes' : 'no' + ); + } + }); + row.push(x.recursion_level); + rows.push(row); + }); + columns.forEach((x, idx) => { + columns[idx] = section.opts[x]; + }); + columns.push('RL'); + tables.push({ + title: 'Monitored directories', + type: 'table', + columns, + rows + }); + } else { + tables.push( + ...this.getConfigTables( + data.data[_d], + section, + idx + ) + ); + } + } + } + } else { + // Print the section title + if (!titleOfSection) { + this.dd.content.push({ + text: config.title, + style: 'h1', + margin: [0, 0, 0, 15] + }); + titleOfSection = true; + } + //Print the subtitle + this.dd.content.push({ + text: section.subtitle, + style: 'h4' + }); + // Print no configured module and link to the documentation + this.dd.content.push({ + text: [ + 'This module is not configured. Please take a look on how to configure it in ', + { + text: `${section.subtitle.toLowerCase()} configuration.`, + link: section.docuLink, + style: { fontSize: 12, color: '#1a0dab' } + } + ], + margin: [0, 0, 0, 20] + }); + } + } catch (err) {} //eslint-disable-line + idx++; + } + for (const table of tables) { + this.renderConfigTables([table]); + } + } + idxComponent++; + tables = []; + } + } + } + const isSycollector = tab === 'syscollector'; if (isSycollector) { let agentId = ''; let agentOs = ''; @@ -1583,8 +2259,9 @@ export class WazuhReportingCtrl { } catch (err) {} //eslint-disable-line } - await this.renderHeader(section, tab, isAgents, apiId); - + if (!isAgentConfig && !isGroupConfig) { + await this.renderHeader(section, tab, isAgents, apiId); + } let filters = false; if (kfilters) { filters = this.sanitizeFilters(kfilters, req.payload.searchBar); @@ -1609,13 +2286,18 @@ export class WazuhReportingCtrl { ); } - !isSycollector && + if (!isSycollector && !isAgentConfig && !isGroupConfig) { this.renderVisualizations(req.payload.array, isAgents, tab); - + } if (isSycollector) { this.renderTables(tables, false); } - if (!isSycollector && req.payload.tables) { + if ( + !isSycollector && + !isAgentConfig && + !isGroupConfig && + req.payload.tables + ) { this.renderTables(req.payload.tables); } diff --git a/server/initialize.js b/server/initialize.js index 1ca93cb19..19040f74d 100644 --- a/server/initialize.js +++ b/server/initialize.js @@ -18,10 +18,12 @@ import { defaultExt } from './lib/default-ext'; import { BuildBody } from './lib/replicas-shards-helper'; import { checkKnownFields } from './lib/refresh-known-fields'; import { totalmem } from 'os'; +import fs from 'fs'; +import path from 'path'; export function Initialize(server) { + const wazuhVersion = path.join(__dirname, '/wazuh-version.json'); const blueWazuh = '\u001b[34mwazuh\u001b[39m'; - // Elastic JS Client const wzWrapper = new ElasticWrapper(server); log('initialize', `Kibana index: ${wzWrapper.WZ_KIBANA_INDEX}`, 'info'); @@ -39,7 +41,7 @@ export function Initialize(server) { : 'wazuh-alerts-3.x-*'; global.XPACK_RBAC_ENABLED = configurationFile && - typeof configurationFile['xpack.rbac.enabled'] !== 'undefined' + typeof configurationFile['xpack.rbac.enabled'] !== 'undefined' ? configurationFile['xpack.rbac.enabled'] : true; } catch (e) { @@ -66,10 +68,6 @@ export function Initialize(server) { // Save Wazuh App setup const saveConfiguration = async () => { try { - const shardConfiguration = BuildBody(configurationFile, 'wazuh-version'); - - await wzWrapper.createWazuhVersionIndex(shardConfiguration); - const commonDate = new Date().toISOString(); const configuration = { @@ -81,18 +79,21 @@ export function Initialize(server) { }; try { - await wzWrapper.insertWazuhVersionConfiguration(configuration); - + fs.writeFileSync(wazuhVersion, JSON.stringify(configuration), err => { + if (err) { + throw new Error(err); + } + }); log( 'initialize:saveConfiguration', - 'Wazuh configuration inserted', + 'Wazuh configuration registry inserted', 'debug' ); } catch (error) { log('initialize:saveConfiguration', error.message || error); server.log( [blueWazuh, 'initialize', 'error'], - 'Could not insert Wazuh configuration' + 'Could not create Wazuh configuration registry' ); } @@ -101,7 +102,7 @@ export function Initialize(server) { log('initialize:saveConfiguration', error.message || error); server.log( [blueWazuh, 'initialize', 'error'], - 'Error creating index .wazuh-version.' + 'Error creating wazuh-version registry' ); } }; @@ -158,13 +159,13 @@ export function Initialize(server) { log( 'initialize:checkAPIEntriesExtensions', `Error updating API entry extensions with ID: ${ - item._id + item._id } due to ${error.message || error}` ); server.log( [blueWazuh, 'initialize:checkAPIEntriesExtensions', 'error'], `Error updating API entry extensions with ID: ${ - item._id + item._id } due to ${error.message || error}` ); } @@ -208,28 +209,36 @@ export function Initialize(server) { } }; - const checkWazuhVersionIndex = async () => { + const checkWazuhVersionRegistry = async () => { try { log( - 'initialize[checkWazuhVersionIndex]', - 'Checking .wazuh-version index.', + 'initialize[checkWazuhVersionRegistry]', + 'Checking wazuh-version registry.', 'debug' ); - try { - await wzWrapper.getWazuhVersionIndex(); - const shardConfiguration = BuildBody( - configurationFile, - 'wazuh-version' - ); - await wzWrapper.updateIndexSettings( - '.wazuh-version', - shardConfiguration + await wzWrapper.deleteWazuhVersionIndex(); + log( + 'initialize[checkWazuhVersionRegistry]', + 'Successfully deleted old .wazuh-version index.', + 'debug' ); } catch (error) { log( - 'initialize[checkWazuhVersionIndex]', - '.wazuh-version document does not exist. Initializating configuration...', + 'initialize[checkWazuhVersionRegistry]', + 'No need to delete old .wazuh-version index', + 'debug' + ); + } + + try { + if (!fs.existsSync(wazuhVersion)) { + throw new Error(); + } + } catch (error) { + log( + 'initialize[checkWazuhVersionRegistry]', + 'wazuh-version registry does not exist. Initializating configuration...', 'debug' ); @@ -237,10 +246,16 @@ export function Initialize(server) { await saveConfiguration(); } - await wzWrapper.updateWazuhVersionIndexLastRestart( - packageJSON.version, - packageJSON.revision - ); + let source = JSON.parse(fs.readFileSync(wazuhVersion, 'utf8')); + source['app-version'] = packageJSON.version; + source.revision = packageJSON.revision; + source.lastRestart = new Date().toISOString(); // Registry exists so we update the lastRestarted date only + + fs.writeFileSync(wazuhVersion, JSON.stringify(source), err => { + if (err) { + throw new Error(err); + } + }); } catch (error) { return Promise.reject(error); } @@ -251,7 +266,7 @@ export function Initialize(server) { try { await Promise.all([ checkWazuhIndex(), - checkWazuhVersionIndex(), + checkWazuhVersionRegistry(), checkKnownFields(wzWrapper, log, server, defaultIndexPattern) ]); const reindexResult = await wzWrapper.reindexAppIndices(); @@ -306,7 +321,7 @@ export function Initialize(server) { return Promise.reject( new Error( `Error creating ${ - wzWrapper.WZ_KIBANA_INDEX + wzWrapper.WZ_KIBANA_INDEX } index due to ${error.message || error}` ) ); @@ -327,7 +342,7 @@ export function Initialize(server) { return Promise.reject( new Error( `Error creating template for ${ - wzWrapper.WZ_KIBANA_INDEX + wzWrapper.WZ_KIBANA_INDEX } due to ${error.message || error}` ) ); diff --git a/server/integration-files/hipaa-requirements.js b/server/integration-files/hipaa-requirements.js new file mode 100644 index 000000000..c5fa4e4d6 --- /dev/null +++ b/server/integration-files/hipaa-requirements.js @@ -0,0 +1,37 @@ +/* + * Wazuh app - Module for HIPAA requirements + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export const hipaaRequirementsFile = { + '164.312.a.1': + 'Implement technical policies and procedures for electronic information systems that maintain electronic protected health information to allow access only to those persons or software programs that have been granted access rights.', + '164.312.a.2.I': + 'Assign a unique name and/or number for identifying and tracking user identity.', + '164.312.a.2.II': + 'Establish (and implement as needed) procedures for obtaining necessary electronic protected health information during an emergency.', + '164.312.a.2.III': + 'Implement electronic procedures that terminate an electronic session after a predetermined time of inactivity.', + '164.312.a.2.IV': + 'Implement a mechanism to encrypt and decrypt electronic protected health information.', + '164.312.b': + 'Implement hardware, software, and/or procedural mechanisms that record and examine activity in information systems that contain or use electronic protected health information.', + '164.312.c.1': + 'Implement policies and procedures to protect electronic protected health information from improper alteration or destruction.', + '164.312.c.2': + 'Implement electronic mechanisms to corroborate that electronic protected health information has not been altered or destroyed in an unauthorized manner.', + '164.312.d': + 'Implement procedures to verify that a person or entity seeking access to electronic protected health information is the one claimed.', + '164.312.e.1': + 'Implement technical security measures to guard against unauthorized access to electronic protected health information that is being transmitted over an electronic communications network.', + '164.312.e.2.I': + 'Implement security measures to ensure that electronically transmitted electronic protected health information is not improperly modified without detection until disposed of.', + '164.312.e.2.II': + 'Implement a mechanism to encrypt electronic protected health information whenever deemed appropriate.' +}; diff --git a/server/integration-files/known-fields.js b/server/integration-files/known-fields.js index 3ef34df40..f3f6aaf13 100644 --- a/server/integration-files/known-fields.js +++ b/server/integration-files/known-fields.js @@ -4568,6 +4568,24 @@ export const knownFields = [ aggregatable: true, readFromDocValues: true }, + { + name: 'rule.hipaa', + type: 'string', + count: 0, + scripted: false, + searchable: true, + aggregatable: true, + readFromDocValues: true + }, + { + name: 'rule.nist_800_53', + type: 'string', + count: 0, + scripted: false, + searchable: true, + aggregatable: true, + readFromDocValues: true + }, { name: 'rule.gpg13', type: 'string', diff --git a/server/integration-files/nist-requirements.js b/server/integration-files/nist-requirements.js new file mode 100644 index 000000000..4785f57e1 --- /dev/null +++ b/server/integration-files/nist-requirements.js @@ -0,0 +1,59 @@ +/* + * Wazuh app - Module for NIST 800-53 requirements + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export const nistRequirementsFile = { + 'AC.2': + 'ACCOUNT MANAGEMENT - Identifies and selects the following types of information system accounts to support organizational missions/business functions.', + 'AC.6': + 'LEAST PRIVILEGE - The organization employs the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions.', + 'AC.7': + 'UNSUCCESSFUL LOGON ATTEMPTS - Enforces a limit of consecutive invalid logon attempts by a user during a time period.', + 'AC.12': + 'SESSION TERMINATION - The information system automatically terminates a user session.', + 'AU.5': + 'RESPONSE TO AUDIT PROCESSING FAILURES - The information system alerts organization-defined personnel or roles in the event of an audit processing failure and takes organization-defined actions to be taken (e.g., shut down information system, overwrite oldest audit records, stop generating audit records).', + 'AU.6': + 'AUDIT REVIEW, ANALYSIS, AND REPORTING - Reviews and analyzes information system audit records.', + 'AU.8': + 'TIME STAMPS - Uses internal system clocks to generate time stamps for audit records and records time stamps for audit records.', + 'AU.9': + 'PROTECTION OF AUDIT INFORMATION - The information system protects audit information and audit tools from unauthorized access, modification, and deletion.', + 'AU.12': + 'AUDIT GENERATION - The information system provides audit record generation capability for the auditable events at organization-defined information system components, allows organization-defined personnel or roles to select which auditable events are to be audited by specific components of the information system and generates audit records.', + 'CA.3': + 'SYSTEM INTERCONNECTIONS - Authorizes connections from the information system to other information systems through the use of Interconnection Security Agreements, Documents, for each interconnection, the interface characteristics, security requirements, and the nature of the information communicated and Reviews and updates Interconnection Security Agreements ', + 'CM.1': + 'CONFIGURATION MANAGEMENT POLICY AND PROCEDURES - Develops, documents, and disseminates to a configuration management policy. Revies and updates the current configuration management policy and procedures.', + 'CM.3': + 'CONFIGURATION CHANGE CONTROL - The organization determines the types of changes to the information system that are configuration-controlled. ', + 'CM.5': + 'ACCESS RESTRICTIONS FOR CHANGE - The organization defines, documents, approves, and enforces physical and logical access restrictions associated with changes to the information system.', + 'IA.4': + 'IDENTIFIER MANAGEMENT - The organization manages information system identifiers by: Receiving authorization from organization-defined personnel or roles to assign an individual, group, role, or device identifier. Selecting an identifier that identifies an individual, group, role, or device. Assigning the identifier to the intended individual, group, role, or device. Preventing reuse of identifiers for a organization-defined time period. Disabling the identifier after organization-defined time period of inactivity.', + 'IA.5': + 'AUTHENTICATOR MANAGEMENT - The organization manages information system authenticators by verifying, as part of the initial authenticator distribution, the identity of the individual, group role, or device receiving the authenticator.', + 'IA.10': + 'ADAPTIVE IDENTIFICATION AND AUTHENTICATION - The organization requires that individuals accessing the information system employ organization-defined supplemental authentication techniques or mechanisms under specific organization-defined circumstances or situations. ', + 'SA.11': + 'DEVELOPER SECURITY TESTING AND EVALUATION - The organization requires the developer of the information system, system component, or information system service to create and implement a security assessment plan.', + 'SC.2': + 'APPLICATION PARTITIONING - The information system separates user functionality (including user interface services) from information system management functionality.', + 'SC.7': + 'BOUNDARY PROTECTION - The information system monitors and controls communications at the external boundary of the system and at key internal boundaries within the system.', + 'SC.8': + 'TRANSMISSION CONFIDENTIALITY AND INTEGRITY - The information system protects the confidentiality and integrity of transmitted information.', + 'SI.2': + 'FLAW REMEDIATION - The organization identifies, reports, and corrects information system flaws; tests software and firmware updates related to flaw remediation for effectiveness and potential side effects before installation; installs security-relevant software and firmware updates within organizationdefined time period of the release of the updates and incorporates flaw remediation into the organizational configuration management process.', + 'SI.3': + 'MALICIOUS CODE PROTECTION - The organization employs malicious code protection mechanisms at information system entry and exit points to detect and eradicate malicious code, updates malicious code protection mechanisms whenever new releases are available in accordance with organizational configuration management policy and procedures, configures malicious code protection mechanisms and addresses the receipt of false positives during malicious code detection and eradication and the resulting potential impact on the availability of the information system.', + 'SI.7': + 'SOFTWARE, FIRMWARE, AND INFORMATION INTEGRITY - The organization employs integrity verification tools to detect unauthorized changes to organization-defined software, firmware, and information.' +}; diff --git a/server/integration-files/visualizations/agents/agents-hipaa.js b/server/integration-files/visualizations/agents/agents-hipaa.js new file mode 100644 index 000000000..c81512f62 --- /dev/null +++ b/server/integration-files/visualizations/agents/agents-hipaa.js @@ -0,0 +1,110 @@ +/* + * Wazuh app - Module for Agents/HIPAA visualizations + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export default [ + { + _id: 'Wazuh-App-Agents-HIPAA-Groups', + _source: { + title: 'Top 5 rule groups', + visState: + '{"title":"Top 5 rule groups","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":true},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.groups","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-HIPAA-Rule', + _source: { + title: 'Top 5 rules', + visState: + '{"title":"Top 5 rules","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":true},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.description","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-HIPAA-Requirement', + _source: { + title: 'Top 5 requirements', + visState: + '{"title":"Top 5 requirements","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":true},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.hipaa","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-HIPAA-Rule-level-distribution', + _source: { + title: 'Rule level distribution', + visState: + '{"title":"Rule level distribution","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":false,"legendPosition":"right","isDonut":true,"labels":{"show":true,"values":true,"last_level":true,"truncate":100}},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.level","size":15,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"}}]}', + uiStateJSON: '{"vis":{"legendOpen":false}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-HIPAA-Requirements', + _source: { + title: 'Requirements', + visState: + '{"title":"Requirements","type":"histogram","params":{"type":"histogram","grid":{"categoryLines":false,"style":{"color":"#eee"}},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100,"rotate":0},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Count"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Count","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"showCircles":true}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"rule.hipaa","size":5,"order":"desc","orderBy":"1","customLabel":""}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.hipaa","size":10,"order":"desc","orderBy":"1","customLabel":"HIPAA requirements"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-HIPAA-Last-alerts', + _type: 'visualization', + _source: { + title: 'Last alerts', + visState: + '{"title":"Last alerts","type":"table","params":{"perPage":10,"showPartialRows":false,"showMeticsAtAllLevels":false,"sort":{"columnIndex":2,"direction":"desc"},"showTotal":false,"totalFunc":"sum"},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"3","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.hipaa","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":50,"order":"desc","orderBy":"1","customLabel":"Requirement"}},{"id":"4","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.description","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Rule description"}}]}', + uiStateJSON: + '{"vis":{"params":{"sort":{"columnIndex":2,"direction":"desc"}}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + } + } +]; diff --git a/server/integration-files/visualizations/agents/agents-nist.js b/server/integration-files/visualizations/agents/agents-nist.js new file mode 100644 index 000000000..2d2074f1b --- /dev/null +++ b/server/integration-files/visualizations/agents/agents-nist.js @@ -0,0 +1,110 @@ +/* + * Wazuh app - Module for Agents/NIST-800-53 visualizations + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export default [ + { + _id: 'Wazuh-App-Agents-NIST-Groups', + _source: { + title: 'Top 5 rule groups', + visState: + '{"title":"Top 5 rule groups","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":true},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.groups","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-NIST-Rule', + _source: { + title: 'Top 5 rules', + visState: + '{"title":"Top 5 rules","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":true},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.description","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-NIST-Requirement', + _source: { + title: 'Top 5 requirements', + visState: + '{"title":"Top 5 requirements","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":true},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.nist_800_53","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-NIST-Rule-level-distribution', + _source: { + title: 'Rule level distribution', + visState: + '{"title":"Rule level distribution","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":false,"legendPosition":"right","isDonut":true,"labels":{"show":true,"values":true,"last_level":true,"truncate":100}},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.level","size":15,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"}}]}', + uiStateJSON: '{"vis":{"legendOpen":false}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-NIST-Requirements', + _source: { + title: 'Requirements', + visState: + '{"title":"Requirements","type":"histogram","params":{"type":"histogram","grid":{"categoryLines":false,"style":{"color":"#eee"}},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100,"rotate":0},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Count"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Count","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"showCircles":true}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"rule.nist_800_53","size":5,"order":"desc","orderBy":"1","customLabel":""}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.nist_800_53","size":10,"order":"desc","orderBy":"1","customLabel":"NIST requirements"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Agents-NIST-Last-alerts', + _type: 'visualization', + _source: { + title: 'Last alerts', + visState: + '{"title":"Last alerts","type":"table","params":{"perPage":10,"showPartialRows":false,"showMeticsAtAllLevels":false,"sort":{"columnIndex":2,"direction":"desc"},"showTotal":false,"totalFunc":"sum"},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"3","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.nist_800_53","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":50,"order":"desc","orderBy":"1","customLabel":"Requirement"}},{"id":"4","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.description","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Rule description"}}]}', + uiStateJSON: + '{"vis":{"params":{"sort":{"columnIndex":2,"direction":"desc"}}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + } + } +]; diff --git a/server/integration-files/visualizations/agents/index.js b/server/integration-files/visualizations/agents/index.js index d0641c0e2..2a22b49c3 100644 --- a/server/integration-files/visualizations/agents/index.js +++ b/server/integration-files/visualizations/agents/index.js @@ -16,6 +16,8 @@ import oscap from './agents-oscap'; import ciscat from './agents-ciscat'; import pci from './agents-pci'; import gdpr from './agents-gdpr'; +import hipaa from './agents-hipaa'; +import nist from './agents-nist'; import pm from './agents-pm'; import virustotal from './agents-virustotal'; import vuls from './agents-vuls'; @@ -30,6 +32,8 @@ export { ciscat, pci, gdpr, + hipaa, + nist, pm, virustotal, vuls, diff --git a/server/integration-files/visualizations/overview/index.js b/server/integration-files/visualizations/overview/index.js index 8d7160086..66c89e153 100644 --- a/server/integration-files/visualizations/overview/index.js +++ b/server/integration-files/visualizations/overview/index.js @@ -17,6 +17,8 @@ import oscap from './overview-oscap'; import ciscat from './overview-ciscat'; import pci from './overview-pci'; import gdpr from './overview-gdpr'; +import hipaa from './overview-hipaa'; +import nist from './overview-nist'; import pm from './overview-pm'; import virustotal from './overview-virustotal'; import vuls from './overview-vuls'; @@ -33,6 +35,8 @@ export { ciscat, pci, gdpr, + hipaa, + nist, pm, virustotal, vuls, diff --git a/server/integration-files/visualizations/overview/overview-hipaa.js b/server/integration-files/visualizations/overview/overview-hipaa.js new file mode 100644 index 000000000..bbef3cf4a --- /dev/null +++ b/server/integration-files/visualizations/overview/overview-hipaa.js @@ -0,0 +1,128 @@ +/* + * Wazuh app - Module for Overview/HIPAA visualizations + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export default [ + { + _id: 'Wazuh-App-Overview-HIPAA-Requirements-over-time', + _source: { + title: 'Requirements over time', + visState: + '{"title":"Alerts by action over time","type":"area","params":{"type":"area","grid":{"categoryLines":true,"style":{"color":"#eee"},"valueAxis":"ValueAxis-1"},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Count"}}],"seriesParams":[{"show":"true","type":"area","mode":"stacked","data":{"label":"Count","id":"1"},"drawLinesBetweenPoints":true,"showCircles":true,"interpolate":"cardinal","valueAxis":"ValueAxis-1"}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"date_histogram","schema":"segment","params":{"field":"timestamp","timeRange":{"from":"now-24h","to":"now","mode":"quick"},"useNormalizedEsInterval":true,"interval":"auto","time_zone":"Europe/Berlin","drop_partials":false,"customInterval":"2h","min_doc_count":1,"extended_bounds":{}}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"rule.hipaa","size":"5","order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"language":"lucene","query":""}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-HIPAA-Requirements-Agents-heatmap', + _type: 'visualization', + _source: { + title: 'HIPAA requirements heatmap', + visState: + '{"title":"HIPAA requirements heatmap","type":"heatmap","params":{"type":"heatmap","addTooltip":true,"addLegend":true,"enableHover":false,"legendPosition":"right","times":[],"colorsNumber":10,"colorSchema":"Greens","setColorRange":false,"colorsRange":[],"invertColors":false,"percentageMode":false,"valueAxes":[{"show":false,"id":"ValueAxis-1","type":"value","scale":{"type":"linear","defaultYExtents":false},"labels":{"show":false,"rotate":0,"overwriteColor":false,"color":"#555"}}]},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.hipaa","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Requirements"}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"agent.name","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Agents"}}]}', + uiStateJSON: + '{"vis":{"defaultColors":{"0 - 13":"rgb(247,252,245)","13 - 26":"rgb(233,247,228)","26 - 39":"rgb(211,238,205)","39 - 52":"rgb(184,227,177)","52 - 65":"rgb(152,213,148)","65 - 78":"rgb(116,196,118)","78 - 91":"rgb(75,176,98)","91 - 104":"rgb(47,152,79)","104 - 117":"rgb(21,127,59)","117 - 130":"rgb(0,100,40)"}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","query":{"query":"","language":"lucene"},"filter":[]}' + } + } + }, + { + _id: 'Wazuh-App-Overview-HIPAA-requirements', + _source: { + title: 'HIPAA requirements', + visState: + '{"title":"HIPAA requirements","type":"histogram","params":{"type":"histogram","grid":{"categoryLines":true,"style":{"color":"#eee"},"valueAxis":"ValueAxis-1"},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Alerts"}},{"id":"ValueAxis-2","name":"RightAxis-1","type":"value","position":"right","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Unique HIPAA DSS requirements"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Alerts","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"showCircles":true},{"show":true,"mode":"stacked","type":"line","drawLinesBetweenPoints":false,"showCircles":true,"interpolate":"linear","data":{"id":"3","label":"Unique HIPAA DSS requirements"},"valueAxis":"ValueAxis-2"}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{"customLabel":"Alerts"}},{"id":"2","enabled":true,"type":"date_histogram","schema":"segment","params":{"field":"timestamp","timeRange":{"from":"now-1h","to":"now","mode":"quick"},"useNormalizedEsInterval":true,"interval":"auto","time_zone":"Europe/Berlin","drop_partials":false,"customInterval":"2h","min_doc_count":1,"extended_bounds":{}}},{"id":"3","enabled":true,"type":"cardinality","schema":"metric","params":{"field":"rule.hipaa","customLabel":"Unique HIPAA DSS requirements"}},{"id":"4","enabled":true,"type":"count","schema":"radius","params":{}}]}', + uiStateJSON: '{"vis":{"legendOpen":false}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-HIPAA-Agents', + _source: { + title: 'Agents', + visState: + '{"title":"Agents","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"agent.name","size":10,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-HIPAA-Requirements-by-agent', + _source: { + title: 'Requirements by agent', + visState: + '{"title":"Requirements by agent","type":"histogram","params":{"type":"histogram","grid":{"categoryLines":false,"style":{"color":"#eee"}},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100,"rotate":0},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Count"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Count","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"showCircles":true}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false,"radiusRatio":51},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.hipaa","size":5,"order":"desc","orderBy":"1","customLabel":"Requirements"}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"agent.name","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-HIPAA-Last-alerts', + _type: 'visualization', + _source: { + title: 'Last alerts', + visState: + '{"title":"Last alerts","type":"table","params":{"perPage":10,"showPartialRows":false,"showMeticsAtAllLevels":false,"sort":{"columnIndex":null,"direction":null},"showTotal":false,"totalFunc":"sum"},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"bucket","params":{"field":"agent.name","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":50,"order":"desc","orderBy":"1","customLabel":"Agent name"}},{"id":"3","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.hipaa","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Requirement"}},{"id":"4","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.description","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Rule description"}}]}', + uiStateJSON: + '{"vis":{"params":{"sort":{"columnIndex":3,"direction":"desc"}}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + } + }, + { + _id: 'Wazuh-App-Overview-HIPAA-Alerts-summary', + _type: 'visualization', + _source: { + title: 'Alerts summary', + visState: + '{"title":"Alerts summary","type":"table","params":{"perPage":10,"showPartialRows":false,"showMeticsAtAllLevels":false,"sort":{"columnIndex":3,"direction":"desc"},"showTotal":false,"totalFunc":"sum"},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"bucket","params":{"field":"agent.name","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":50,"order":"desc","orderBy":"1","customLabel":"Agent name"}},{"id":"3","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.hipaa","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Requirement"}},{"id":"4","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.description","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Rule description"}}]}', + uiStateJSON: + '{"vis":{"params":{"sort":{"columnIndex":3,"direction":"desc"}}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + } + } +]; diff --git a/server/integration-files/visualizations/overview/overview-nist.js b/server/integration-files/visualizations/overview/overview-nist.js new file mode 100644 index 000000000..3cbdc168a --- /dev/null +++ b/server/integration-files/visualizations/overview/overview-nist.js @@ -0,0 +1,128 @@ +/* + * Wazuh app - Module for Overview/NIST visualizations + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export default [ + { + _id: 'Wazuh-App-Overview-NIST-Requirements-over-time', + _source: { + title: 'Requirements over time', + visState: + '{"title":"Alerts by action over time","type":"area","params":{"type":"area","grid":{"categoryLines":true,"style":{"color":"#eee"},"valueAxis":"ValueAxis-1"},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Count"}}],"seriesParams":[{"show":"true","type":"area","mode":"stacked","data":{"label":"Count","id":"1"},"drawLinesBetweenPoints":true,"showCircles":true,"interpolate":"cardinal","valueAxis":"ValueAxis-1"}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"date_histogram","schema":"segment","params":{"field":"timestamp","timeRange":{"from":"now-24h","to":"now","mode":"quick"},"useNormalizedEsInterval":true,"interval":"auto","time_zone":"Europe/Berlin","drop_partials":false,"customInterval":"2h","min_doc_count":1,"extended_bounds":{}}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"rule.nist_800_53","size":"5","order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"language":"lucene","query":""}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-NIST-Requirements-Agents-heatmap', + _type: 'visualization', + _source: { + title: 'NIST requirements heatmap', + visState: + '{"title":"NIST requirements heatmap","type":"heatmap","params":{"type":"heatmap","addTooltip":true,"addLegend":true,"enableHover":false,"legendPosition":"right","times":[],"colorsNumber":10,"colorSchema":"Greens","setColorRange":false,"colorsRange":[],"invertColors":false,"percentageMode":false,"valueAxes":[{"show":false,"id":"ValueAxis-1","type":"value","scale":{"type":"linear","defaultYExtents":false},"labels":{"show":false,"rotate":0,"overwriteColor":false,"color":"#555"}}]},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.nist_800_53","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Requirements"}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"agent.name","size":5,"order":"desc","orderBy":"1","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","customLabel":"Agents"}}]}', + uiStateJSON: + '{"vis":{"defaultColors":{"0 - 13":"rgb(247,252,245)","13 - 26":"rgb(233,247,228)","26 - 39":"rgb(211,238,205)","39 - 52":"rgb(184,227,177)","52 - 65":"rgb(152,213,148)","65 - 78":"rgb(116,196,118)","78 - 91":"rgb(75,176,98)","91 - 104":"rgb(47,152,79)","104 - 117":"rgb(21,127,59)","117 - 130":"rgb(0,100,40)"}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","query":{"query":"","language":"lucene"},"filter":[]}' + } + } + }, + { + _id: 'Wazuh-App-Overview-NIST-requirements', + _source: { + title: 'NIST requirements', + visState: + '{"title":"NIST requirements","type":"histogram","params":{"type":"histogram","grid":{"categoryLines":true,"style":{"color":"#eee"},"valueAxis":"ValueAxis-1"},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Alerts"}},{"id":"ValueAxis-2","name":"RightAxis-1","type":"value","position":"right","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Unique NIST DSS requirements"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Alerts","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"showCircles":true},{"show":true,"mode":"stacked","type":"line","drawLinesBetweenPoints":false,"showCircles":true,"interpolate":"linear","data":{"id":"3","label":"Unique NIST DSS requirements"},"valueAxis":"ValueAxis-2"}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{"customLabel":"Alerts"}},{"id":"2","enabled":true,"type":"date_histogram","schema":"segment","params":{"field":"timestamp","timeRange":{"from":"now-1h","to":"now","mode":"quick"},"useNormalizedEsInterval":true,"interval":"auto","time_zone":"Europe/Berlin","drop_partials":false,"customInterval":"2h","min_doc_count":1,"extended_bounds":{}}},{"id":"3","enabled":true,"type":"cardinality","schema":"metric","params":{"field":"rule.nist_800_53","customLabel":"Unique NIST DSS requirements"}},{"id":"4","enabled":true,"type":"count","schema":"radius","params":{}}]}', + uiStateJSON: '{"vis":{"legendOpen":false}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-NIST-Agents', + _source: { + title: 'Agents', + visState: + '{"title":"Agents","type":"pie","params":{"type":"pie","addTooltip":true,"addLegend":true,"legendPosition":"right","isDonut":false},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"agent.name","size":10,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-NIST-Requirements-by-agent', + _source: { + title: 'Requirements by agent', + visState: + '{"title":"Requirements by agent","type":"histogram","params":{"type":"histogram","grid":{"categoryLines":false,"style":{"color":"#eee"}},"categoryAxes":[{"id":"CategoryAxis-1","type":"category","position":"bottom","show":true,"style":{},"scale":{"type":"linear"},"labels":{"show":true,"truncate":100,"rotate":0},"title":{}}],"valueAxes":[{"id":"ValueAxis-1","name":"LeftAxis-1","type":"value","position":"left","show":true,"style":{},"scale":{"type":"linear","mode":"normal"},"labels":{"show":true,"rotate":0,"filter":false,"truncate":100},"title":{"text":"Count"}}],"seriesParams":[{"show":"true","type":"histogram","mode":"stacked","data":{"label":"Count","id":"1"},"valueAxis":"ValueAxis-1","drawLinesBetweenPoints":true,"showCircles":true}],"addTooltip":true,"addLegend":true,"legendPosition":"right","times":[],"addTimeMarker":false,"radiusRatio":51},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"segment","params":{"field":"rule.nist_800_53","size":5,"order":"desc","orderBy":"1","customLabel":"Requirements"}},{"id":"3","enabled":true,"type":"terms","schema":"group","params":{"field":"agent.name","size":5,"order":"desc","orderBy":"1"}}]}', + uiStateJSON: '{}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + }, + _type: 'visualization' + }, + { + _id: 'Wazuh-App-Overview-NIST-Last-alerts', + _type: 'visualization', + _source: { + title: 'Last alerts', + visState: + '{"title":"Last alerts","type":"table","params":{"perPage":10,"showPartialRows":false,"showMeticsAtAllLevels":false,"sort":{"columnIndex":null,"direction":null},"showTotal":false,"totalFunc":"sum"},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"bucket","params":{"field":"agent.name","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":50,"order":"desc","orderBy":"1","customLabel":"Agent name"}},{"id":"3","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.nist_800_53","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Requirement"}},{"id":"4","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.description","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Rule description"}}]}', + uiStateJSON: + '{"vis":{"params":{"sort":{"columnIndex":3,"direction":"desc"}}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + } + }, + { + _id: 'Wazuh-App-Overview-NIST-Alerts-summary', + _type: 'visualization', + _source: { + title: 'Alerts summary', + visState: + '{"title":"Alerts summary","type":"table","params":{"perPage":10,"showPartialRows":false,"showMeticsAtAllLevels":false,"sort":{"columnIndex":3,"direction":"desc"},"showTotal":false,"totalFunc":"sum"},"aggs":[{"id":"1","enabled":true,"type":"count","schema":"metric","params":{}},{"id":"2","enabled":true,"type":"terms","schema":"bucket","params":{"field":"agent.name","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":50,"order":"desc","orderBy":"1","customLabel":"Agent name"}},{"id":"3","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.nist_800_53","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Requirement"}},{"id":"4","enabled":true,"type":"terms","schema":"bucket","params":{"field":"rule.description","otherBucket":false,"otherBucketLabel":"Other","missingBucket":false,"missingBucketLabel":"Missing","size":10,"order":"desc","orderBy":"1","customLabel":"Rule description"}}]}', + uiStateJSON: + '{"vis":{"params":{"sort":{"columnIndex":3,"direction":"desc"}}}}', + description: '', + version: 1, + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"index":"wazuh-alerts","filter":[],"query":{"query":"","language":"lucene"}}' + } + } + } +]; diff --git a/server/lib/default-ext.js b/server/lib/default-ext.js index 50011a73d..347a77b02 100644 --- a/server/lib/default-ext.js +++ b/server/lib/default-ext.js @@ -12,6 +12,8 @@ export const defaultExt = { pci: true, gdpr: true, + hipaa: true, + nist: true, audit: true, oscap: false, ciscat: false, diff --git a/server/lib/elastic-wrapper.js b/server/lib/elastic-wrapper.js index 05aa4979b..3d3eda511 100644 --- a/server/lib/elastic-wrapper.js +++ b/server/lib/elastic-wrapper.js @@ -108,7 +108,7 @@ export class ElasticWrapper { * @param {*} title * @param {*} id */ - async createMonitoringIndexPattern(title, id) { + async createMonitoringIndexPattern(title, id, namespace = undefined) { try { if (!title) return Promise.reject( @@ -126,7 +126,8 @@ export class ElasticWrapper { '[{"name":"timestamp","type":"date","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true},{"name":"_id","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"_index","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"_score","type":"number","count":0,"scripted":false,"searchable":false,"aggregatable":false,"readFromDocValues":false},{"name":"_source","type":"_source","count":0,"scripted":false,"searchable":false,"aggregatable":false,"readFromDocValues":false},{"name":"_type","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":false},{"name":"dateAdd","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"group","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"host","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true},{"name":"id","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true},{"name":"ip","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true},{"name":"lastKeepAlive","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"cluster.name","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"mergedSum","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"configSum","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"node_name","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"manager","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"manager_host","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"name","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true},{"name":"os.arch","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"os.codename","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"os.major","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"os.name","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"os.platform","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"os.uname","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"os.version","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false},{"name":"status","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":true,"readFromDocValues":true},{"name":"version","type":"string","count":0,"scripted":false,"searchable":true,"aggregatable":false,"readFromDocValues":false}]', title: title, timeFieldName: 'timestamp' - } + }, + namespace } }); @@ -136,31 +137,6 @@ export class ElasticWrapper { } } - /** - * Creates the .wazuh-version index with a custom configuration. - * @param {*} config - */ - async createWazuhVersionIndex(configuration) { - try { - if (!configuration) - return Promise.reject( - new Error('No valid configuration for create .wazuh-version index') - ); - - const data = await this.elasticRequest.callWithInternalUser( - 'indices.create', - { - index: '.wazuh-version', - body: configuration - } - ); - - return data; - } catch (error) { - return Promise.reject(error); - } - } - /** * Creates the .wazuh index with a custom configuration. * @param {*} config @@ -187,23 +163,16 @@ export class ElasticWrapper { } /** - * Inserts configuration on .wazuh-version index - * @param {*} configuration + * Delete .wazuh-version index if exists */ - async insertWazuhVersionConfiguration(configuration) { + async deleteWazuhVersionIndex() { try { - if (!configuration) - return Promise.reject( - new Error('No valid configuration for create .wazuh-version index') - ); - - const data = await this.elasticRequest.callWithInternalUser('create', { - index: '.wazuh-version', - type: '_doc', - id: 1, - body: configuration - }); - + const data = await this.elasticRequest.callWithInternalUser( + 'indices.delete', + { + index: '.wazuh-version' + } + ); return data; } catch (error) { return Promise.reject(error); @@ -417,78 +386,19 @@ export class ElasticWrapper { } } - /** - * Get the .wazuh-version index - */ - async getWazuhVersionIndex() { - try { - const data = await this.elasticRequest.callWithInternalUser('get', { - index: '.wazuh-version', - type: '_doc', - id: '1' - }); - - return data; - } catch (error) { - return Promise.reject(error); - } - } - - /** - * Updates lastRestart field on .wazuh-version index - * @param {*} version - * @param {*} revision - */ - async updateWazuhVersionIndexLastRestart(version, revision) { - try { - if (!version || !revision) - return Promise.reject(new Error('No valid version or revision given')); - - const data = await this.elasticRequest.callWithInternalUser('update', { - index: '.wazuh-version', - type: '_doc', - id: 1, - body: { - doc: { - 'app-version': version, - revision: revision, - lastRestart: new Date().toISOString() // Indice exists so we update the lastRestarted date only - } - } - }); - - return data; - } catch (error) { - return Promise.reject(error); - } - } - - /** - * Get .wazuh-version index - */ - async getWazuhVersionIndexAsSearch() { - try { - const data = await this.elasticRequest.callWithInternalUser('search', { - index: '.wazuh-version', - type: '_doc' - }); - - return data; - } catch (error) { - return Promise.reject(error); - } - } - /** * * @param {*} payload */ - async searchWazuhAlertsWithPayload(payload) { + async searchWazuhAlertsWithPayload(payload, namespace) { try { if (!payload) return Promise.reject(new Error('No valid payload given')); const pattern = payload.pattern; delete payload.pattern; - const fullPattern = await this.getIndexPatternUsingGet(pattern); + const fullPattern = await this.getIndexPatternUsingGet( + pattern, + namespace + ); const title = (((fullPattern || {})._source || {})['index-pattern'] || {}).title || @@ -835,14 +745,17 @@ export class ElasticWrapper { * Get an index pattern by name and/or id * @param {*} id Could be id and/or title */ - async getIndexPatternUsingGet(id) { + async getIndexPatternUsingGet(id, namespace) { try { if (!id) return Promise.reject(new Error('No valid id given')); - + let idQuery = id.includes('index-pattern:') ? id : 'index-pattern:' + id; + if (namespace && namespace !== 'default') { + idQuery = `${namespace}:${idQuery}`; + } const data = await this.elasticRequest.callWithInternalUser('get', { index: this.WZ_KIBANA_INDEX, type: '_doc', - id: id.includes('index-pattern:') ? id : 'index-pattern:' + id + id: idQuery }); return data; @@ -983,13 +896,12 @@ export class ElasticWrapper { } /** - * Prevent from using types, reindex .wazuh and .wazuh-version indices + * Prevent from using types, reindex .wazuh index */ async reindexAppIndices() { try { const appIndices = [ - { value: '.wazuh', copy: '.6x-wazuh', result: 'fail' }, - { value: '.wazuh-version', copy: '.6x-wazuh-version', result: 'fail' } + { value: '.wazuh', copy: '.6x-wazuh', result: 'fail' } ]; for (const index of appIndices) { try { diff --git a/server/lib/refresh-known-fields.js b/server/lib/refresh-known-fields.js index 59564f274..a36b16923 100644 --- a/server/lib/refresh-known-fields.js +++ b/server/lib/refresh-known-fields.js @@ -54,7 +54,8 @@ export async function checkKnownFields( if (valid.length === 4) { list.push({ id: index._id.split('index-pattern:')[1], - title: index._source['index-pattern'].title + title: index._source['index-pattern'].title, + namespace: index._source.namespace }); } } @@ -68,7 +69,9 @@ export async function checkKnownFields( ); const defaultExists = list.filter( - item => item.title === defaultIndexPattern + item => + item.title === defaultIndexPattern && + typeof item.namespace === 'undefined' ); if (defaultIndexPattern && defaultExists.length === 0) { @@ -126,7 +129,10 @@ export async function checkKnownFields( `Refreshing known fields for "index-pattern:${item.title}"`, 'debug' ); - await wzWrapper.updateIndexPatternKnownFields('index-pattern:' + item.id); + const prefix = item.namespace + ? `${item.namespace}:index-pattern:` + : 'index-pattern:'; + await wzWrapper.updateIndexPatternKnownFields(`${prefix}${item.id}`); } !quiet && log('initialize', 'App ready to be used.', 'info'); diff --git a/server/lib/update-configuration.js b/server/lib/update-configuration.js index 6c5a2540e..5af795923 100644 --- a/server/lib/update-configuration.js +++ b/server/lib/update-configuration.js @@ -17,8 +17,6 @@ const needRestartFields = [ 'pattern', 'wazuh.shards', 'wazuh.replicas', - 'wazuh-version.shards', - 'wazuh-version.replicas', 'wazuh.monitoring.enabled', 'wazuh.monitoring.frequency', 'wazuh.monitoring.shards', diff --git a/server/reporting/agent-configuration.js b/server/reporting/agent-configuration.js new file mode 100644 index 000000000..a41aa068a --- /dev/null +++ b/server/reporting/agent-configuration.js @@ -0,0 +1,322 @@ +/* + * Wazuh app - Agent configuration request objet for exporting it + * Copyright (C) 2015-2019 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +export const AgentConfiguration = { + configurations: [ + { + title: 'Main configurations', + sections: [ + { + subtitle: 'Global configuration', + desc: 'Logging settings that apply to the agent', + config: [{ component: 'com', configuration: 'logging' }], + labels: [ + { + plain: 'Write internal logs in plain text', + json: 'Write internal logs in JSON format', + server: 'List of managers to connect' + } + ] + }, + { + subtitle: 'Communication', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/client.html', + desc: 'Settings related to the connection with the manager', + config: [{ component: 'agent', configuration: 'client' }], + labels: [ + { + crypto_method: 'Method used to encrypt communications', + auto_restart: + 'Auto-restart the agent when receiving valid configuration from manager', + notify_time: + 'Time (in seconds) between agent checkings to the manager', + 'time-reconnect': + 'Time (in seconds) before attempting to reconnect', + server: 'List of managers to connect', + 'config-profile': 'Configuration profiles', + remote_conf: 'Remote configuration is enabled' + } + ] + }, + { + subtitle: 'Anti-flooding settings', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/capabilities/antiflooding.html', + desc: 'Agent bucket parameters to avoid event flooding', + config: [{ component: 'agent', configuration: 'buffer' }], + labels: [ + { + disabled: 'Buffer enabled', + queue_size: 'Queue size', + events_per_second: 'Events per second' + } + ] + }, + { + subtitle: 'Labels', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/labels.html', + desc: 'User-defined information about the agent included in alerts', + config: [{ component: 'agent', configuration: 'labels' }] + } + ] + }, + { + title: 'Auditing and policy monitoring', + sections: [ + { + subtitle: 'Policy monitoring', + docuLink: + 'https://documentation.wazuh.com/current/pci-dss/policy-monitoring.html', + desc: + 'Configuration to ensure compliance with security policies, standards and hardening guides', + config: [{ component: 'syscheck', configuration: 'rootcheck' }], + wodle: [{ name: 'sca' }], + labels: [ + { + disabled: 'Policy monitoring service enabled', + base_directory: 'Base directory', + rootkit_files: 'Rootkit files database path', + rootkit_trojans: 'Rootkit trojans database path', + scanall: 'Scan the entire system', + skip_nfs: 'Skip scan on CIFS/NFS mounts', + frequency: 'Frequency (in seconds) to run the scan', + check_dev: 'Check /dev path', + check_files: 'Check files', + check_if: 'Check network interfaces', + check_pids: 'Check processes IDs', + check_ports: 'Check network ports', + check_sys: 'Check anomalous system objects', + check_trojans: 'Check trojans', + check_unixaudit: 'Check UNIX audit', + system_audit: 'UNIX audit files paths', + enabled: 'Security configuration assessment enabled', + scan_on_start: 'Scan on start', + interval: 'Interval', + policies: 'Policies' + } + ], + tabs: ['General', 'Security configuration assessment'] + }, + { + subtitle: 'OpenSCAP', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/wodle-openscap.html', + desc: + 'Configuration assessment and automation of compliance monitoring using SCAP checks', + wodle: [{ name: 'open-scap' }], + labels: [ + { + content: 'Evaluations', + disabled: 'OpenSCAP integration enabled', + 'scan-on-start': 'Scan on start', + interval: 'Interval between scan executions', + timeout: 'Timeout (in seconds) for scan executions' + } + ] + }, + { + subtitle: 'CIS-CAT', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/wodle-ciscat.html', + desc: 'Configuration assessment using CIS scanner and SCAP checks', + wodle: [{ name: 'cis-cat' }], + labels: [ + { + disabled: 'CIS-CAT integration enabled', + 'scan-on-start': 'Scan on start', + interval: 'Interval between scan executions', + java_path: 'Path to Java executable directory', + ciscat_path: 'Path to CIS-CAT executable directory', + timeout: 'Timeout (in seconds) for scan executions', + content: 'Benchmarks' + } + ] + } + ] + }, + { + title: 'System threats and incident response', + sections: [ + { + subtitle: 'Osquery', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/wodle-osquery.html', + desc: + 'Expose an operating system as a high-performance relational database', + wodle: [{ name: 'osquery' }], + labels: [ + { + disabled: 'Osquery integration enabled', + run_daemon: 'Auto-run the Osquery daemon', + add_labels: 'Use defined labels as decorators', + log_path: 'Path to the Osquery results log file', + config_path: 'Path to the Osquery configuration file' + } + ] + }, + { + subtitle: 'Inventory data', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/wodle-syscollector.html', + desc: + 'Gather relevant information about system OS, hardware, networking and packages', + wodle: [{ name: 'syscollector' }], + labels: [ + { + disabled: 'Syscollector integration enabled', + 'scan-on-start': 'Scan on start', + interval: 'Interval between system scans', + network: 'Scan network interfaces', + os: 'Scan operating system info', + hardware: 'Scan hardware info', + packages: 'Scan installed packages', + ports: 'Scan listening network ports', + ports_all: 'Scan all network ports', + processes: 'Scan current processes' + } + ] + }, + { + subtitle: 'Active response', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/active-response.html', + desc: 'Active threat addressing by inmmediate response', + config: [{ component: 'com', configuration: 'active-response' }], + labels: [ + { + disabled: 'Active response enabled', + ca_store: 'Use the following list of root CA certificates', + ca_verification: 'Validate WPKs using root CA certificate' + } + ] + }, + { + subtitle: 'Commands', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/wodle-command.html', + desc: 'Configuration options of the Command wodle', + wodle: [{ name: 'command' }], + labels: [ + { + disabled: 'Command enabled', + run_on_start: 'Run on start', + ignore_output: 'Ignore command output', + skip_verification: 'Ignore checksum verification', + interval: 'Interval between executions', + tag: 'Command name', + command: 'Command to execute', + verify_md5: 'Verify MD5 sum', + verify_sha1: 'Verify SHA1 sum', + verify_sha256: 'Verify SHA256 sum' + } + ] + }, + { + subtitle: 'Docker listener', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/wodle-docker.html', + desc: + 'Monitor and collect the activity from Docker containers such as creation, running, starting, stopping or pausing events', + wodle: [{ name: 'docker-listener' }], + labels: [ + { + disabled: 'Docker listener enabled', + run_on_start: + 'Run the listener immediately when service is started', + interval: 'Waiting time to rerun the listener in case it fails', + attempts: 'Number of attempts to execute the listener' + } + ] + } + ] + }, + { + title: 'Log data analysis', + sections: [ + { + subtitle: 'Log collection', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/capabilities/log-data-collection/index.html', + desc: + 'Log analysis from text files, Windows events or syslog outputs', + config: [ + { + component: 'logcollector', + configuration: 'localfile', + filterBy: 'logformat' + }, + { component: 'logcollector', configuration: 'socket' } + ], + labels: [ + { + logformat: 'Log format', + log_format: 'Log format', + command: 'Run this command', + alias: 'Command alias', + ignore_binaries: 'Ignore binaries', + target: 'Redirect output to this socket', + frequency: 'Interval between command executions', + file: 'Log location', + location: 'Log location', + socket: 'Output sockets', + syslog: 'Syslog', + command: 'Command', + full_command: 'Full command', + audit: 'Audit' + } + ], + options: { hideHeader: true } + }, + { + subtitle: 'Integrity monitoring', + docuLink: + 'https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/syscheck.html', + desc: + 'Identify changes in content, permissions, ownership, and attributes of files', + config: [ + { component: 'syscheck', configuration: 'syscheck', matrix: true } + ], + tabs: ['General', 'Who data'], + labels: [ + { + disabled: 'Integrity monitoring enabled', + frequency: 'Interval (in seconds) to run the integrity scan', + skip_nfs: 'Skip scan on CIFS/NFS mounts', + scan_on_start: 'Scan on start', + directories: 'Monitored directories', + nodiff: 'No diff directories', + ignore: 'Ignored files and directories', + restart_audit: 'Restart audit', + startup_healthcheck: 'Startup healthcheck' + } + ], + opts: { + realtime: 'RT', + check_whodata: 'WD', + report_changes: 'Changes', + check_md5sum: 'MD5', + check_sha1sum: 'SHA1', + check_perm: 'Per.', + check_size: 'Size', + check_owner: 'Owner', + check_group: 'Group', + check_mtime: 'MT', + check_inode: 'Inode', + check_sha256sum: 'SHA256', + follow_symbolic_link: 'SL' + } + } + ] + } + ] +}; diff --git a/server/reporting/audit-request.js b/server/reporting/audit-request.js index b52d00778..2cae4c5ed 100644 --- a/server/reporting/audit-request.js +++ b/server/reporting/audit-request.js @@ -76,7 +76,10 @@ export class AuditRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['3']; return buckets.map(item => item.key); } catch (error) { @@ -133,7 +136,10 @@ export class AuditRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['3']; const result = []; @@ -191,7 +197,10 @@ export class AuditRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; return buckets.map(item => ({ diff --git a/server/reporting/gdpr-request.js b/server/reporting/gdpr-request.js index 44343535a..b0de039f8 100644 --- a/server/reporting/gdpr-request.js +++ b/server/reporting/gdpr-request.js @@ -58,7 +58,10 @@ export class GdprRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const aggArray = response.aggregations['2'].buckets; return aggArray.map(item => item.key); @@ -122,7 +125,10 @@ export class GdprRequest { requirement + '"'; - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; const result = []; for (const bucket of buckets) { diff --git a/server/reporting/overview-request.js b/server/reporting/overview-request.js index f6b6c042a..19a1787f8 100644 --- a/server/reporting/overview-request.js +++ b/server/reporting/overview-request.js @@ -54,7 +54,10 @@ export class OverviewRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const aggArray = response.aggregations['2'].buckets; return aggArray.map(item => item.key); diff --git a/server/reporting/pci-request.js b/server/reporting/pci-request.js index 15ff67582..206a39b90 100644 --- a/server/reporting/pci-request.js +++ b/server/reporting/pci-request.js @@ -58,7 +58,10 @@ export class PciRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const aggArray = response.aggregations['2'].buckets; return aggArray @@ -137,7 +140,10 @@ export class PciRequest { requirement + '"'; - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; const result = []; diff --git a/server/reporting/rootcheck-request.js b/server/reporting/rootcheck-request.js index b53041fcc..abeaebff3 100644 --- a/server/reporting/rootcheck-request.js +++ b/server/reporting/rootcheck-request.js @@ -56,7 +56,10 @@ export class RootcheckRequest { base.query.bool.must[0].query_string.query + ' AND "rootkit" AND "detected"'; - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const aggArray = response.aggregations['2'].buckets; const mapped = aggArray.map(item => item.key); const result = []; @@ -102,7 +105,10 @@ export class RootcheckRequest { ' AND "process" AND "hidden"'; // "aggregations": { "1": { "value": 1 } } - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); return response && response.aggregations && @@ -145,7 +151,10 @@ export class RootcheckRequest { base.query.bool.must[0].query_string.query + ' AND "port" AND "hidden"'; // "aggregations": { "1": { "value": 1 } } - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); return response && response.aggregations && diff --git a/server/reporting/syscheck-request.js b/server/reporting/syscheck-request.js index 693930700..cefb1d70f 100644 --- a/server/reporting/syscheck-request.js +++ b/server/reporting/syscheck-request.js @@ -55,7 +55,10 @@ export class SyscheckRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; return buckets.map(item => item.key); @@ -100,7 +103,10 @@ export class SyscheckRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; const result = []; @@ -159,7 +165,10 @@ export class SyscheckRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; return buckets @@ -210,7 +219,10 @@ export class SyscheckRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; return buckets diff --git a/server/reporting/tab-description.js b/server/reporting/tab-description.js index 7876971f9..2f5c3a34b 100644 --- a/server/reporting/tab-description.js +++ b/server/reporting/tab-description.js @@ -50,6 +50,16 @@ export const TabDescription = { description: 'General Data Protection Regulation (GDPR) sets guidelines for processing of personal data.' }, + hipaa: { + title: 'HIPAA', + description: + 'Health Insurance Portability and Accountability Act of 1996 (HIPAA) provides data privacy and security provisions for safeguarding medical information.' + }, + nist: { + title: 'NIST 800-53', + description: + 'National Institute of Standards and Technology Special Publication 800-53 (NIST 800-53) sets guidelines for federal information systems.' + }, ciscat: { title: 'CIS-CAT', description: diff --git a/server/reporting/vulnerability-request.js b/server/reporting/vulnerability-request.js index 3ab446f32..57eb07850 100644 --- a/server/reporting/vulnerability-request.js +++ b/server/reporting/vulnerability-request.js @@ -61,7 +61,10 @@ export class VulnerabilityRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const aggArray = response.aggregations['2'].buckets; return aggArray.map(item => item.key); @@ -95,7 +98,10 @@ export class VulnerabilityRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const aggArray = response.aggregations['2'].buckets; return aggArray.map(item => item.key); @@ -140,7 +146,10 @@ export class VulnerabilityRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); //aggregations: { '1': { value: 2 } } } return response && @@ -186,7 +195,10 @@ export class VulnerabilityRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; return buckets.map(item => ({ package: item.key, severity: severity })); @@ -238,7 +250,10 @@ export class VulnerabilityRequest { } }); - const response = await this.wzWrapper.searchWazuhAlertsWithPayload(base); + const response = await this.wzWrapper.searchWazuhAlertsWithPayload( + base, + this.namespace + ); const { buckets } = response.aggregations['2']; return buckets.map(item => ({ diff --git a/server/routes/wazuh-api.js b/server/routes/wazuh-api.js index 85fda57e1..5279628b2 100644 --- a/server/routes/wazuh-api.js +++ b/server/routes/wazuh-api.js @@ -60,6 +60,24 @@ export function WazuhApiRoutes(server) { } }); + // Return a NIST 800-53 requirement description + server.route({ + method: 'GET', + path: '/api/nist/{requirement}', + handler(req, reply) { + return ctrl.getNistRequirement(req, reply); + } + }); + + // Return a HIPAA requirement description + server.route({ + method: 'GET', + path: '/api/hipaa/{requirement}', + handler(req, reply) { + return ctrl.getHipaaRequirement(req, reply); + } + }); + // Force fetch data to be inserted on wazuh-monitoring indices server.route({ method: 'GET', @@ -96,6 +114,24 @@ export function WazuhApiRoutes(server) { } }); + // Useful to check cookie consistence + server.route({ + method: 'GET', + path: '/api/timestamp', + handler(req, res) { + return ctrl.getTimeStamp(req, res); + } + }); + + // Return Wazuh Appsetup info + server.route({ + method: 'GET', + path: '/api/setup', + handler(req, res) { + return ctrl.getSetupInfo(req, res); + } + }); + // Return basic information of syscollector for given agent server.route({ method: 'GET', diff --git a/server/routes/wazuh-elastic.js b/server/routes/wazuh-elastic.js index 1686be967..e50c4c43d 100644 --- a/server/routes/wazuh-elastic.js +++ b/server/routes/wazuh-elastic.js @@ -75,24 +75,6 @@ export function WazuhElasticRouter(server) { } }); - // Return Wazuh Appsetup info - server.route({ - method: 'GET', - path: '/elastic/setup', - handler(req, res) { - return ctrl.getSetupInfo(req, res); - } - }); - - // Useful to check cookie consistence - server.route({ - method: 'GET', - path: '/elastic/timestamp', - handler(req, res) { - return ctrl.getTimeStamp(req, res); - } - }); - // Fetch alerts directly from Elasticsearch server.route({ method: 'POST', diff --git a/test/server/wazuh-elastic.js b/test/server/wazuh-elastic.js index bcb78b1d8..b60eb10a1 100644 --- a/test/server/wazuh-elastic.js +++ b/test/server/wazuh-elastic.js @@ -99,71 +99,4 @@ describe('wazuh-elastic', () => { res.body.data.should.be.eql('Index pattern found'); }); }); - - /*it('GET /elastic/top/{mode}/{cluster}/{field}/{pattern}', async () => { - throw Error('Test not implemented...') - })*/ - - describe('Checking .wazuh-version index', () => { - it('GET /elastic/setup', async () => { - const res = await needle( - 'get', - `${kibanaServer}:5601/elastic/setup`, - {}, - headers - ); - res.body.statusCode.should.be.eql(200); - res.body.data.should.be.a('object'); - res.body.data.name.should.be.eql('Wazuh App'); - res.body.data['app-version'].should.be.eql(version); - res.body.data.revision.should.be.eql(revision); - res.body.data.installationDate.should.be.a('string'); - res.body.data.lastRestart.should.be.a('string'); - }); - - it('GET /elastic/timestamp', async () => { - const res = await needle( - 'get', - `${kibanaServer}:5601/elastic/timestamp`, - {}, - headers - ); - res.body.installationDate.should.be.a('string'); - res.body.lastRestart.should.be.a('string'); - }); - - it('POST /elastic/alerts full parameters', async () => { - const res = await needle( - 'POST', - `${kibanaServer}:5601/elastic/alerts`, - { - pattern: 'wazuh-alerts-3.x-*', - 'agent.id': '000', - 'rule.groups': 'ossec', - 'manager.name': 'master', - 'cluster.name': 'wazuh', - size: 1 - }, - headers - ); - const alerts = res.body.alerts; - alerts.should.be.a('array'); - alerts.length.should.be.eql(1); - alerts[0].agent.id.should.be.eql('000'); - alerts[0].rule.groups.includes('ossec').should.be.eql(true); - alerts[0].manager.name.should.be.eql('master'); - alerts[0].cluster.name.should.be.eql('wazuh'); - }); - - it('POST /elastic/alerts no parameters', async () => { - const res = await needle( - 'POST', - `${kibanaServer}:5601/elastic/alerts`, - {}, - headers - ); - res.body.alerts.should.be.a('array'); - res.body.alerts.length.should.be.eql(10); - }); - }); }); diff --git a/util/api-request-list.js b/util/api-request-list.js index 5bbe0846c..fe96e2deb 100644 --- a/util/api-request-list.js +++ b/util/api-request-list.js @@ -625,6 +625,14 @@ export const apiRequestList = [ name: '/rules/pci', args: [] }, + { + name: '/rules/hipaa', + args: [] + }, + { + name: '/rules/nist-800-53', + args: [] + }, { name: '/syscheck/:agent_id', args: [ diff --git a/util/csv-key-equivalence.js b/util/csv-key-equivalence.js index f8fb4d0e9..1b3d4165b 100644 --- a/util/csv-key-equivalence.js +++ b/util/csv-key-equivalence.js @@ -36,6 +36,8 @@ export const KeyEquivalence = { file: 'File', gdpr: 'GDPR', pci: 'PCI', + hipaa: 'HIPAA', + 'nist-800-53': 'NIST 800-53', cis: 'CIS', event: 'Event', groups: 'Groups',
Name Description