Merge branch '3.8-6.5' into issue-988

This commit is contained in:
Jesús Ángel 2018-11-28 13:33:14 +01:00 committed by GitHub
commit 4c4ed040a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
56 changed files with 1465 additions and 1526 deletions

View File

@ -2,6 +2,25 @@
All notable changes to the Wazuh app project will be documented in this file.
## Wazuh v3.7.1 - Kibana v6.5.1 - Revision 415
### Added
- Support for Wazuh v3.7.1.
- Dev Tools module now autocompletes API endpoints ([#1030](https://github.com/wazuh/wazuh-kibana-app/pull/1030)).
### Changed
- Increased number of rows for syscollector tables ([#1033](https://github.com/wazuh/wazuh-kibana-app/pull/1033)).
- Modularized JSON/XML viewers for the configuration section ([#982](https://github.com/wazuh/wazuh-kibana-app/pull/982)).
### Fixed
- Added missing fields for syscollector network tables ([#1036](https://github.com/wazuh/wazuh-kibana-app/pull/1036)).
- Using the right API path when downloading CSV for decoders list ([#1045](https://github.com/wazuh/wazuh-kibana-app/pull/1045)).
- Including group field when downloading CSV for agents list ([#1044](https://github.com/wazuh/wazuh-kibana-app/pull/1044)).
- Preserve active tab in configuration section when refreshing the page ([#1037](https://github.com/wazuh/wazuh-kibana-app/pull/1037)).
## Wazuh v3.7.0 - Kibana v6.5.0 / v6.5.1 - Revision 414
### Added

View File

@ -25,8 +25,8 @@ Visualize and analyze Wazuh alerts stored in Elasticsearch using our Kibana app
## Requisites
- Wazuh HIDS 3.7.0
- Wazuh RESTful API 3.7.0
- Wazuh HIDS 3.7.1
- Wazuh RESTful API 3.7.1
- Kibana 6.5.1
- Elasticsearch 6.5.1
@ -35,7 +35,7 @@ Visualize and analyze Wazuh alerts stored in Elasticsearch using our Kibana app
Install the app
```
sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.0_6.5.1.zip
sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.1_6.5.1.zip
```
Restart Kibana
@ -90,7 +90,7 @@ chown -R kibana:kibana /usr/share/kibana/plugins
Install the app
```
sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.0_6.5.1.zip
sudo -u kibana NODE_OPTIONS="--max-old-space-size=3072" /usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.1_6.5.1.zip
```
Restart Kibana
@ -151,6 +151,7 @@ service kibana restart
| 6.4.3 | 3.7.0 | /usr/share/kibana/bin/kibana-plugin install <https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.0_6.4.3.zip> |
| 6.5.0 | 3.7.0 | /usr/share/kibana/bin/kibana-plugin install <https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.0_6.5.0.zip> |
| 6.5.1 | 3.7.0 | /usr/share/kibana/bin/kibana-plugin install <https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.0_6.5.1.zip> |
| 6.5.1 | 3.7.1 | /usr/share/kibana/bin/kibana-plugin install <https://packages.wazuh.com/wazuhapp/wazuhapp-3.7.1_6.5.1.zip> |
## Contribute

View File

@ -1,8 +1,8 @@
{
"name": "wazuh",
"version": "3.7.0",
"revision": "0414",
"code": "0414-1",
"version": "3.7.1",
"revision": "0415",
"code": "0415-0",
"kibana": {
"version": "6.5.1"
},

View File

@ -71,6 +71,7 @@ export class AgentsController {
}
$onInit() {
timefilter.setRefreshInterval({pause:true,value:0})
this.$scope.TabDescription = TabDescription;
this.$rootScope.reportStatus = false;
@ -172,29 +173,70 @@ export class AgentsController {
this.$scope.isString = item => typeof item === 'string';
this.$scope.hasSize = obj =>
obj && typeof obj === 'object' && Object.keys(obj).length;
this.$scope.switchConfigTab = (configurationTab, sections) =>
this.$scope.switchConfigTab = (configurationTab, sections, navigate = true) => {
this.$scope.navigate = navigate;
try {
this.$scope.configSubTab = JSON.stringify({ 'configurationTab': configurationTab, 'sections': sections });
if (!this.$location.search().configSubTab) {
this.appState.setSessionStorageItem('configSubTab', this.$scope.configSubTab);
this.$location.search('configSubTab', true);
}
} catch (error) {
this.errorHandler.handle(error, 'Set configuration path');
}
this.configurationHandler.switchConfigTab(
configurationTab,
sections,
this.$scope,
this.$scope.agent.id
);
this.$scope.switchWodle = wodleName =>
}
this.$scope.switchWodle = (wodleName, navigate = true) => {
this.$scope.navigate = navigate;
this.$scope.configWodle = wodleName;
if (!this.$location.search().configWodle) {
this.$location.search('configWodle', this.$scope.configWodle);
}
this.configurationHandler.switchWodle(
wodleName,
this.$scope,
this.$scope.agent.id
);
this.$scope.switchConfigurationTab = configurationTab =>
)
};
this.$scope.switchConfigurationTab = (configurationTab, navigate) => {
this.$scope.navigate = navigate;
this.configurationHandler.switchConfigurationTab(
configurationTab,
this.$scope
);
this.$scope.switchConfigurationSubTab = configurationSubTab =>
if (!this.$scope.navigate) {
const configSubTab = this.$location.search().configSubTab;
if (configSubTab) {
try {
const config = this.appState.getSessionStorageItem('configSubTab');
const configSubTabObj = JSON.parse(config);
this.$scope.switchConfigTab(configSubTabObj.configurationTab, configSubTabObj.sections, false);
} catch (error) {
this.errorHandler.handle(error, 'Get configuration path');
}
} else {
const configWodle = this.$location.search().configWodle;
if (configWodle) {
this.$scope.switchWodle(configWodle, false);
}
}
} else {
this.$location.search('configSubTab', null);
this.appState.removeSessionStorageItem('configSubTab');
this.$location.search('configWodle', null);
}
}
this.$scope.switchConfigurationSubTab = configurationSubTab => {
this.configurationHandler.switchConfigurationSubTab(
configurationSubTab,
this.$scope
);
}
this.$scope.updateSelectedItem = i => (this.$scope.selectedItem = i);
this.$scope.getIntegration = list =>
this.configurationHandler.getIntegration(list, this.$scope);
@ -203,6 +245,9 @@ export class AgentsController {
this.$scope.showSyscheckFiles = !this.$scope.showSyscheckFiles;
if(!this.$scope.$$phase) this.$scope.$digest();
}
this.$scope.$on('$routeChangeStart', () => this.appState.removeSessionStorageItem('configSubTab'));
}
createMetrics(metricsObject) {
@ -288,12 +333,7 @@ export class AgentsController {
// Switch tab
async switchTab(tab, force = false) {
if (this.ignoredTabs.includes(tab)) {
const timeFilterRefreshStatus = timefilter.getRefreshInterval();
const toggle =
timeFilterRefreshStatus &&
timeFilterRefreshStatus.value &&
!timeFilterRefreshStatus.pause;
if (toggle) timefilter.toggleRefresh();
timefilter.setRefreshInterval({pause:true,value:0})
}
try {

View File

@ -11,13 +11,15 @@
*/
import CodeMirror from '../../utils/codemirror/lib/codemirror';
import jsonLint from '../../utils/codemirror/json-lint';
import { ExcludedIntelliSenseTriggerKeys } from '../../../util/excluded-devtools-autocomplete-keys';
import queryString from 'querystring-browser';
import $ from 'jquery';
export class DevToolsController {
constructor($scope, apiReq, $window, appState, errorHandler, $document) {
constructor($scope, apiReq, genericReq, $window, appState, errorHandler, $document) {
this.$scope = $scope;
this.apiReq = apiReq;
this.genericReq = genericReq;
this.$window = $window;
this.appState = appState;
this.errorHandler = errorHandler;
@ -40,6 +42,11 @@ export class DevToolsController {
gutters: ['CodeMirror-foldgutter']
}
);
CodeMirror.commands.autocomplete = function (cm) {
CodeMirror.showHint(cm, CodeMirror.hint.dictionaryHint, {
completeSingle: false
});
};
this.apiInputBox.on('change', () => {
this.groups = this.analyzeGroups();
@ -232,8 +239,26 @@ export class DevToolsController {
return affectedGroups;
}
async getAvailableMethods() {
try {
const response = await this.genericReq.request('GET', '/api/routes', {});
this.apiInputBox.model = !response.error ? response.data : [];
} catch (error) {
this.apiInputBox.model = [];
}
}
init() {
this.apiInputBox.setSize('auto', '100%');
this.apiInputBox.model = [];
this.getAvailableMethods();
this.apiInputBox.on('keyup', function (cm, e) {
if (!ExcludedIntelliSenseTriggerKeys[(e.keyCode || e.which).toString()]) {
cm.execCommand('autocomplete', null, {
completeSingle: false
});
}
});
this.apiOutputBox.setSize('auto', '100%');
const currentState = this.appState.getCurrentDevTools();
if (!currentState) {
@ -248,6 +273,65 @@ export class DevToolsController {
this.groups = this.analyzeGroups();
const currentGroup = this.calculateWhichGroup();
this.highlightGroup(currentGroup);
// Register our custom Codemirror hint plugin.
CodeMirror.registerHelper('hint', 'dictionaryHint', function (editor) {
const model = editor.model;
function getDictionary(line, word) {
let hints = [];
const exp = line.split(/\s+/g);
if (exp[0] && exp[0].match(/^(?:GET|PUT|POST|DELETE).*$/)) {
let method = model.find(function (item) {
return item.method === exp[0]
});
const forbidChars = /^[^?{]+$/;
if (method && !exp[2] && forbidChars.test(word)) {
method.endpoints.forEach(function (endpoint) {
endpoint.path = endpoint.name;
if (endpoint.args && endpoint.args.length > 0) {
let argSubs = [];
endpoint.args.forEach(function (arg) {
const pathSplitted = endpoint.name.split('/');
const arrayIdx = pathSplitted.indexOf(arg.name);
const wordSplitted = word.split('/');
if (wordSplitted[arrayIdx] && wordSplitted[arrayIdx] != '') {
argSubs.push({
'id': arg.name,
'value': wordSplitted[arrayIdx]
});
}
});
let auxPath = endpoint.name;
argSubs.forEach(function (arg) {
auxPath = auxPath.replace(arg.id, arg.value);
});
endpoint.path = auxPath;
}
});
hints = method.endpoints.map(a => a.path);
}
} else {
hints = model.map(a => a.method);
}
return hints;
}
const cur = editor.getCursor();
const curLine = editor.getLine(cur.line);
let start = cur.ch;
let end = start;
const whiteSpace = /\s/;
while (end < curLine.length && !whiteSpace.test(curLine.charAt(end)))++end;
while (start && !whiteSpace.test(curLine.charAt(start - 1)))--start;
const curWord = start !== end && curLine.slice(start, end);
return {
list: (!curWord ? [] : getDictionary(curLine, curWord).filter(function (item) {
return item.toUpperCase().includes(curWord.toUpperCase());
})).sort(),
from: CodeMirror.Pos(cur.line, start),
to: CodeMirror.Pos(cur.line, end)
}
});
}
calculateWhichGroup(firstTime) {
@ -257,10 +341,10 @@ export class DevToolsController {
const desiredGroup = firstTime
? this.groups.filter(item => item.requestText)
: this.groups.filter(
item =>
item.requestText &&
(item.end >= selection.line && item.start <= selection.line)
);
item =>
item.requestText &&
(item.end >= selection.line && item.start <= selection.line)
);
// Place play button at first line from the selected group
const cords = this.apiInputBox.cursorCoords({

View File

@ -12,10 +12,12 @@
import { ConfigurationHandler } from '../../utils/config-handler';
export class ConfigurationController {
constructor($scope, errorHandler, apiReq) {
constructor($scope, $location, errorHandler, apiReq, appState) {
this.$scope = $scope;
this.errorHandler = errorHandler;
this.apiReq = apiReq;
this.appState = appState;
this.$location = $location;
this.$scope.load = false;
this.$scope.isArray = Array.isArray;
this.configurationHandler = new ConfigurationHandler(apiReq, errorHandler);
@ -32,19 +34,60 @@ export class ConfigurationController {
this.$scope.isString = item => typeof item === 'string';
this.$scope.hasSize = obj =>
obj && typeof obj === 'object' && Object.keys(obj).length;
this.$scope.switchConfigTab = (configurationTab, sections) =>
this.$scope.switchConfigTab = (configurationTab, sections, navigate = true) => {
this.$scope.navigate = navigate;
try {
this.$scope.configSubTab = JSON.stringify({ 'configurationTab': configurationTab, 'sections': sections });
if (!this.$location.search().configSubTab) {
this.appState.setSessionStorageItem('configSubTab', this.$scope.configSubTab);
this.$location.search('configSubTab', true);
}
} catch (error) {
this.errorHandler.handle(error, 'Set configuration path');
}
this.configurationHandler.switchConfigTab(
configurationTab,
sections,
this.$scope
);
this.$scope.switchWodle = wodleName =>
)
};
this.$scope.switchWodle = (wodleName, navigate = true) => {
this.$scope.navigate = navigate;
this.$scope.configWodle = wodleName;
if (!this.$location.search().configWodle) {
this.$location.search('configWodle', this.$scope.configWodle);
}
this.configurationHandler.switchWodle(wodleName, this.$scope);
this.$scope.switchConfigurationTab = configurationTab =>
}
this.$scope.switchConfigurationTab = (configurationTab, navigate) => {
this.$scope.navigate = navigate;
this.configurationHandler.switchConfigurationTab(
configurationTab,
this.$scope
);
)
if (!this.$scope.navigate) {
let configSubTab = this.$location.search().configSubTab;
if (configSubTab) {
try {
const config = this.appState.getSessionStorageItem('configSubTab');
const configSubTabObj = JSON.parse(config);
this.$scope.switchConfigTab(configSubTabObj.configurationTab, configSubTabObj.sections, false);
} catch (error) {
this.errorHandler.handle(error, 'Get configuration path');
}
} else {
let configWodle = this.$location.search().configWodle;
if (configWodle) {
this.$scope.switchWodle(configWodle, false);
}
}
} else {
this.$location.search('configSubTab', null);
this.appState.removeSessionStorageItem('configSubTab');
this.$location.search('configWodle', null);
}
};
this.$scope.switchConfigurationSubTab = configurationSubTab =>
this.configurationHandler.switchConfigurationSubTab(
configurationSubTab,
@ -53,5 +96,7 @@ export class ConfigurationController {
this.$scope.updateSelectedItem = i => (this.$scope.selectedItem = i);
this.$scope.getIntegration = list =>
this.configurationHandler.getIntegration(list, this.$scope);
this.$scope.$on('$routeChangeStart', () => this.appState.removeSessionStorageItem('configSubTab'));
}
}

View File

@ -10,6 +10,7 @@
* Find more information about this on the LICENSE file.
*/
import { FilterHandler } from '../../utils/filter-handler';
import { timefilter } from 'ui/timefilter';
export function ClusterController(
$scope,
@ -27,6 +28,7 @@ export function ClusterController(
appState,
genericReq
) {
timefilter.setRefreshInterval({pause:true,value:0})
$scope.search = term => {
$scope.$broadcast('wazuhSearch', { term });
};

View File

@ -25,6 +25,7 @@ import {
} from '../../utils/overview-metrics';
import { queryConfig } from '../../services/query-config';
import { timefilter } from 'ui/timefilter';
export class OverviewController {
constructor(
@ -54,6 +55,7 @@ export class OverviewController {
}
$onInit() {
timefilter.setRefreshInterval({pause:true,value:0})
this.wodlesConfiguration = false;
this.TabDescription = TabDescription;
this.$rootScope.reportStatus = false;
@ -211,6 +213,10 @@ export class OverviewController {
// Switch tab
async switchTab(newTab, force = false) {
try {
if(newTab === 'welcome') {
timefilter.setRefreshInterval({pause:true,value:0})
}
if (newTab !== 'welcome') {
await this.fetchWodles();
}

View File

@ -11,6 +11,7 @@
*/
import { base64 } from '../../utils/base64';
import { TabNames } from '../../utils/tab-names';
import { configEquivalences } from '../../utils/config-equivalences';
export class SettingsController {
constructor(
@ -637,4 +638,8 @@ export class SettingsController {
refreshLogs() {
return this.getAppLogs();
}
configEquivalence(key) {
return configEquivalences[key] || '-';
}
}

View File

@ -18,3 +18,4 @@ import './wz-welcome-card/wz-welcome-card';
import './wz-no-config/wz-no-config';
import './wz-config-item/wz-config-item';
import './wz-config-item/wz-config-item.less';
import './wz-config-viewer/wz-config-viewer';

View File

@ -0,0 +1,53 @@
<div layout="row">
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="jsoncontent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="jsoncontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetjson()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="xmlcontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetxml()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="jsoncontent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="xmlcontent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="jsoncontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetjson()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="xmlcontent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="callgetxml()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ xmlcontent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
</div>

View File

@ -0,0 +1,39 @@
/*
* Wazuh app - Wazuh config viewer directive
* Copyright (C) 2018 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.
*/
import template from './wz-config-viewer.html';
import { uiModules } from 'ui/modules';
const app = uiModules.get('app/wazuh', []);
class WzConfigViewer {
constructor() {
this.restrict = 'E';
this.scope = {
getjson: '&',
getxml: '&',
jsoncontent: '=jsoncontent',
xmlcontent: '=xmlcontent'
};
this.replace = true;
this.template = template;
}
link(scope, elm, attrs) {
scope.callgetjson = () => {
scope.getjson();
};
scope.callgetxml = () => scope.getxml();
}
}
app.directive('wzConfigViewer', () => new WzConfigViewer());

View File

@ -388,6 +388,11 @@ kbn-vis .vis-container {
overflow: hidden !important;
}
md-sidenav {
width: 250px!important;
font-size: 12px;
}
/* Dev tools styles */
.wz-dev-box {

View File

@ -107,4 +107,16 @@ export class AppState {
getCurrentDevTools() {
return this.$window.localStorage.getItem('currentDevTools');
}
setSessionStorageItem(key, value) {
this.$window.sessionStorage.setItem(key, value);
}
getSessionStorageItem(key) {
return this.$window.sessionStorage.getItem(key);
}
removeSessionStorageItem(key) {
this.$window.sessionStorage.removeItem(key);
}
}

View File

@ -39,7 +39,7 @@
<span> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchTab('welcome')">{{agent.name}} ({{agent.id}})</span>
<span> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchConfigurationTab('welcome')">{{ tabNames[tab] }}</span>
<span class="wz-text-link cursor-pointer" ng-click="switchConfigurationTab('welcome', true)">{{ tabNames[tab] }}</span>
<span> / </span>
<span>{{ tabNames[configurationTab] === 'Alerts' ? 'Labels' : tabNames[configurationTab] }}</span>
</div>
@ -57,7 +57,7 @@
<!-- End separator -->
<!-- Reporting button section -->
<div ng-show="tab !== 'welcome' && tab !== 'configuration'">
<div ng-show="tab !== 'welcome' && tab !== 'configuration' && tabView === 'panels'">
<!-- Report button -->
<md-button md-no-ink class="md-icon-button small wz-no-margin-padding" tooltip="Generate report" tooltip-placement="bottom" ng-disabled="(!rendered || loading || resultState !== 'ready') && tab !== 'syscollector'" ng-click="startVis2Png()" aria-label="Generate report button">
<i class="fa fa-fw fa-print" aria-hidden="true"></i>

View File

@ -92,57 +92,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -60,57 +60,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -79,57 +79,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -92,57 +92,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -90,57 +90,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -54,57 +54,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -51,57 +51,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -101,57 +101,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -66,57 +66,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -72,57 +72,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -3,7 +3,7 @@
<!-- Headline -->
<div layout="column" layout-padding>
<div>
<span class="font-size-18">Client configuration</span>
<span class="font-size-18">Communication</span>
</div>
<span class="md-subheader">Settings related to the connection with the manager</span>
</div>
@ -108,57 +108,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -85,57 +85,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,4 +1,4 @@
<div flex="auto" layout="column" ng-controller="managementConfigurationController" ng-if="mctrl.tab === 'configuration'" ng-init="switchConfigurationTab('welcome')">
<div flex="auto" layout="column" ng-controller="managementConfigurationController" ng-if="mctrl.tab === 'configuration'" ng-init="switchConfigurationTab('welcome', false)">
<!-- Navigation section -->
<div layout="row" layout-align="start center">
@ -14,7 +14,7 @@
<div ng-if="configurationTab !== 'welcome'">
<span class="wz-text-link cursor-pointer" ng-click="mctrl.switchTab('welcome')">Management</span>
<span> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchConfigurationTab('welcome')">{{ mctrl.tabNames[mctrl.tab] }}</span>
<span class="wz-text-link cursor-pointer" ng-click="switchConfigurationTab('welcome', true)">{{ mctrl.tabNames[mctrl.tab] }}</span>
<span> / </span>
<span>{{ mctrl.tabNames[configurationTab] }}</span>
</div>

View File

@ -67,57 +67,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -189,57 +189,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -76,57 +76,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -147,57 +147,7 @@
</md-card>
<!-- End VirusTotal integration card -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -116,57 +116,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -101,57 +101,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -75,57 +75,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -111,57 +111,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -123,57 +123,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -1,54 +1,4 @@
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -119,57 +119,7 @@
</md-card>
<!-- End main card with all the settings -->
<!-- JSON card -->
<md-card flex="auto" class="wz-md-card" ng-if="JSONContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">JSON viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw JSON format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The JSON viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre><code wz-dynamic="JSONContent"></code></pre>
</div>
<!-- End JSON viewer -->
</md-card-content>
</md-card>
<!-- End JSON card -->
<!-- XML card -->
<md-card flex="auto" class="wz-md-card" ng-if="XMLContent">
<md-card-content flex layout="column">
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">XML viewer</span>
<div class="wz-margin-top-10">
<span class="md-subheader small">View this configuration in raw XML format</span>
</div>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</span>
<span class="small">&nbsp;&centerdot;&nbsp;</span>
<span ng-class="XMLContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getXML()">XML</span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<!-- The XML viewer -->
<div flex="auto" class="wz-margin-top-10 wz-code-viewer">
<pre>{{ XMLContent }}</pre>
</div>
<!-- End XML viewer -->
</md-card-content>
</md-card>
<!-- End XML card -->
<wz-config-viewer flex getjson="getJSON()" getxml="getXML()" jsoncontent="JSONContent" xmlcontent="XMLContent" />
</div>
<!-- End main content section -->

View File

@ -60,7 +60,7 @@
</md-list-item>
<md-list-item flex="100" flex-gt-md="50" flex-gt-lg="33" class="md-2-line" ng-if="agent && agent.id !== '000'">
<div class="md-list-item-text">
<h3 class="wz-text-link" ng-click="switchConfigTab('client', [{component:'agent',configuration:'client'}])">Client configuration</h3>
<h3 class="wz-text-link" ng-click="switchConfigTab('client', [{component:'agent',configuration:'client'}])">Communication</h3>
<p>Settings related to the connection with the manager</p>
</div>
</md-list-item>

View File

@ -26,7 +26,7 @@
<!-- End separator -->
<!-- Reporting button section -->
<div ng-show="octrl.tab !== 'welcome'">
<div ng-show="octrl.tab !== 'welcome' && octrl.tabView === 'panels'">
<!-- Report button -->
<md-button md-no-ink class="md-icon-button small wz-no-margin-padding" tooltip="Generate report" tooltip-placement="bottom" ng-disabled="!rendered || loading || resultState !== 'ready'" ng-click="octrl.startVis2Png()" aria-label="Generate report button">
<i class="fa fa-fw fa-print" aria-hidden="true"></i>

View File

@ -8,12 +8,30 @@
<div layout="row" layout-align="start center" ng-if="!ctrl.load">
<md-card flex class="wz-md-card">
<md-card-content>
<i class="fa fa-fw fa-file-o" aria-hidden="true"></i>
<div layout="row">
<i class="fa fa-fw fa-file-o" aria-hidden="true"></i>
<span class="wz-headline-title">Current configuration</span>
<span flex></span>
<a tooltip="About and help" target="_blank" tooltip-placement="left" href="https://documentation.wazuh.com/current/user-manual/kibana-app/reference/config-file.html" aria-label="Link to open app about section">
<i class="fa fa-fw fa-question-circle-o ng-scope" aria-hidden="true"></i>
</a>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10" ng-repeat="(key,value) in ctrl.configuration">
<span flex="25">{{key}}</span>
<span class="wz-text-right color-grey">{{value}}</span>
<div layout="row" class="wz-padding-top-10" >
<table class="table table-striped table-condensed table-layout-fixed">
<thead class="wz-text-bold">
<th class="wz-text-left col-lg-2">Setting</th>
<th class="wz-text-left col-lg-2">Value</th>
<th class="wz-text-left">Description</th>
</thead>
<tbody>
<tr class="wz-word-wrap" ng-repeat="(key,value) in ctrl.configuration">
<td>{{key}}</td>
<td>{{value}}</td>
<td>{{ctrl.configEquivalence(key)}}</td>
</tr>
</tbody>
</table>
</div>
</md-card-content>
</md-card>

View File

@ -10,3 +10,5 @@ import './foldcode.js';
import './foldgutter.js';
import './search-cursor.js';
import './mark-selection.js';
import './show-hint.js';
import './show-hint.css';

View File

@ -0,0 +1,39 @@
.CodeMirror-hints {
position: absolute;
z-index: 10;
overflow: hidden;
list-style: none;
margin: 0;
padding: 2px;
-webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
-moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
box-shadow: 2px 3px 5px rgba(0,0,0,.2);
border-radius: 3px;
border: 1px solid silver;
background: white;
font-size: 90%;
font-family: monospace;
max-height: 20em;
overflow-y: auto;
}
.CodeMirror-hint {
margin: 0;
padding: 0 4px;
border-radius: 2px;
max-width: none;
height: 15px;
overflow: hidden;
white-space: pre;
color: black;
cursor: pointer;
}
.CodeMirror-hint-active {
background: #08f;
color: white;
}

View File

@ -0,0 +1,286 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == 'object' && typeof module == 'object')
// CommonJS
mod(require('./lib/codemirror'));
else if (typeof define == 'function' && define.amd)
// AMD
define(['./lib/codemirror'], mod);
// Plain browser env
else mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.showHint = function(cm, getHints, options) {
// We want a single cursor position.
if (cm.somethingSelected()) return;
if (getHints == null) getHints = cm.getHelper(cm.getCursor(), "hint");
if (getHints == null) return;
if (cm.state.completionActive) cm.state.completionActive.close();
var completion = cm.state.completionActive = new Completion(cm, getHints, options || {});
CodeMirror.signal(cm, "startCompletion", cm);
if (completion.options.async)
getHints(cm, function(hints) { completion.showHints(hints); }, completion.options);
else
return completion.showHints(getHints(cm, completion.options));
};
function Completion(cm, getHints, options) {
this.cm = cm;
this.getHints = getHints;
this.options = options;
this.widget = this.onClose = null;
}
Completion.prototype = {
close: function() {
if (!this.active()) return;
this.cm.state.completionActive = null;
if (this.widget) this.widget.close();
if (this.onClose) this.onClose();
CodeMirror.signal(this.cm, "endCompletion", this.cm);
},
active: function() {
return this.cm.state.completionActive == this;
},
pick: function(data, i) {
var completion = data.list[i];
if (completion.hint) completion.hint(this.cm, data, completion);
else this.cm.replaceRange(getText(completion), data.from, data.to);
this.close();
},
showHints: function(data) {
if (!data || !data.list.length || !this.active()) return this.close();
if (this.options.completeSingle != false && data.list.length == 1)
this.pick(data, 0);
else
this.showWidget(data);
},
showWidget: function(data) {
this.widget = new Widget(this, data);
CodeMirror.signal(data, "shown");
var debounce = null, completion = this, finished;
var closeOn = this.options.closeCharacters || /[\s()\[\]{};:>,]/;
var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length;
function done() {
if (finished) return;
finished = true;
completion.close();
completion.cm.off("cursorActivity", activity);
CodeMirror.signal(data, "close");
}
function isDone() {
if (finished) return true;
if (!completion.widget) { done(); return true; }
}
function update() {
if (isDone()) return;
CodeMirror.signal(data, "update");
if (completion.options.async)
completion.getHints(completion.cm, finishUpdate, completion.options);
else
finishUpdate(completion.getHints(completion.cm, completion.options));
}
function finishUpdate(data_) {
data = data_;
if (isDone()) return;
if (!data || !data.list.length) return done();
completion.widget.close();
completion.widget = new Widget(completion, data);
}
function activity() {
clearTimeout(debounce);
var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line);
if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch ||
pos.ch < startPos.ch || completion.cm.somethingSelected() ||
(pos.ch && closeOn.test(line.charAt(pos.ch - 1))))
completion.close();
else
debounce = setTimeout(update, 170);
}
this.cm.on("cursorActivity", activity);
this.onClose = done;
}
};
function getText(completion) {
if (typeof completion == "string") return completion;
else return completion.text;
}
function buildKeyMap(options, handle) {
var baseMap = {
Up: function() {handle.moveFocus(-1);},
Down: function() {handle.moveFocus(1);},
PageUp: function() {handle.moveFocus(-handle.menuSize());},
PageDown: function() {handle.moveFocus(handle.menuSize());},
Home: function() {handle.setFocus(0);},
End: function() {handle.setFocus(handle.length);},
Enter: handle.pick,
Tab: handle.pick,
Esc: handle.close
};
var ourMap = options.customKeys ? {} : baseMap;
function addBinding(key, val) {
var bound;
if (typeof val != "string")
bound = function(cm) { return val(cm, handle); };
// This mechanism is deprecated
else if (baseMap.hasOwnProperty(val))
bound = baseMap[val];
else
bound = val;
ourMap[key] = bound;
}
if (options.customKeys)
for (var key in options.customKeys) if (options.customKeys.hasOwnProperty(key))
addBinding(key, options.customKeys[key]);
if (options.extraKeys)
for (var key in options.extraKeys) if (options.extraKeys.hasOwnProperty(key))
addBinding(key, options.extraKeys[key]);
return ourMap;
}
function Widget(completion, data) {
this.completion = completion;
this.data = data;
var widget = this, cm = completion.cm, options = completion.options;
var hints = this.hints = document.createElement("ul");
hints.className = "CodeMirror-hints";
this.selectedHint = 0;
var completions = data.list;
for (var i = 0; i < completions.length; ++i) {
var elt = hints.appendChild(document.createElement("li")), cur = completions[i];
var className = "CodeMirror-hint" + (i ? "" : " CodeMirror-hint-active");
if (cur.className != null) className = cur.className + " " + className;
elt.className = className;
if (cur.render) cur.render(elt, data, cur);
else elt.appendChild(document.createTextNode(cur.displayText || getText(cur)));
elt.hintId = i;
}
var pos = cm.cursorCoords(options.alignWithWord !== false ? data.from : null);
var left = pos.left, top = pos.bottom, below = true;
hints.style.left = left + "px";
hints.style.top = top + "px";
// If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.
var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);
var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);
var box = hints.getBoundingClientRect();
var overlapX = box.right - winW, overlapY = box.bottom - winH;
if (overlapX > 0) {
if (box.right - box.left > winW) {
hints.style.width = (winW - 5) + "px";
overlapX -= (box.right - box.left) - winW;
}
hints.style.left = (left = pos.left - overlapX) + "px";
}
if (overlapY > 0) {
var height = box.bottom - box.top;
if (box.top - (pos.bottom - pos.top) - height > 0) {
overlapY = height + (pos.bottom - pos.top);
below = false;
} else if (height > winH) {
hints.style.height = (winH - 5) + "px";
overlapY -= height - winH;
}
hints.style.top = (top = pos.bottom - overlapY) + "px";
}
(options.container || document.body).appendChild(hints);
cm.addKeyMap(this.keyMap = buildKeyMap(options, {
moveFocus: function(n) { widget.changeActive(widget.selectedHint + n); },
setFocus: function(n) { widget.changeActive(n); },
menuSize: function() { return widget.screenAmount(); },
length: completions.length,
close: function() { completion.close(); },
pick: function() { widget.pick(); }
}));
if (options.closeOnUnfocus !== false) {
var closingOnBlur;
cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });
cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); });
}
var startScroll = cm.getScrollInfo();
cm.on("scroll", this.onScroll = function() {
var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
var newTop = top + startScroll.top - curScroll.top;
var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop);
if (!below) point += hints.offsetHeight;
if (point <= editor.top || point >= editor.bottom) return completion.close();
hints.style.top = newTop + "px";
hints.style.left = (left + startScroll.left - curScroll.left) + "px";
});
CodeMirror.on(hints, "dblclick", function(e) {
var t = e.target || e.srcElement;
if (t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}
});
CodeMirror.on(hints, "click", function(e) {
var t = e.target || e.srcElement;
if (t.hintId != null) widget.changeActive(t.hintId);
});
CodeMirror.on(hints, "mousedown", function() {
setTimeout(function(){cm.focus();}, 20);
});
CodeMirror.signal(data, "select", completions[0], hints.firstChild);
return true;
}
Widget.prototype = {
close: function() {
if (this.completion.widget != this) return;
this.completion.widget = null;
this.hints.parentNode.removeChild(this.hints);
this.completion.cm.removeKeyMap(this.keyMap);
var cm = this.completion.cm;
if (this.completion.options.closeOnUnfocus !== false) {
cm.off("blur", this.onBlur);
cm.off("focus", this.onFocus);
}
cm.off("scroll", this.onScroll);
},
pick: function() {
this.completion.pick(this.data, this.selectedHint);
},
changeActive: function(i) {
i = Math.max(0, Math.min(i, this.data.list.length - 1));
if (this.selectedHint == i) return;
var node = this.hints.childNodes[this.selectedHint];
node.className = node.className.replace(" CodeMirror-hint-active", "");
node = this.hints.childNodes[this.selectedHint = i];
node.className += " CodeMirror-hint-active";
if (node.offsetTop < this.hints.scrollTop)
this.hints.scrollTop = node.offsetTop - 3;
else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)
this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;
CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
},
screenAmount: function() {
return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
}
};
});

View File

@ -0,0 +1,28 @@
export const configEquivalences = {
'pattern': 'Default index pattern to use on the app.',
'checks.pattern': 'Enable or disable the index pattern health check when opening the app.',
'checks.template': 'Enable or disable the template health check when opening the app.',
'checks.api': 'Enable or disable the API health check when opening the app.',
'checks.setup': 'Enable or disable the setup health check when opening the app.',
'extensions.pci': 'Enable or disable the PCI DSS tab on Overview and Agents.',
'extensions.gdpr': 'Enable or disable the GDPR tab on Overview and Agents.',
'extensions.audit': 'Enable or disable the Audit tab on Overview and Agents.',
'extensions.oscap': 'Enable or disable the Open SCAP tab on Overview and Agents.',
'extensions.ciscat': 'Enable or disable the CIS-CAT tab on Overview and Agents.',
'extensions.aws': 'Enable or disable the Amazon (AWS) tab on Overview and Agents.',
'extensions.virustotal': 'Enable or disable the VirusTotal tab on Overview and Agents.',
'extensions.osquery': 'Enable or disable the Osquery tab on Overview and Agents.',
'timeout': 'Defines the maximum time the app will wait for an API response when making requests to it.',
'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': 'Disable certain index pattern names from being available in index pattern selector from the Wazuh app.',
'xpack.rbac.enabled': 'Enable or disable X-Pack RBAC security capabilities when using the app.',
'wazuh.monitoring.enabled': 'Enable or disable the wazuh-monitoring index creation and/or visualization.',
'wazuh.monitoring.frequency': 'Define in seconds the frequency the app generates a new document on the wazuh-monitoring index.',
'wazuh.monitoring.shards': 'Define the number of shards to use for the wazuh-monitoring-3.x-* indices.',
'wazuh.monitoring.replicas': 'Define the number of replicas to use for the wazuh-monitoring-3.x-* indices.',
'admin': 'Enable or disable administrator requests to the Wazuh API when using the app.'
}

View File

@ -24,6 +24,7 @@ import { getConfiguration } from '../lib/get-configuration';
import { log } from '../logger';
import { KeyEquivalenece } from '../../util/csv-key-equivalence';
import { cleanKeys } from '../../util/remove-key';
import { apiRequestList } from '../../util/api-request-list'
export class WazuhApiCtrl {
constructor(server) {
@ -202,7 +203,7 @@ export class WazuhApiCtrl {
req.idChanged = api._id;
return this.checkStoredAPI(req, reply);
}
} catch (error) {} // eslint-disable-line
} catch (error) { } // eslint-disable-line
}
} catch (error) {
log('POST /api/check-stored-api', error.message || error);
@ -593,9 +594,9 @@ export class WazuhApiCtrl {
}
throw response &&
response.body &&
response.body.error &&
response.body.message
response.body &&
response.body.error &&
response.body.message
? { message: response.body.message, code: response.body.error }
: new Error('Unexpected error fetching data from the Wazuh API');
} catch (error) {
@ -647,9 +648,9 @@ export class WazuhApiCtrl {
}
throw response &&
response.body &&
response.body.error &&
response.body.message
response.body &&
response.body.error &&
response.body.message
? { message: response.body.message, code: response.body.error }
: new Error('Unexpected error fetching data from the Wazuh API');
} catch (error) {
@ -978,4 +979,10 @@ export class WazuhApiCtrl {
return ErrorResponse(error.message || error, 3035, 500, reply);
}
}
// Get de list of available requests in the API
getRequestList(req, reply) {
//Read a static JSON until the api call has implemented
return reply(apiRequestList);
}
}

View File

@ -86,4 +86,14 @@ export function WazuhApiRoutes(server) {
return ctrl.getAgentsFieldsUniqueCount(req, res);
}
});
// Returns unique fields from the agents such OS, agent version ...
server.route({
method: 'GET',
path: '/api/routes',
handler(req, res) {
return ctrl.getRequestList(req, res);
}
});
}

669
util/api-request-list.js Normal file
View File

@ -0,0 +1,669 @@
/*
* Wazuh app - Module for get the list of routes in API in JSON format
* Copyright (C) 2018 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 apiRequestList =
[
{
"method": "PUT",
"endpoints": [
{
"name": "/active-response/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/group/:group_id",
"args": [
{
"name": ":agent_id"
},
{
"name": ":group_id"
}
]
},
{
"name": "/agents/:agent_id/restart",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/upgrade",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/upgrade_custom",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_name",
"args": [
{
"name": ":agent_name"
}
]
},
{
"name": "/agents/groups/:group_id",
"args": [
{
"name": ":group_id"
}
]
},
{
"name": "/agents/restart",
"args": []
},
{
"name": "/rootcheck",
"args": []
},
{
"name": "/rootcheck/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscheck",
"args": []
},
{
"name": "/syscheck/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
}
]
},
{
"method": "DELETE",
"endpoints": [
{
"name": "/agents",
"args": []
},
{
"name": "/agents/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/group",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/group/:group_id",
"args": [
{
"name": ":agent_id"
},
{
"name": ":group_id"
}
]
},
{
"name": "/agents/groups",
"args": []
},
{
"name": "/agents/groups/:group_id",
"args": [
{
"name": ":group_id"
}
]
},
{
"name": "/cache",
"args": []
},
{
"name": "/cache",
"args": []
},
{
"name": "/experimental/syscheck",
"args": []
},
{
"name": "/rootcheck",
"args": []
},
{
"name": "/rootcheck/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscheck/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
}
]
},
{
"method": "GET",
"endpoints": [
{
"name": "/agents",
"args": []
},
{
"name": "/agents/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/config/:component/:configuration",
"args": [
{
"name": ":agent_id"
},
{
"name": ":component"
},
{
"name": ":configuration"
}
]
},
{
"name": "/agents/:agent_id/group/is_sync",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/key",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/:agent_id/upgrade_result",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/agents/groups",
"args": []
},
{
"name": "/agents/groups/:group_id",
"args": [
{
"name": ":group_id"
}
]
},
{
"name": "/agents/groups/:group_id/configuration",
"args": [
{
"name": ":group_id"
}
]
},
{
"name": "/agents/groups/:group_id/files",
"args": [
{
"name": ":group_id"
}
]
},
{
"name": "/agents/groups/:group_id/files/:filename",
"args": [
{
"name": ":group_id"
},
{
"name": ":filename"
}
]
},
{
"name": "/agents/name/:agent_name",
"args": [
{
"name": ":agent_name"
}
]
},
{
"name": "/agents/no_group",
"args": []
},
{
"name": "/agents/outdated",
"args": []
},
{
"name": "/agents/stats/distinct",
"args": []
},
{
"name": "/agents/summary",
"args": []
},
{
"name": "/agents/summary/os",
"args": []
},
{
"name": "/cache",
"args": []
},
{
"name": "/cache/config",
"args": []
},
{
"name": "/ciscat/:agent_id/results",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/cluster/:node_id/configuration",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/info",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/logs",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/logs/summary",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/stats",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/stats/hourly",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/stats/weekly",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/:node_id/status",
"args": [
{
"name": ":node_id"
}
]
},
{
"name": "/cluster/config",
"args": []
},
{
"name": "/cluster/healthcheck",
"args": []
},
{
"name": "/cluster/node",
"args": []
},
{
"name": "/cluster/nodes",
"args": []
},
{
"name": "/cluster/nodes/:node_name",
"args": [
{
"name": ":node_name"
}
]
},
{
"name": "/cluster/status",
"args": []
},
{
"name": "/decoders",
"args": []
},
{
"name": "/decoders/:decoder_name",
"args": [
{
"name": ":decoder_name"
}
]
},
{
"name": "/decoders/files",
"args": []
},
{
"name": "/decoders/parents",
"args": []
},
{
"name": "/experimental/ciscat/results",
"args": []
},
{
"name": "/experimental/syscollector/hardware",
"args": []
},
{
"name": "/experimental/syscollector/netaddr",
"args": []
},
{
"name": "/experimental/syscollector/netiface",
"args": []
},
{
"name": "/experimental/syscollector/netproto",
"args": []
},
{
"name": "/experimental/syscollector/os",
"args": []
},
{
"name": "/experimental/syscollector/packages",
"args": []
},
{
"name": "/experimental/syscollector/ports",
"args": []
},
{
"name": "/experimental/syscollector/processes",
"args": []
},
{
"name": "/manager/configuration",
"args": []
},
{
"name": "/manager/info",
"args": []
},
{
"name": "/manager/logs",
"args": []
},
{
"name": "/manager/logs/summary",
"args": []
},
{
"name": "/manager/stats",
"args": []
},
{
"name": "/manager/stats/analysisd",
"args": []
},
{
"name": "/manager/stats/hourly",
"args": []
},
{
"name": "/manager/stats/remoted",
"args": []
},
{
"name": "/manager/stats/weekly",
"args": []
},
{
"name": "/manager/status",
"args": []
},
{
"name": "/rootcheck/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/rootcheck/:agent_id/cis",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/rootcheck/:agent_id/last_scan",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/rootcheck/:agent_id/pci",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/rules",
"args": []
},
{
"name": "/rules/:rule_id",
"args": [
{
"name": ":rule_id"
}
]
},
{
"name": "/rules/files",
"args": []
},
{
"name": "/rules/gdpr",
"args": []
},
{
"name": "/rules/groups",
"args": []
},
{
"name": "/rules/pci",
"args": []
},
{
"name": "/syscheck/:agent_id",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscheck/:agent_id/last_scan",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/hardware",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/netaddr",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/netiface",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/netproto",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/os",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/packages",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/ports",
"args": [
{
"name": ":agent_id"
}
]
},
{
"name": "/syscollector/:agent_id/processes",
"args": [
{
"name": ":agent_id"
}
]
}
]
},
{
"method": "POST",
"endpoints": [
{
"name": "/agents",
"args": []
},
{
"name": "/agents/insert",
"args": []
},
{
"name": "/agents/restart",
"args": []
}
]
}
];

View File

@ -0,0 +1,18 @@
/*
* Wazuh app - Wazuh DevTools autocomplete excluded keys
* Copyright (C) 2018 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 ExcludedIntelliSenseTriggerKeys = {
'9': 'tab', '13': 'enter', '16': 'shift', '17': 'ctrl', '18': 'alt', '19': 'pause', '20': 'capslock',
'27': 'escape', '33': 'pageup', '34': 'pagedown', '35': 'end', '36': 'home', '37': 'left', '38': 'up',
'39': 'right', '40': 'down', '45': 'insert', '91': 'left window key', '92': 'right window key', '93': 'select',
'112': 'f1', '113': 'f2', '114': 'f3', '115': 'f4', '116': 'f5', '117': 'f6', '118': 'f7', '119': 'f8',
'120': 'f9', '121': 'f10', '122': 'f11', '123': 'f12', '144': 'numlock', '145': 'scrolllock'
};