Merge branch 'issue-1264-1'

This commit is contained in:
Jesús Ángel 2019-02-21 17:59:39 +01:00
commit cc89bda464
25 changed files with 377 additions and 270 deletions

View File

@ -167,7 +167,6 @@ service kibana restart
| 6.6.0 | 3.8.2 | /usr/share/kibana/bin/kibana-plugin install <https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.0.zip> |
| 6.6.1 | 3.8.2 | /usr/share/kibana/bin/kibana-plugin install <https://packages.wazuh.com/wazuhapp/wazuhapp-3.8.2_6.6.1.zip> |
## Contribute
If you want to contribute to our project please don't hesitate to send a pull request. You can also join our users [mailing list](https://groups.google.com/d/forum/wazuh), by sending an email to <mailto:wazuh+subscribe@googlegroups.com>, to ask questions and participate in discussions.

View File

@ -90,12 +90,12 @@ export class AgentsController {
this.ignoredTabs = ['syscollector', 'welcome', 'configuration'];
this.$scope.showSyscheckFiles = false;
this.$scope.showConfigurationAssessmentScan = false;
this.$scope.showScaScan = false;
this.$scope.editGroup = false;
this.$scope.addingGroupToAgent = false;
this.$scope.lookingAssessment = false;
this.$scope.lookingSca = false;
this.$scope.expandArray = [
false,
false,
@ -159,7 +159,7 @@ export class AgentsController {
this.tabVisualizations.assign('agents');
this.$scope.hostMonitoringTabs = ['general', 'fim', 'syscollector'];
this.$scope.systemAuditTabs = ['pm', 'configuration-assessment', 'audit', 'oscap', 'ciscat'];
this.$scope.systemAuditTabs = ['pm', 'sca', 'audit', 'oscap', 'ciscat'];
this.$scope.securityTabs = ['vuls', 'virustotal', 'osquery'];
this.$scope.complianceTabs = ['pci', 'gdpr'];
@ -364,10 +364,10 @@ export class AgentsController {
if (!this.$scope.$$phase) this.$scope.$digest();
};
this.$scope.switchConfigurationAssessmentScan = () => {
this.$scope.lookingAssessment = false;
this.$scope.showConfigurationAssessmentScan = !this.$scope.showConfigurationAssessmentScan;
if (!this.$scope.showConfigurationAssessmentScan) {
this.$scope.switchScaScan = () => {
this.$scope.lookingSca = false;
this.$scope.showScaScan = !this.$scope.showScaScan;
if (!this.$scope.showScaScan) {
this.$rootScope.$emit('changeTabView', {
tabView: this.$scope.tabView
});
@ -394,8 +394,8 @@ export class AgentsController {
this.$scope.cancelAddGroup = () => (this.$scope.addingGroupToAgent = false);
this.$scope.loadAssessmentChecks = policy => this.$scope.lookingAssessment = { name: policy.name, id: policy.policy_id };
this.$scope.closeAssessmentChecks = () => this.$scope.lookingAssessment = false;
this.$scope.loadScaChecks = policy => this.$scope.lookingSca = { name: policy.name, id: policy.policy_id };
this.$scope.closeScaChecks = () => this.$scope.lookingSca = false;
this.$scope.confirmAddGroup = group => {
this.groupHandler
@ -543,7 +543,7 @@ export class AgentsController {
try {
this.$scope.showSyscheckFiles = false;
this.$scope.showConfigurationAssessmentScan = false;
this.$scope.showScaScan = false;
if (tab === 'pci') {
const pciTabs = await this.commonData.getPCI();
this.$scope.pciTabs = pciTabs;
@ -555,10 +555,10 @@ export class AgentsController {
this.$scope.selectedGdprIndex = 0;
}
if (tab === 'configuration-assessment') {
if (tab === 'sca') {
try {
this.$scope.load = true;
const policies = await this.apiReq.request('GET', `/configuration-assessment/${this.$scope.agent.id}`, {});
const policies = await this.apiReq.request('GET', `/sca/${this.$scope.agent.id}`, {});
this.$scope.policies = policies.data.data.items;
} catch (error) { this.$scope.policies = []; }
this.$scope.load = false;

View File

@ -17,7 +17,7 @@ import { checkGap } from '../wz-table/lib/check-gap';
const app = uiModules.get('app/wazuh', []);
app.directive('wzListManage', function() {
app.directive('wzListManage', function () {
return {
restrict: 'E',
scope: {
@ -52,7 +52,7 @@ app.directive('wzListManage', function() {
$scope.prevPage = () => pagination.prevPage($scope);
$scope.nextPage = async currentPage =>
pagination.nextPage(currentPage, $scope, errorHandler, null);
$scope.setPage = function() {
$scope.setPage = function () {
$scope.currentPage = this.n;
$scope.nextPage(this.n);
};
@ -62,7 +62,7 @@ app.directive('wzListManage', function() {
*/
$scope.filterTable = data => {
const result = Object.keys(data || $scope.currentList.list).map(
function(key) {
function (key) {
return [key, $scope.currentList.list[key]];
}
);
@ -191,7 +191,7 @@ app.directive('wzListManage', function() {
const showRestartDialog = async (msg, target) => {
const confirm = $mdDialog.confirm({
controller: function(
controller: function (
$scope,
scope,
errorHandler,
@ -261,7 +261,7 @@ app.directive('wzListManage', function() {
'</md-dialog-content>' +
'<md-dialog-actions>' +
'<button class="md-primary md-cancel-button md-button ng-scope md-default-theme md-ink-ripple" type="button" ng-click="closeDialog()">I will do it later</button>' +
`<button class="md-primary md-confirm-button md-button md-ink-ripple md-default-theme" type="button" ng-click="confirmDialog()">Restart ${target}</button>` +
`<button class="wz-button md-confirm-button md-button md-ink-ripple md-default-theme" type="button" ng-click="confirmDialog()">Restart ${target}</button>` +
'</md-dialog-actions>' +
'</md-dialog>',
hasBackdrop: false,

View File

@ -385,7 +385,7 @@ app.directive('wzTable', function () {
};
$scope.isPolicyMonitoring = () => {
return instance.path.includes('configuration-assessment') && instance.path.includes('/checks')
return instance.path.includes('sca') && instance.path.includes('/checks')
}
$scope.expandPolicyMonitoringCheck = item => {

View File

@ -448,7 +448,7 @@ app.directive('wzXmlFileEditor', function () {
'</md-dialog-content>' +
'<md-dialog-actions>' +
'<button class="md-primary md-cancel-button md-button ng-scope md-default-theme md-ink-ripple" type="button" ng-click="closeDialog()">I will do it later</button>' +
`<button class="md-primary md-confirm-button md-button md-ink-ripple md-default-theme" type="button" ng-click="confirmDialog()">Restart ${target}</button>` +
`<button class="wz-button md-confirm-button md-button md-ink-ripple md-default-theme" type="button" ng-click="confirmDialog()">Restart ${target}</button>` +
'</md-dialog-actions>' +
'</md-dialog>',
hasBackdrop: false,

View File

@ -28,7 +28,7 @@ export class TabVisualizations {
pci: 6,
virustotal: 6,
configuration: 0,
'configuration-assessment': 4,
sca: 4,
osquery: 5
};

View File

@ -131,7 +131,7 @@ export class CommonData {
aws: { group: 'amazon' },
virustotal: { group: 'virustotal' },
osquery: { group: 'osquery' },
'configurationAssessment': { group: 'configuration_assessment' }
sca: { group: 'sca' }
};
const filters = [];

View File

@ -97,7 +97,6 @@ export class VisFactoryService {
*/
async buildAgentsVisualizations(filterHandler, tab, subtab, localChange, id) {
try {
if (tab === 'configuration-assessment') tab = 'configurationAssessment';
const data = await this.genericReq.request(
'GET',
`/elastic/visualizations/agents-${tab}/${this.appState.getCurrentPattern()}`

View File

@ -1,12 +1,12 @@
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels'" ng-show="!showSyscheckFiles" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}"
layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels'" ng-show="!showSyscheckFiles"
ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
<div layout="row">
<span flex></span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run
scan</span>
<md-button ng-click="launchSyscheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i> Run
scan</md-button>
<span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i>
Show state</span>
<md-button ng-click="switchSyscheckFiles()" class="wz-button pull-right"><i class="fa fa-fw fa-database"></i>
Show state</md-button>
</div>
<!-- View: Panels -->
<div layout="row" class="height-300">
@ -68,7 +68,8 @@
<span class="wz-text-link" ng-click="expand(4)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-FIM-Files-modified" vis-id="'Wazuh-App-Agents-FIM-Files-modified'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-FIM-Files-modified" vis-id="'Wazuh-App-Agents-FIM-Files-modified'">
</kbn-vis>
</md-card-content>
</md-card>
<md-card flex="33" class="wz-md-card" ng-class="{'fullscreen': expandArray[5]}">
@ -79,7 +80,8 @@
<span class="wz-text-link" ng-click="expand(5)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-FIM-Files-deleted" vis-id="'Wazuh-App-Agents-FIM-Files-deleted'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-FIM-Files-deleted" vis-id="'Wazuh-App-Agents-FIM-Files-deleted'">
</kbn-vis>
</md-card-content>
</md-card>
</div>
@ -99,23 +101,28 @@
</div>
</md-content>
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels' && showSyscheckFiles" layout-align="start">
<div layout="row" layout-padding>
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels' && showSyscheckFiles"
layout-align="start">
<div layout="row">
<span flex></span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i>
Run scan</span>
<md-button ng-click="launchSyscheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i>
Run scan</md-button>
<span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</span>
<md-button ng-click="switchSyscheckFiles()" class="wz-button pull-right"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</md-button>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="showSyscheckFiles && (!agent || !agent.os)">
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8"
ng-if="showSyscheckFiles && (!agent || !agent.os)">
<div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"
viewBox="0 0 16 16">
<defs>
<path id="help-a" d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z"></path>
<path id="help-a"
d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z">
</path>
</defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg>
@ -130,9 +137,12 @@
<span class="wz-headline-title"><i class="fa fa-fw fa-windows"></i> Windows registry</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10">
<input placeholder="Filter registry..." ng-model="registrySearch" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
aria-invalid="false" wz-enter="searchSyscheckFile(registrySearch,{name:'type',value:'registry'})">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30" ng-click="searchSyscheckFile(registrySearch,{name:'type',value:'registry'})">
<input placeholder="Filter registry..." ng-model="registrySearch" type="text"
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
aria-invalid="false"
wz-enter="searchSyscheckFile(registrySearch,{name:'type',value:'registry'})">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30"
ng-click="searchSyscheckFile(registrySearch,{name:'type',value:'registry'})">
<span class="fa fa-search" aria-hidden="true"></span>
</button>
</div>
@ -143,7 +153,8 @@
</div>
<div layout="row" layout-padding>
<span flex></span>
<a class="small" id="btnDownload" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-registry.csv', [{name:'type',value:'registry'}])">Formatted
<a class="small" id="btnDownload"
ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-registry.csv', [{name:'type',value:'registry'}])">Formatted
<i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div>
</md-card-content>
@ -156,20 +167,24 @@
<span class="wz-headline-title"><i class="fa fa-fw fa-file-o"></i> Files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10">
<input placeholder="Filter files..." ng-model="filesSearch" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
<input placeholder="Filter files..." ng-model="filesSearch" type="text"
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
aria-invalid="false" wz-enter="searchSyscheckFile(filesSearch,{name:'type',value:'file'})">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30" ng-click="searchSyscheckFile(filesSearch,{name:'type',value:'file'})">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30"
ng-click="searchSyscheckFile(filesSearch,{name:'type',value:'file'})">
<span class="fa fa-search" aria-hidden="true"></span>
</button>
</div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv">
<wz-table flex path="'/syscheck/' + agent.id" implicit-filter="[{name:'type',value:'file'}]"
row-sizes="[6,6,6]" extra-limit="100" keys="['file','size','uname','perm','sha1','sha256','uid','mtime','md5']">
row-sizes="[6,6,6]" extra-limit="100"
keys="['file','size','uname','perm','sha1','sha256','uid','mtime','md5']">
</wz-table>
</div>
<div layout="row" layout-padding>
<span flex></span>
<a class="small" id="btnDownload" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv', [{name:'type',value:'file'}])">Formatted
<a class="small" id="btnDownload"
ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv', [{name:'type',value:'file'}])">Formatted
<i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div>
</md-card-content>
@ -182,20 +197,24 @@
<span class="wz-headline-title"><i class="fa fa-fw fa-file-o"></i> Files</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10 wz-margin-bottom-25">
<input placeholder="Filter files..." ng-model="filesSearch" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
<input placeholder="Filter files..." ng-model="filesSearch" type="text"
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
aria-invalid="false" wz-enter="searchSyscheckFile(filesSearch)">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30" ng-click="searchSyscheckFile(filesSearch)">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30"
ng-click="searchSyscheckFile(filesSearch)">
<span class="fa fa-search" aria-hidden="true"></span>
</button>
</div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-16 wz-margin-bottom-40-inv">
<wz-table custom-columns="true" flex path="'/syscheck/' + agent.id" row-sizes="[12,10,8]"
extra-limit="100" keys="['file','size','inode','gname','uname','perm','sha1','sha256','uid','gid','mtime','md5']">
extra-limit="100"
keys="['file','size','inode','gname','uname','perm','sha1','sha256','uid','gid','mtime','md5']">
</wz-table>
</div>
<div layout="row" layout-padding>
<span flex></span>
<a class="small" id="btnDownload" ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv')">Formatted
<a class="small" id="btnDownload"
ng-click="downloadCsv('/syscheck/' + agent.id, 'fim-files.csv')">Formatted
<i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div>
</md-card-content>

View File

@ -1,9 +1,9 @@
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels'" ng-class="{'no-opacity': resultState !== 'ready' || !rendered}"
layout-align="start">
<md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels'"
ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<span flex></span>
<span ng-click="launchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run
scan</span>
<md-button ng-click="launchRootcheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i> Run
scan</md-button>
</div>
<div layout="row" class="height-240">
<md-card flex="50" class="wz-md-card" ng-class="{'fullscreen': expandArray[0]}">
@ -14,7 +14,8 @@
<span class="wz-text-link" ng-click="expand(0)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-PM-Alerts-over-time" vis-id="'Wazuh-App-Agents-PM-Alerts-over-time'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-PM-Alerts-over-time" vis-id="'Wazuh-App-Agents-PM-Alerts-over-time'">
</kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card" ng-class="{'fullscreen': expandArray[1]}">
@ -25,7 +26,8 @@
<span class="wz-text-link" ng-click="expand(1)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-PM-Top-5-CIS-Requirements" vis-id="'Wazuh-App-Agents-PM-Top-5-CIS-Requirements'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-PM-Top-5-CIS-Requirements"
vis-id="'Wazuh-App-Agents-PM-Top-5-CIS-Requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex="25" class="wz-md-card" ng-class="{'fullscreen': expandArray[2]}">
@ -36,7 +38,8 @@
<span class="wz-text-link" ng-click="expand(2)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements" vis-id="'Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements"
vis-id="'Wazuh-App-Agents-PM-Top-5-PCI-DSS-Requirements'"></kbn-vis>
</md-card-content>
</md-card>
</div>

View File

@ -1,9 +1,9 @@
<md-content flex layout="column" ng-if="tab === 'configuration-assessment' && tabView === 'panels'" ng-show="!showConfigurationAssessmentScan"
<md-content flex layout="column" ng-if="tab === 'sca' && tabView === 'panels'" ng-show="!showScaScan"
ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0">
<div layout="row">
<span flex></span>
<span ng-click="switchConfigurationAssessmentScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i>
Show state</span>
<md-button ng-click="switchScaScan()" class="wz-button pull-right"><i class="fa fa-fw fa-database"></i>
Show state</md-button>
</div>
<div layout="row" class="height-240">
<md-card flex class="wz-md-card" ng-class="{'fullscreen': expandArray[0]}">
@ -14,7 +14,8 @@
<span class="wz-text-link" ng-click="expand(0)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-CA-Top-5-CIS-Requirements" vis-id="'Wazuh-App-Agents-CA-Top-5-CIS-Requirements'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-CA-Top-5-CIS-Requirements"
vis-id="'Wazuh-App-Agents-CA-Top-5-CIS-Requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card" ng-class="{'fullscreen': expandArray[1]}">
@ -25,7 +26,8 @@
<span class="wz-text-link" ng-click="expand(1)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-CA-Top-5-PCI-DSS-Requirements" vis-id="'Wazuh-App-Agents-CA-Top-5-PCI-DSS-Requirements'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-CA-Top-5-PCI-DSS-Requirements"
vis-id="'Wazuh-App-Agents-CA-Top-5-PCI-DSS-Requirements'"></kbn-vis>
</md-card-content>
</md-card>
<md-card flex class="wz-md-card" ng-class="{'fullscreen': expandArray[4]}">
@ -36,7 +38,8 @@
<span class="wz-text-link" ng-click="expand(4)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-CA-Result-distribution" vis-id="'Wazuh-App-Agents-CA-Result-distribution'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-CA-Result-distribution"
vis-id="'Wazuh-App-Agents-CA-Result-distribution'"></kbn-vis>
</md-card-content>
</md-card>
</div>
@ -50,7 +53,8 @@
<span class="wz-text-link" ng-click="expand(2)"><i class="fa fa-fw fa-expand"></i></span>
</div>
<md-divider class="wz-margin-top-10"></md-divider>
<kbn-vis id="Wazuh-App-Agents-CA-Alerts-over-time" vis-id="'Wazuh-App-Agents-CA-Alerts-over-time'"></kbn-vis>
<kbn-vis id="Wazuh-App-Agents-CA-Alerts-over-time" vis-id="'Wazuh-App-Agents-CA-Alerts-over-time'">
</kbn-vis>
</md-card-content>
</md-card>
</div>
@ -71,21 +75,24 @@
</md-content>
<md-content flex layout="column" ng-if="tab === 'configuration-assessment' && tabView === 'panels' && showConfigurationAssessmentScan"
layout-align="start">
<div layout="row" layout-padding>
<md-content flex layout="column" ng-if="tab === 'sca' && tabView === 'panels' && showScaScan" layout-align="start">
<div layout="row">
<span flex></span>
<span ng-click="switchConfigurationAssessmentScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</span>
<md-button ng-click="switchScaScan()" class="wz-button pull-right"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</md-button>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="showConfigurationAssessmentScan && (!agent || !agent.os)">
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8"
ng-if="showScaScan && (!agent || !agent.os)">
<div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"
viewBox="0 0 16 16">
<defs>
<path id="help-a" d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z"></path>
<path id="help-a"
d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z">
</path>
</defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg>
@ -94,11 +101,11 @@
</div>
</div>
<div layout="row" layout-padding class="wz-padding-top-0" ng-show="agent && agent.os && !lookingAssessment">
<div layout="row" layout-padding class="wz-padding-top-0" ng-show="agent && agent.os && !lookingSca">
<span class="wz-headline-title"><i class="fa fa-fw fa-shield"></i> Configuration assessment</span>
</div>
<div layout="row" class="md-padding" ng-show="agent && agent.os && !lookingAssessment">
<div layout="row" class="md-padding" ng-show="agent && agent.os && !lookingSca">
<table class="euiTable euiTable--responsive" ng-if="policies && policies.length">
<thead>
<tr>
@ -106,7 +113,8 @@
<div class="euiTableCellContent"><span class="euiTableCellContent__text">Policy</span></div>
</th>
<th class="euiTableHeaderCell padding-left-0 col-lg-5">
<div class="euiTableCellContent"><span class="euiTableCellContent__text">Description</span></div>
<div class="euiTableCellContent"><span class="euiTableCellContent__text">Description</span>
</div>
</th>
<th class="euiTableHeaderCell padding-left-0">
<div class="euiTableCellContent"><span class="euiTableCellContent__text">Last scan</span></div>
@ -127,7 +135,8 @@
<tr class="euiTableRow" ng-repeat="policy in policies">
<td class="euiTableRowCell">
<div class="euiTableCellContent euiTableCellContent--overflowingContent">
<button ng-click="loadAssessmentChecks(policy)" class="euiLink euiLink--primary" type="button">{{policy.name}}</button>
<button ng-click="loadScaChecks(policy)" class="euiLink euiLink--primary"
type="button">{{policy.name}}</button>
</div>
</td>
<td class="euiTableRowCell">
@ -167,27 +176,31 @@
</div>
<div layout="row" class="wz-padding-top-0" ng-if="agent && agent.os && lookingAssessment">
<div layout="row" class="wz-padding-top-0" ng-if="agent && agent.os && lookingSca">
<md-card flex class="wz-md-card">
<md-card-content>
<span class="wz-headline-title"><i class="fa fa-fw fa-arrow-left cursor-pointer" ng-click="closeAssessmentChecks()"></i>
{{lookingAssessment.name}} checks</span>
<span class="wz-headline-title"><i class="fa fa-fw fa-arrow-left cursor-pointer"
ng-click="closeScaChecks()"></i>
{{lookingSca.name}} checks</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-16 wz-margin-bottom-25">
<input placeholder="Filter checks..." ng-model="custom_search" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
<input placeholder="Filter checks..." ng-model="custom_search" type="text"
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
aria-invalid="false" wz-enter="search(custom_search)">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="search(custom_search)">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40"
ng-click="search(custom_search)">
<span class="fa fa-search" aria-hidden="true"></span>
</button>
</div>
<div layout="row" class="wz-margin-top-16 wz-margin-bottom-40-inv">
<wz-table flex path="'/configuration-assessment/' + agent.id + '/checks/' + lookingAssessment.id"
row-sizes="[13,11,9]" extra-limit="100" keys="['title','file','result']">
<wz-table flex path="'/sca/' + agent.id + '/checks/' + lookingSca.id" row-sizes="[13,11,9]"
extra-limit="100" keys="['title','file','result']">
</wz-table>
</div>
<div layout="row" layout-padding>
<span flex></span>
<a class="small" id="btnDownload" ng-click="downloadCsv('/configuration-assessment/' + agent.id + '/checks/' + lookingAssessment.id, lookingAssessment.id + '.csv')">Formatted
<a class="small" id="btnDownload"
ng-click="downloadCsv('/sca/' + agent.id + '/checks/' + lookingSca.id, lookingSca.id + '.csv')">Formatted
<i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div>
</md-card-content>

View File

@ -7,7 +7,8 @@
not fetch data for this agent. <span ng-if="emptyAgent">Reason: {{emptyAgent}}</span></span>
</div>
<div layout="row" layout-padding ng-if="emptyAgent">
<span class="wz-text-link" ng-click="getAgent()"><i class="fa fa-fw fa-refresh" aria-hidden="true"></i>
<span class="wz-text-link" ng-click="getAgent()"><i class="fa fa-fw fa-refresh"
aria-hidden="true"></i>
Try again</span>
</div>
</md-card-content>
@ -17,22 +18,23 @@
<div layout="column" class="" layout-align="start stretch" ng-if="tab === 'welcome'" ng-show="!load && agent">
<!-- Headline -->
<div layout="row" layout-padding class="wz-margin-right-8">
<div layout="row" class="wz-margin-left-16 wz-margin-right-8">
<span class="font-size-18"><i class="fa fa-fw fa-tv" aria-hidden="true"></i> {{ agent.name || '-' }} <span
class="wz-text-bold wz-text-link" ng-click="goDiscover()" tooltip="Discover"><i class="fa fa-fw fa-compass"
aria-hidden="true"></i></span></span>
class="wz-text-bold wz-text-link" ng-click="goDiscover()" tooltip="Discover"><i
class="fa fa-fw fa-compass" aria-hidden="true"></i></span></span>
<span flex></span>
<button ng-show="!showConfirmRestartAgent" ng-disabled="restartingAgent" class="btn wz-button" ng-disabled="isRestarting"
ng-click="showConfirmRestartAgent = true"><i class="fa fa-refresh"></i>
<md-button ng-show="!showConfirmRestartAgent" ng-disabled="restartingAgent" class="wz-button"
ng-disabled="isRestarting" ng-click="showConfirmRestartAgent = true"><i class="fa fa-refresh"></i>
Restart agent
</button>
<div ng-show="showConfirmRestartAgent" class="confirmEmbedBubble confirmEmbedBubbleInline">
</md-button>
<div ng-show="showConfirmRestartAgent"
class="confirmEmbedBubble confirmEmbedBubbleInline wz-margin-right-8 wz-margin-top-8">
<div layout="row no-wrap">
<span class="wz-padding-top-10 wz-padding-left-8">The agent will be restarted</span>
</div>
<div layout="row">
<md-button class="cancelBtn btn-info" type="button" ng-click="showConfirmRestartAgent = false">Cancel</md-button>
<md-button class="btn wz-button" type="button" ng-click="restartAgent(agent);showConfirmRestartAgent = false"><i
<md-button class="cancelBtn btn-info" ng-click="showConfirmRestartAgent = false">Cancel</md-button>
<md-button class="wz-button" ng-click="restartAgent(agent);showConfirmRestartAgent = false"><i
aria-hidden='true' class='fa fa-fw fa-check'></i>
Confirm</md-button>
</div>
@ -42,7 +44,8 @@
<div layout="row" layout-padding>
<md-card flex class="wz-md-card wz-padding-top-0 wz-padding-bottom-0">
<md-card-content>
<div class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive">
<div
class="euiFlexGroup euiFlexGroup--gutterLarge euiFlexGroup--justifyContentSpaceBetween euiFlexGroup--directionRow euiFlexGroup--responsive">
<div class="euiFlexItem euiFlexItem--flexGrowZero">
<div class="euiStat euiStat--leftAligned">
<div class="euiText euiText--small euiStat__description">
@ -99,7 +102,8 @@
<p class="euiTitle euiTitle--small euiStat__title" ng-if="agent.syscheck.inProgress">Scan
in progress</p>
<p class="euiTitle euiTitle--small euiStat__title" ng-if="!agent.syscheck.inProgress">{{agent.syscheck.end
|| '-'}} <md-tooltip ng-if="!agent.syscheck.inProgress && agent.syscheck.start && agent.syscheck.end"
|| '-'}} <md-tooltip
ng-if="!agent.syscheck.inProgress && agent.syscheck.start && agent.syscheck.end"
md-direction="bottom" class="wz-tooltip">
Start time: {{ agent.syscheck.start || '-'}} <br>
End time: {{ agent.syscheck.end || '-'}} <br>
@ -117,7 +121,8 @@
in progress</p>
<p class="euiTitle euiTitle--small euiStat__title" ng-if="!agent.rootcheck.inProgress">{{agent.rootcheck.end
|| '-'}}
<md-tooltip ng-if="!agent.rootcheck.inProgress && agent.rootcheck.start && agent.rootcheck.end"
<md-tooltip
ng-if="!agent.rootcheck.inProgress && agent.rootcheck.start && agent.rootcheck.end"
md-direction="bottom" class="wz-tooltip">
Start time: {{ agent.rootcheck.start || '-'}} <br>
End time: {{ agent.rootcheck.end || '-'}} <br>
@ -135,8 +140,9 @@
<md-card-content>
<div layout="row" ng-if="agent.group">
<span class="font-size-16">Groups <i ng-if='adminMode' tooltip="Add group" ng-click="switchGroupEdit()"
class="wz-text-bold wz-text-link-add fa fa-fw" ng-class="!addingGroupToAgent ? 'fa-plus-circle' : 'fa-minus-circle'"></i></span>
<span class="font-size-16">Groups <i ng-if='adminMode' tooltip="Add group"
ng-click="switchGroupEdit()" class="wz-text-bold wz-text-link-add fa fa-fw"
ng-class="!addingGroupToAgent ? 'fa-plus-circle' : 'fa-minus-circle'"></i></span>
</div>
<md-divider ng-if="agent.group" class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10" ng-if="agent.group && editGroup && !addingGroupToAgent">
@ -144,12 +150,15 @@
Available groups:
</div>
<div class="wz-word-break" flex ng-if="!groups || !groups.length">
No more groups available. Create a new group at <a ng-href="#/manager//?_g=()&tab=groups">Configuration
No more groups available. Create a new group at <a
ng-href="#/manager//?_g=()&tab=groups">Configuration
> Groups</a>.
</div>
</div>
<div ng-if="agent.group && editGroup && !addingGroupToAgent && groups && groups.length" class="wz-margin-top-4">
<span ng-repeat="group in groups" class="wz-text-bold wz-text-link" ng-click="showConfirmAddGroup(group)">{{
<div ng-if="agent.group && editGroup && !addingGroupToAgent && groups && groups.length"
class="wz-margin-top-4">
<span ng-repeat="group in groups" class="wz-text-bold wz-text-link"
ng-click="showConfirmAddGroup(group)">{{
group }}&nbsp;</span>
</div>
@ -165,7 +174,8 @@
</div>
</div>
<div layout="row" ng-if="agent.group" class="wz-word-break wz-padding-top-10">
<span ng-repeat="group in agent.group" class="wz-text-bold wz-text-link" ng-click="goGroups(agent,$index)">{{
<span ng-repeat="group in agent.group" class="wz-text-bold wz-text-link"
ng-click="goGroups(agent,$index)">{{
group
}}&nbsp;</span>
</div>
@ -183,13 +193,17 @@
<div class="euiSpacer euiSpacer--m"></div>
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
<wz-welcome-card class="euiFlexItem" logo="'icons/app_dashboard.svg'" title="'Security events'"
switch-tab="switchTab('general')" current-tab="'general'" description="TabDescription.general.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_logging.svg'" title="'Integrity monitoring'"
switch-tab="switchTab('fim')" current-tab="'fim'" description="TabDescription.fim.description"></wz-welcome-card>
switch-tab="switchTab('general')" current-tab="'general'"
description="TabDescription.general.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_logging.svg'"
title="'Integrity monitoring'" switch-tab="switchTab('fim')" current-tab="'fim'"
description="TabDescription.fim.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_devtools.svg'" title="'Configuration'"
switch-tab="switchTab('configuration')" current-tab="'configuration'" description="TabDescription.configuration.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_index_pattern.svg'" title="'Inventory data'"
switch-tab="switchTab('syscollector')" current-tab="'syscollector'" description="TabDescription.syscollector.description"></wz-welcome-card>
switch-tab="switchTab('configuration')" current-tab="'configuration'"
description="TabDescription.configuration.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_index_pattern.svg'"
title="'Inventory data'" switch-tab="switchTab('syscollector')" current-tab="'syscollector'"
description="TabDescription.syscollector.description"></wz-welcome-card>
</div>
</div>
</div>
@ -198,17 +212,21 @@
<h3 class="euiTitle wzEuiTitle">Auditing and Policy Monitoring</h3>
<div class="euiSpacer euiSpacer--m"></div>
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
<wz-welcome-card class="euiFlexItem" logo="'icons/app_advanced_settings.svg'" title="'Policy monitoring'"
switch-tab="switchTab('pm')" current-tab="'pm'" description="TabDescription.pm.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_timelion.svg'" title="'Configuration assessment'"
switch-tab="switchTab('configuration-assessment')" current-tab="'configuration-assessment'"
description="TabDescription['configuration-assessment'].description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.audit && agent.isLinuxOS" class="euiFlexItem" logo="'icons/app_monitoring.svg'"
title="'System auditing'" switch-tab="switchTab('audit')" current-tab="'audit'" description="TabDescription.audit.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.oscap && agent.isLinuxOS" class="euiFlexItem" logo="'icons/app_discover.svg'"
title="'OpenSCAP'" switch-tab="switchTab('oscap')" current-tab="'oscap'" description="TabDescription.oscap.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_advanced_settings.svg'"
title="'Policy monitoring'" switch-tab="switchTab('pm')" current-tab="'pm'"
description="TabDescription.pm.description"></wz-welcome-card>
<wz-welcome-card class="euiFlexItem" logo="'icons/app_timelion.svg'"
title="'Configuration assessment'" switch-tab="switchTab('sca')" current-tab="'sca'"
description="TabDescription['sca'].description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.audit && agent.isLinuxOS" class="euiFlexItem"
logo="'icons/app_monitoring.svg'" title="'System auditing'" switch-tab="switchTab('audit')"
current-tab="'audit'" description="TabDescription.audit.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.oscap && agent.isLinuxOS" class="euiFlexItem"
logo="'icons/app_discover.svg'" title="'OpenSCAP'" switch-tab="switchTab('oscap')"
current-tab="'oscap'" description="TabDescription.oscap.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.ciscat" class="euiFlexItem" logo="'icons/app_management.svg'"
title="'CIS-CAT'" switch-tab="switchTab('ciscat')" current-tab="'ciscat'" description="TabDescription.ciscat.description"></wz-welcome-card>
title="'CIS-CAT'" switch-tab="switchTab('ciscat')" current-tab="'ciscat'"
description="TabDescription.ciscat.description"></wz-welcome-card>
</div>
</div>
</div>
@ -223,13 +241,16 @@
<h3 class="euiTitle wzEuiTitle">Threat Detection and Response</h3>
<div class="euiSpacer euiSpacer--m"></div>
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
<wz-welcome-card class="euiFlexItem" logo="'icons/app_security.svg'" title="'Vulnerabilities'"
switch-tab="switchTab('vuls')" current-tab="'vuls'" description="TabDescription.vuls.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.virustotal" class="euiFlexItem" logo="'icons/app_saved_objects.svg'"
title="'VirusTotal'" switch-tab="switchTab('virustotal')" current-tab="'virustotal'"
<wz-welcome-card class="euiFlexItem" logo="'icons/app_security.svg'"
title="'Vulnerabilities'" switch-tab="switchTab('vuls')" current-tab="'vuls'"
description="TabDescription.vuls.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.virustotal" class="euiFlexItem"
logo="'icons/app_saved_objects.svg'" title="'VirusTotal'"
switch-tab="switchTab('virustotal')" current-tab="'virustotal'"
description="TabDescription.virustotal.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.osquery" class="euiFlexItem" logo="'icons/osquery.svg'"
title="'Osquery'" switch-tab="switchTab('osquery')" current-tab="'osquery'" description="TabDescription.osquery.description"></wz-welcome-card>
title="'Osquery'" switch-tab="switchTab('osquery')" current-tab="'osquery'"
description="TabDescription.osquery.description"></wz-welcome-card>
</div>
</div>
</div>
@ -239,10 +260,12 @@
<h3 class="euiTitle wzEuiTitle">Regulatory Compliance</h3>
<div class="euiSpacer euiSpacer--m"></div>
<div class="euiFlexGrid euiFlexGrid--gutterLarge euiFlexGrid--halves">
<wz-welcome-card ng-if="extensions.pci" class="euiFlexItem" logo="'icons/app_apm.svg'" title="'PCI DSS'"
switch-tab="switchTab('pci')" current-tab="'pci'" description="TabDescription.pci.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.pci" class="euiFlexItem" logo="'icons/app_apm.svg'"
title="'PCI DSS'" switch-tab="switchTab('pci')" current-tab="'pci'"
description="TabDescription.pci.description"></wz-welcome-card>
<wz-welcome-card ng-if="extensions.gdpr" class="euiFlexItem" logo="'icons/app_visualize.svg'"
title="'GDPR'" switch-tab="switchTab('gdpr')" current-tab="'gdpr'" description="TabDescription.gdpr.description"></wz-welcome-card>
title="'GDPR'" switch-tab="switchTab('gdpr')" current-tab="'gdpr'"
description="TabDescription.gdpr.description"></wz-welcome-card>
</div>
</div>
</div>

View File

@ -12,7 +12,8 @@
<div ng-if="tab !== 'welcome' && tab !== 'configuration'">
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
<span> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchTab('welcome')">{{agent.name}} ({{agent.id}})</span>
<span class="wz-text-link cursor-pointer" ng-click="switchTab('welcome')">{{agent.name}}
({{agent.id}})</span>
<span> / </span>
<span>{{ tabNames[tab] }}</span>
</div>
@ -29,7 +30,8 @@
<div ng-if="tab === 'configuration' && configurationTab === 'welcome'">
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
<span> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchTab('welcome')">{{agent.name}} ({{agent.id}})</span>
<span class="wz-text-link cursor-pointer" ng-click="switchTab('welcome')">{{agent.name}}
({{agent.id}})</span>
<span> / </span>
<span>{{ tabNames[tab] }}</span>
</div>
@ -37,7 +39,8 @@
<div ng-if="tab === 'configuration' && configurationTab !== 'welcome'">
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
<span> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchTab('welcome')">{{agent.name}} ({{agent.id}})</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', true)">{{
tabNames[tab] }}</span>
@ -49,7 +52,8 @@
<!-- Agent status section -->
<div ng-if="agent.status">
<span class="wz-agent-status-indicator small" ng-class="getAgentStatusClass(agent.status)" aria-label="Agent status indicator">{{formatAgentStatus(agent.status)}}</span>
<span class="wz-agent-status-indicator small" ng-class="getAgentStatusClass(agent.status)"
aria-label="Agent status indicator">{{formatAgentStatus(agent.status)}}</span>
</div>
<!-- End agent status section -->
<!-- Separator -->
@ -60,7 +64,8 @@
<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' || showSyscheckFiles || showConfigurationAssessmentScan) && tab !== 'syscollector'"
tooltip-placement="bottom"
ng-disabled="(!rendered || loading || resultState !== 'ready' || showSyscheckFiles || showScaScan) && tab !== 'syscollector'"
ng-click="startVis2Png()" aria-label="Generate report button">
<i class="fa fa-fw fa-print" aria-hidden="true"></i>
</md-button>
@ -76,7 +81,7 @@
</md-button>
<!-- Discover button -->
<md-button ng-if="tabView === 'panels' && !showSyscheckFiles && !showConfigurationAssessmentScan" class="wz-button-flat small"
<md-button ng-if="tabView === 'panels' && !showSyscheckFiles && !showScaScan" class="wz-button-flat small"
ng-click="switchSubtab('discover')" aria-label="Discover button">
<i class="fa fa-fw fa-compass" aria-hidden="true"></i> Discover
</md-button>
@ -86,9 +91,10 @@
<!-- Agent autocomplete selector section -->
<div flex="30" class="wz-margin-8-no-left">
<md-autocomplete flex class="wz-autocomplete wz-select-input" md-no-cache="true" md-select-on-match="false"
md-selected-item="_swpagent" md-selected-item-change="getAgent(_swpagent.id,true)" md-search-text="searchTerm"
md-items="agentAutoComplete in analyzeAgents(searchTerm)" md-item-text="agentAutoComplete.name"
md-min-length="0" md-clear-button="true" md-no-asterisk="false" placeholder="Search by name, ID or IP address">
md-selected-item="_swpagent" md-selected-item-change="getAgent(_swpagent.id,true)"
md-search-text="searchTerm" md-items="agentAutoComplete in analyzeAgents(searchTerm)"
md-item-text="agentAutoComplete.name" md-min-length="0" md-clear-button="true" md-no-asterisk="false"
placeholder="Search by name, ID or IP address">
<md-item-template>
<span class="item-title">
<span><strong md-highlight-text="search" md-highlight-flags="i"> {{agentAutoComplete.name}}
@ -111,7 +117,8 @@
<!-- Host monitoring navigation bar -->
<md-nav-bar ng-if="inArray(tab, hostMonitoringTabs)" class="wz-nav-bar" ng-show="tab !== 'welcome'"
md-selected-nav-item="tab" nav-bar-aria-label="Host monitoring navigation links">
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('general')" name="general">{{ tabNames['general'] }}</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('general')" name="general">{{ tabNames['general'] }}
</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('fim')" name="fim">{{ tabNames['fim'] }}</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('syscollector')" name="syscollector">{{
tabNames['syscollector'] }}</md-nav-item>
@ -120,10 +127,11 @@
<!-- System audit navigation bar -->
<md-nav-bar ng-if="inArray(tab, systemAuditTabs) && (extensions.audit || extensions.oscap || extensions.ciscat)"
class="wz-nav-bar" ng-show="tab !== 'welcome'" md-selected-nav-item="tab" nav-bar-aria-label="System audit navigation links">
class="wz-nav-bar" ng-show="tab !== 'welcome'" md-selected-nav-item="tab"
nav-bar-aria-label="System audit navigation links">
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('pm')" name="pm">{{ tabNames['pm'] }}</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('configuration-assessment')" name="configuration-assessment">{{
tabNames['configuration-assessment'] }}</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('sca')" name="sca">{{
tabNames['sca'] }}</md-nav-item>
<md-nav-item ng-show="extensions.audit" class="wz-nav-item" md-nav-click="switchTab('audit')" name="audit">{{
tabNames['audit'] }}</md-nav-item>
<md-nav-item ng-show="extensions.oscap" class="wz-nav-item" md-nav-click="switchTab('oscap')" name="oscap">{{
@ -136,17 +144,20 @@
<!-- Security navigation bar -->
<md-nav-bar ng-if="inArray(tab, securityTabs) && (extensions.virustotal || extensions.osquery)" class="wz-nav-bar"
ng-show="tab !== 'welcome'" md-selected-nav-item="tab" nav-bar-aria-label="Security navigation links">
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('vuls')" name="vuls">{{ tabNames['vuls'] }}</md-nav-item>
<md-nav-item ng-show="extensions.virustotal" class="wz-nav-item" md-nav-click="switchTab('virustotal')" name="virustotal">{{
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('vuls')" name="vuls">{{ tabNames['vuls'] }}
</md-nav-item>
<md-nav-item ng-show="extensions.virustotal" class="wz-nav-item" md-nav-click="switchTab('virustotal')"
name="virustotal">{{
tabNames['virustotal'] }}</md-nav-item>
<md-nav-item ng-show="extensions.osquery" class="wz-nav-item" md-nav-click="switchTab('osquery')" name="osquery">{{
<md-nav-item ng-show="extensions.osquery" class="wz-nav-item" md-nav-click="switchTab('osquery')"
name="osquery">{{
tabNames['osquery'] }}</md-nav-item>
</md-nav-bar>
<!-- End Security navigation bar -->
<!-- Compliance navigation bar -->
<md-nav-bar ng-if="inArray(tab, complianceTabs) && extensions.pci && extensions.gdpr" class="wz-nav-bar" ng-show="tab !== 'welcome'"
md-selected-nav-item="tab" nav-bar-aria-label="Compliance navigation links">
<md-nav-bar ng-if="inArray(tab, complianceTabs) && extensions.pci && extensions.gdpr" class="wz-nav-bar"
ng-show="tab !== 'welcome'" md-selected-nav-item="tab" nav-bar-aria-label="Compliance navigation links">
<md-nav-item ng-show="extensions.pci" class="wz-nav-item" md-nav-click="switchTab('pci')" name="pci">{{
tabNames['pci'] }}</md-nav-item>
<md-nav-item ng-show="extensions.gdpr" class="wz-nav-item" md-nav-click="switchTab('gdpr')" name="gdpr">{{
@ -155,11 +166,14 @@
<!-- End Compliance navigation bar -->
<!-- Discover search bar section -->
<kbn-dis ng-show="(tab !== 'welcome') && (tab !== 'configuration') && tab !== 'syscollector' && !showSyscheckFiles && !showConfigurationAssessmentScan"></kbn-dis>
<kbn-dis
ng-show="(tab !== 'welcome') && (tab !== 'configuration') && tab !== 'syscollector' && !showSyscheckFiles && !showScaScan">
</kbn-dis>
<!-- End Discover search bar section -->
<!-- Loading status section -->
<div layout="column" layout-align="center center" ng-if="tab !== 'welcome' && tab !== 'configuration' && tab !== 'syscollector'"
<div layout="column" layout-align="center center"
ng-if="tab !== 'welcome' && tab !== 'configuration' && tab !== 'syscollector'"
ng-show="resultState === 'ready' && tabView === 'panels' && !rendered">
<div class="percentage"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
<div class="percentage">{{loadingStatus}}</div>
@ -167,42 +181,47 @@
<!-- End loading status section -->
<!-- Report status section -->
<div layout="column" layout-align="center center" class="wz-margin-top-8" ng-if="(tab !== 'welcome') && (tab !== 'configuration')"
ng-show="reportBusy && reportStatus">
<div layout="column" layout-align="center center" class="wz-margin-top-8"
ng-if="(tab !== 'welcome') && (tab !== 'configuration')" ng-show="reportBusy && reportStatus">
<div class="percentage"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
<div class="percentage">{{reportStatus}}</div>
</div>
<!-- End report status section -->
<!-- No results section -->
<div layout="row" ng-if="!showSyscheckFiles && !showConfigurationAssessmentScan && tab === 'fim' && resultState === 'none' && tabView === 'panels'"
layout-padding class="wz-padding-top-0">
<div layout="row"
ng-if="!showSyscheckFiles && !showScaScan && tab === 'fim' && resultState === 'none' && tabView === 'panels'">
<span flex></span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run
scan</span>
<md-button ng-click="launchSyscheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i> Run
scan</md-button>
<span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i>
Show state</span>
<md-button ng-click="switchSyscheckFiles()" class="wz-button pull-right"><i class="fa fa-fw fa-database"></i>
Show state</md-button>
</div>
<div layout="row" ng-if="!showSyscheckFiles && !showConfigurationAssessmentScan && tab === 'configuration-assessment' && resultState === 'none' && tabView === 'panels'"
layout-padding class="wz-padding-top-0">
<div layout="row"
ng-if="!showSyscheckFiles && !showScaScan && tab === 'sca' && resultState === 'none' && tabView === 'panels'">
<span flex></span>
<span ng-click="switchConfigurationAssessmentScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i>
<md-button ng-click="switchScaScan()" class="wz-button pull-right"><i class="fa fa-fw fa-database"></i>
Show
state</span>
state</md-button>
</div>
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-if="!showSyscheckFiles && !showConfigurationAssessmentScan && tab !== 'welcome' && tab !== 'configuration' && tab !== 'syscollector'"
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8"
ng-if="!showSyscheckFiles && !showScaScan && tab !== 'welcome' && tab !== 'configuration' && tab !== 'syscollector'"
ng-show="resultState === 'none' && tabView === 'panels'">
<div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"
viewBox="0 0 16 16">
<defs>
<path id="help-a" d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z"></path>
<path id="help-a"
d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z">
</path>
</defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg>
<span class="euiCallOutHeader__title">There are no results for selected time range. Try another one.</span>
<span class="euiCallOutHeader__title">There are no results for selected time range. Try another
one.</span>
</div>
</div>
</div>

View File

@ -12,6 +12,6 @@ include ./agents-gdpr.html
include ./agents-virustotal.html
include ./agents-syscollector.html
include ./agents-osquery.html
include ./agents-configuration-assessment.html
include ./agents-sca.html
include ../management/configuration/agent-configuration.pug
include ../footer.foot

View File

@ -1,31 +1,37 @@
<!-- No configuration section -->
<wz-no-config flex error="'not-present'" ng-if="configurationSubTab === 'pm-configuration-assessment' && !currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment']"></wz-no-config>
<wz-no-config flex error="'not-present'"
ng-if="configurationSubTab === 'pm-sca' && !currentConfig['wmodules-wmodules'].wmodules[4]['sca']"></wz-no-config>
<!-- End no configuration section -->
<!-- The main card will all the settings -->
<md-card class="wz-md-card" ng-if="!JSONContent && !XMLContent && configurationSubTab === 'pm-configuration-assessment' && currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment']">
<md-card class="wz-md-card"
ng-if="!JSONContent && !XMLContent && configurationSubTab === 'pm-sca' && currentConfig['wmodules-wmodules'].wmodules[4]['sca']">
<md-card-content>
<div layout="row" layout-align="start center">
<div>
<span class="font-size-16">Configuration assessment</span>
</div>
<span flex></span>
<span ng-class="JSONContent ? 'wz-text-active' : ''" class="wz-text-link small" ng-click="getJSON()">JSON</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>
<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>
<!-- Configuration block -->
<div class="wz-padding-top-10">
<!-- content -->
<wz-config-item label="Configuration assessment status" value="currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment'].enabled === 'yes' ? 'enabled' : 'disabled'">
<wz-config-item label="Configuration assessment status"
value="currentConfig['wmodules-wmodules'].wmodules[4]['sca'].enabled === 'yes' ? 'enabled' : 'disabled'">
</wz-config-item>
<wz-config-item label="Interval" value="currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment'].interval">
<wz-config-item label="Interval" value="currentConfig['wmodules-wmodules'].wmodules[4]['sca'].interval">
</wz-config-item>
<wz-config-item label="Scan on start" value="currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment'].scan_on_start">
<wz-config-item label="Scan on start"
value="currentConfig['wmodules-wmodules'].wmodules[4]['sca'].scan_on_start">
</wz-config-item>
<wz-config-item label="Skip nfs" value="currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment'].skip_nfs">
<wz-config-item label="Skip nfs" value="currentConfig['wmodules-wmodules'].wmodules[4]['sca'].skip_nfs">
</wz-config-item>
<!-- end content -->
</div>
@ -44,7 +50,7 @@
<th class="wz-text-left">Name</th>
</thead>
<tbody class="wz-word-wrap">
<tr ng-repeat="policy in currentConfig['wmodules-wmodules'].wmodules[4]['configuration-assessment'].policies">
<tr ng-repeat="policy in currentConfig['wmodules-wmodules'].wmodules[4]['sca'].policies">
<td>{{policy}}</td>
</tr>
</tbody>

View File

@ -1,57 +1,57 @@
<div flex="auto" layout="column" ng-if="configurationTab === 'policy-monitoring'" ng-init="switchConfigurationSubTab('pm-general')">
<div flex="auto" layout="column" ng-if="configurationTab === 'policy-monitoring'"
ng-init="switchConfigurationSubTab('pm-general')">
<!-- Headline -->
<div layout="column" layout-padding>
<div>
<span class="font-size-18">Policy monitoring</span>
<span
ng-if="currentConfig['syscheck-rootcheck']
<!-- Headline -->
<div layout="column" layout-padding>
<div>
<span class="font-size-18">Policy monitoring</span>
<span ng-if="currentConfig['syscheck-rootcheck']
&& currentConfig['syscheck-rootcheck'].rootcheck
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled === 'no'"
class="wz-agent-status-indicator small teal">Enabled</span>
<span
ng-if="(currentConfig['syscheck-rootcheck']
class="wz-agent-status-indicator small teal">Enabled</span>
<span ng-if="(currentConfig['syscheck-rootcheck']
&& currentConfig['syscheck-rootcheck'].rootcheck
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled === 'yes')
||
(currentConfig['syscheck-rootcheck']
&& isString(currentConfig['syscheck-rootcheck']))" class="wz-agent-status-indicator small red">Disabled</span>
</div>
<span class="md-subheader">Configuration to ensure compliance with security policies, standards and hardening guides</span>
&& isString(currentConfig['syscheck-rootcheck']))"
class="wz-agent-status-indicator small red">Disabled</span>
</div>
<!-- End headline -->
<span class="md-subheader">Configuration to ensure compliance with security policies, standards and hardening
guides</span>
</div>
<!-- End headline -->
<!-- Policy monitoring navigation bar -->
<md-nav-bar
class="wz-nav-bar"
md-selected-nav-item="configurationSubTab"
nav-bar-aria-label="Policy monitoring navigation links">
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-general')" name="pm-general">General</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-unix')" name="pm-unix">System audit</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-configuration-assessment')" name="pm-configuration-assessment">Configuration assessment</md-nav-item>
</md-nav-bar>
<!-- End Policy monitoring navigation bar -->
<!-- Policy monitoring navigation bar -->
<md-nav-bar class="wz-nav-bar" md-selected-nav-item="configurationSubTab"
nav-bar-aria-label="Policy monitoring navigation links">
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-general')" name="pm-general">General
</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-unix')" name="pm-unix">System audit
</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-sca')" name="pm-sca">Configuration
assessment</md-nav-item>
</md-nav-bar>
<!-- End Policy monitoring navigation bar -->
<!-- Loading ring -->
<div class='uil-ring-css' ng-show="load">
<div></div>
</div>
<!-- Loading ring -->
<div class='uil-ring-css' ng-show="load">
<div></div>
</div>
<!-- This section contains the main content and the right sidenav -->
<div flex="auto" layout="row" ng-if="!load">
<!-- This section contains the main content and the right sidenav -->
<div flex="auto" layout="row" ng-if="!load">
<!-- No configuration section -->
<wz-no-config
flex
error="currentConfig['syscheck-rootcheck']"
ng-if="currentConfig['syscheck-rootcheck'] && isString(currentConfig['syscheck-rootcheck'])"></wz-no-config>
<wz-no-config
flex
error="'not-present'"
ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && !currentConfig['syscheck-rootcheck'].rootcheck"></wz-no-config>
<!-- End no configuration section -->
<!-- No configuration section -->
<wz-no-config flex error="currentConfig['syscheck-rootcheck']"
ng-if="currentConfig['syscheck-rootcheck'] && isString(currentConfig['syscheck-rootcheck'])"></wz-no-config>
<wz-no-config flex error="'not-present'"
ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && !currentConfig['syscheck-rootcheck'].rootcheck">
</wz-no-config>
<!-- End no configuration section -->
<!-- This section is the main content -->
<div flex layout="column" ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && currentConfig['syscheck-rootcheck'].rootcheck">
<!-- This section is the main content -->
<div flex layout="column"
ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && currentConfig['syscheck-rootcheck'].rootcheck">

View File

@ -1,6 +1,6 @@
include ./policy-monitoring.head
include ./pm-general.html
include ./pm-unix.html
include ./pm-configuration-assessment.html
include ./pm-sca.html
include ./policy-monitoring.foot
include ../../../footer.foot

View File

@ -1,4 +1,5 @@
<div layout="column" class="mozilla-table-size-85" ng-controller="managerLogController as ctrl" ng-if="!ctrl.loading && mctrl.tab == 'logs'">
<div layout="column" class="mozilla-table-size-85" ng-controller="managerLogController as ctrl"
ng-if="!ctrl.loading && mctrl.tab == 'logs'">
<!-- Headline -->
<div ng-show="!ctrl.loading" layout="column" layout-padding>
@ -11,19 +12,21 @@
<div ng-show="!ctrl.loading" layout="row" layout-align="start center" class="md-padding">
<!-- Daemon selector -->
<div flex="20" layout="column" layout-align="center" class="height-40 wz-margin-right-15 wz-select-input">
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime || !ctrl.daemons.length"
id="categoryBox" ng-model="ctrl.category" ng-change="ctrl.filter({name:'category',value:ctrl.category})"
aria-label="Logs category">
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35"
ng-disabled="ctrl.realtime || !ctrl.daemons.length" id="categoryBox" ng-model="ctrl.category"
ng-change="ctrl.filter({name:'category',value:ctrl.category})" aria-label="Logs category">
<option value="all">All daemons</option>
<option ng-repeat="daemon in ctrl.daemons | orderObjectBy: 'title'" value="{{daemon.title}}">{{daemon.title}}</option>
<option ng-repeat="daemon in ctrl.daemons | orderObjectBy: 'title'" value="{{daemon.title}}">
{{daemon.title}}</option>
</select>
</div>
<!-- End daemon selector -->
<!-- Level selector -->
<div flex="20" layout="column" layout-align="center" class="height-40 wz-select-input wz-margin-right-15">
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime" id="levelBox"
ng-model="ctrl.type_log" ng-change="ctrl.filter({name:'type_log',value:ctrl.type_log})" aria-label="Logs level">
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime"
id="levelBox" ng-model="ctrl.type_log" ng-change="ctrl.filter({name:'type_log',value:ctrl.type_log})"
aria-label="Logs level">
<option value="all">All log levels</option>
<option value="info">Info</option>
<option value="error">Error</option>
@ -34,8 +37,9 @@
</div>
<div flex="20" layout="column" ng-show="ctrl.nodeList" layout-align="center" class="height-40 wz-select-input">
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime" id="categoryBox"
ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Logs category">
<select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime"
id="categoryBox" ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)"
aria-label="Logs category">
<option ng-repeat="node in ctrl.nodeList" value="{{node}}">{{node}}</option>
</select>
</div>
@ -44,12 +48,12 @@
<!-- White space between filters and Realtime button -->
<span flex></span>
<md-button ng-if="!ctrl.realtime" class="wz-button md-raised md-primary no-margin-right" ng-click="ctrl.playRealtime()"
<md-button ng-if="!ctrl.realtime" class="wz-button md-raised no-margin-right" ng-click="ctrl.playRealtime()"
aria-label="Play realtime button">
<i class="fa fa-play fa-fw" aria-hidden="true"></i>
Play realtime
</md-button>
<md-button ng-if="ctrl.realtime" class="wz-button md-raised md-primary no-margin-right" ng-click="ctrl.stopRealtime()"
<md-button ng-if="ctrl.realtime" class="wz-button md-raised no-margin-right" ng-click="ctrl.stopRealtime()"
aria-label="Stop realtime button">
<i class="fa fa-stop fa-fw" aria-hidden="true"></i>
Stop realtime
@ -58,9 +62,11 @@
<!-- End Filters and Realtime button section -->
<div layout="row" flex class="md-padding" ng-if="ctrl.logsPath">
<input placeholder="Filter logs..." ng-model="ctrl.custom_search" type="text" class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid"
aria-invalid="false" wz-enter="ctrl.search(ctrl.custom_search)">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="ctrl.search(ctrl.custom_search)">
<input placeholder="Filter logs..." ng-model="ctrl.custom_search" type="text"
class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid" aria-invalid="false"
wz-enter="ctrl.search(ctrl.custom_search)">
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40"
ng-click="ctrl.search(ctrl.custom_search)">
<span class="fa fa-search" aria-hidden="true"></span>
</button>
</div>
@ -75,6 +81,7 @@
<div layout="row" layout-padding>
<span flex></span>
<a class="small" id="btnDownload" ng-click="ctrl.downloadCsv()">Formatted <i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
<a class="small" id="btnDownload" ng-click="ctrl.downloadCsv()">Formatted <i aria-hidden="true"
class="fa fa-fw fa-download"></i></a>
</div>
</div>

View File

@ -1,5 +1,5 @@
<div layout="column" layout-align="start stretch" ng-controller="managerStatusController as ctrl" ng-if="mctrl.tab === 'status'"
class="">
<div layout="column" layout-align="start stretch" ng-controller="managerStatusController as ctrl"
ng-if="mctrl.tab === 'status'" class="">
<!-- Loading ring -->
<div class='uil-ring-css' ng-show="ctrl.load">
@ -9,24 +9,27 @@
<!-- Headline -->
<div ng-show="!ctrl.load" layout="column" layout-padding>
<span class="font-size-18"><i class="fa fa-fw fa-heartbeat" aria-hidden="true"></i> Status</span>
<span class="md-subheader">Check the status of all Wazuh manager daemons <span ng-show="ctrl.selectedNode">({{ctrl.selectedNode}})</span></span>
<span class="md-subheader">Check the status of all Wazuh manager daemons <span
ng-show="ctrl.selectedNode">({{ctrl.selectedNode}})</span></span>
</div>
<div ng-show="!ctrl.load" layout="row" layout-padding>
<div ng-show="ctrl.selectedNode" layout="column" layout-align="center" class="height-40 wz-select-input">
<select class="kuiSelect wz-border-none cursor-pointer max-height-35" id="categoryBox" ng-model="ctrl.selectedNode"
ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Select node">
<select class="kuiSelect wz-border-none cursor-pointer max-height-35" id="categoryBox"
ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Select node">
<option ng-repeat="node in ctrl.nodes" value="{{node.name}}">{{node.name}}</option>
</select>
</div>
<div flex></div>
<div layout="column" class="height-40 wz-no-padding">
<button ng-if="mctrl.clusterInfo.status === 'enabled' && !mctrl.showConfirmRestart" class="btn wz-button height-35"
ng-disabled="mctrl.isRestarting" ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i>
<button ng-if="mctrl.clusterInfo.status === 'enabled' && !mctrl.showConfirmRestart"
class="btn wz-button height-35" ng-disabled="mctrl.isRestarting"
ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i>
Restart cluster
</button>
<button ng-if="mctrl.clusterInfo.status !== 'enabled' && !mctrl.showConfirmRestart" class="btn wz-button height-35"
ng-disabled="mctrl.isRestarting" ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i>
<button ng-if="mctrl.clusterInfo.status !== 'enabled' && !mctrl.showConfirmRestart"
class="btn wz-button height-35" ng-disabled="mctrl.isRestarting"
ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i>
Restart manager
</button>
<div ng-show="mctrl.showConfirmRestart" class="confirmEmbedBubble confirmEmbedBubbleInline">
@ -37,12 +40,15 @@
manager will be restarted </span>
</div>
<div layout="row">
<md-button class="cancelBtn btn-info" type="button" ng-click="mctrl.showConfirmRestart = false">Cancel</md-button>
<md-button class="cancelBtn btn-info" type="button" ng-click="mctrl.showConfirmRestart = false">
Cancel</md-button>
<md-button ng-if="mctrl.clusterInfo.status === 'enabled'" class="btn wz-button" type="button"
ng-click="mctrl.restartCluster();mctrl.showConfirmRestart = false"><i aria-hidden='true' class='fa fa-fw fa-check'></i>
ng-click="mctrl.restartCluster();mctrl.showConfirmRestart = false"><i aria-hidden='true'
class='fa fa-fw fa-check'></i>
Confirm</md-button>
<md-button ng-if="mctrl.clusterInfo.status !== 'enabled'" class="btn wz-button" type="button"
ng-click="mctrl.restartManager();mctrl.showConfirmRestart = false"><i aria-hidden='true' class='fa fa-fw fa-check'></i>
ng-click="mctrl.restartManager();mctrl.showConfirmRestart = false"><i aria-hidden='true'
class='fa fa-fw fa-check'></i>
Confirm</md-button>
</div>
</div>
@ -50,13 +56,17 @@
</div>
<!-- End headline -->
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8" ng-show="ctrl.clusterError && !ctrl.load">
<div layout="row" class="wz-margin-top-10 wz-margin-right-8 wz-margin-left-8"
ng-show="ctrl.clusterError && !ctrl.load">
<div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"
viewBox="0 0 16 16">
<defs>
<path id="help-a" d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z"></path>
<path id="help-a"
d="M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 0 0-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 0 1 0 8.373zM8 15A6.956 6.956 0 0 1 3.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 0 0 2.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 0 1 8 15zm-5.601-2.813a6.963 6.963 0 0 1 0-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 0 0 3 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 1 1 8 4a4 4 0 0 1 0 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 0 0 8 3a4.979 4.979 0 0 0-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 0 1 8 1zm0-1a8.001 8.001 0 1 0 .003 16.002A8.001 8.001 0 0 0 8 0z">
</path>
</defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg>
@ -91,7 +101,8 @@
<div flex class="wz-text-truncatable">Disconnected:
<span class="wz-text-bold">{{ctrl.agentsCountDisconnected}}</span>
</div>
<div flex class="wz-text-truncatable">Never connected: <span class="wz-text-bold">{{ctrl.agentsCountNeverConnected}}</span>
<div flex class="wz-text-truncatable">Never connected: <span
class="wz-text-bold">{{ctrl.agentsCountNeverConnected}}</span>
</div>
<div flex class="wz-text-truncatable">Agents coverage:
<span class="wz-text-bold">{{(ctrl.agentsCoverity | number:2)}}%</span>
@ -105,8 +116,10 @@
<!-- Manager information section -->
<md-card flex class="wz-md-card">
<md-card-content>
<i class="fa fa-fw fa-server" aria-hidden="true"></i> <span ng-if="ctrl.selectedNode" class="wz-headline-title">{{ctrl.selectedNode}}
information</span> <span ng-if="!ctrl.selectedNode" class="wz-headline-title">Manager information</span>
<i class="fa fa-fw fa-server" aria-hidden="true"></i> <span ng-if="ctrl.selectedNode"
class="wz-headline-title">{{ctrl.selectedNode}}
information</span> <span ng-if="!ctrl.selectedNode" class="wz-headline-title">Manager
information</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Version</span>
@ -120,11 +133,13 @@
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Installation path</span>
<span class="wz-text-right color-grey">{{ctrl.managerInfo.path ? ctrl.managerInfo.path : '-'}}</span>
<span
class="wz-text-right color-grey">{{ctrl.managerInfo.path ? ctrl.managerInfo.path : '-'}}</span>
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Installation type</span>
<span class="wz-text-right color-grey">{{ctrl.managerInfo.type ? ctrl.managerInfo.type : '-'}}</span>
<span
class="wz-text-right color-grey">{{ctrl.managerInfo.type ? ctrl.managerInfo.type : '-'}}</span>
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Agents limit</span>
@ -144,7 +159,8 @@
<!-- Last registered agent section -->
<md-card flex class="wz-md-card" ng-show="ctrl.agentInfo && ctrl.agentInfo.id !== '000'">
<md-card-content>
<i class="fa fa-fw fa-tv" aria-hidden="true"></i> <span class="wz-headline-title">Last registered agent</span>
<i class="fa fa-fw fa-tv" aria-hidden="true"></i> <span class="wz-headline-title">Last registered
agent</span>
<md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Name</span>
@ -156,7 +172,8 @@
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Status</span>
<span class="wz-text-right color-grey">{{ctrl.agentInfo.status ? ctrl.agentInfo.status : '-'}}</span>
<span
class="wz-text-right color-grey">{{ctrl.agentInfo.status ? ctrl.agentInfo.status : '-'}}</span>
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">IP Address</span>
@ -164,11 +181,13 @@
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Date add</span>
<span class="wz-text-right color-grey">{{ctrl.agentInfo.dateAdd ? ctrl.agentInfo.dateAdd : '-'}}</span>
<span
class="wz-text-right color-grey">{{ctrl.agentInfo.dateAdd ? ctrl.agentInfo.dateAdd : '-'}}</span>
</div>
<div layout="row" class="wz-padding-top-10">
<span flex="25">Version</span>
<span class="wz-text-right color-grey">{{ctrl.agentInfo.version ? ctrl.agentInfo.version : '-'}}</span>
<span
class="wz-text-right color-grey">{{ctrl.agentInfo.version ? ctrl.agentInfo.version : '-'}}</span>
</div>
<div layout="row" class="wz-padding-top-10" ng-if="ctrl.agentInfo.id !== '000'">
<span flex="25">Last keep alive</span>

View File

@ -210,7 +210,7 @@
<span flex></span>
<div layout="row" class="wz-padding-top-10">
<wz-kbn-switch aria-label="VirusTotal extension switch" switch-model="ctrl.extensions.virustotal"
switch-change="ctrl.toggleExtension('virustotal',ctrl.extensions.virustotal)"></wz-kbn-switch>
switch-change="ctrl.toggleExtension('virustotal', !ctrl.extensions.virustotal)"></wz-kbn-switch>
</div>
</md-card-content>
<md-card-actions layout="row" layout-align="end center" class="wz-card-actions">

View File

@ -59,5 +59,5 @@ export const TabNames = {
client: 'Client configuration',
edition: 'Edit node configuration',
'client-buffer': 'Anti-flooding settings',
'configuration-assessment': 'Configuration assessment'
sca: 'Configuration assessment'
};

View File

@ -20,7 +20,7 @@ import pm from './agents-pm';
import virustotal from './agents-virustotal';
import vuls from './agents-vuls';
import osquery from './agents-osquery';
import configurationAssessment from './agents-configuration-assessment';
import sca from './agents-sca';
export {
audit,
@ -34,5 +34,5 @@ export {
virustotal,
vuls,
osquery,
configurationAssessment
sca
};

View File

@ -80,7 +80,7 @@ export const TabDescription = {
description:
'Osquery can be used to expose an operating system as a high-performance relational database.'
},
'configuration-assessment': {
'sca': {
title: 'Configuration assessment',
description:
'Lorem ipsum.'

View File

@ -471,7 +471,7 @@ export const apiRequestList = [
args: []
},
{
name: '/configuration_assessment/:agent_id',
name: '/sca/:agent_id',
args: [
{
name: ':agent_id'
@ -479,7 +479,7 @@ export const apiRequestList = [
]
},
{
name: '/configuration_assessment/:agent_id/checks/:policy_id',
name: '/sca/:agent_id/checks/:policy_id',
args: [
{
name: ':agent_id'