Merge pull request #1265 from wazuh/issue-1264-1

UI/UX improvements (2)
This commit is contained in:
Jesús Ángel 2019-02-21 18:09:29 +01:00 committed by GitHub
commit 9e4ee74975
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 378 additions and 269 deletions

View File

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

View File

@ -261,7 +261,7 @@ app.directive('wzListManage', function() {
'</md-dialog-content>' + '</md-dialog-content>' +
'<md-dialog-actions>' + '<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-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-actions>' +
'</md-dialog>', '</md-dialog>',
hasBackdrop: false, hasBackdrop: false,

View File

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

View File

@ -448,7 +448,7 @@ app.directive('wzXmlFileEditor', function () {
'</md-dialog-content>' + '</md-dialog-content>' +
'<md-dialog-actions>' + '<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-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-actions>' +
'</md-dialog>', '</md-dialog>',
hasBackdrop: false, hasBackdrop: false,

View File

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

View File

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

View File

@ -97,7 +97,6 @@ export class VisFactoryService {
*/ */
async buildAgentsVisualizations(filterHandler, tab, subtab, localChange, id) { async buildAgentsVisualizations(filterHandler, tab, subtab, localChange, id) {
try { try {
if (tab === 'configuration-assessment') tab = 'configurationAssessment';
const data = await this.genericReq.request( const data = await this.genericReq.request(
'GET', 'GET',
`/elastic/visualizations/agents-${tab}/${this.appState.getCurrentPattern()}` `/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}" <md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels'" ng-show="!showSyscheckFiles"
layout-align="start"> 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 flex></span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run <md-button ng-click="launchSyscheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i> Run
scan</span> scan</md-button>
<span></span> <span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i> <md-button ng-click="switchSyscheckFiles()" class="wz-button pull-right"><i class="fa fa-fw fa-database"></i>
Show state</span> Show state</md-button>
</div> </div>
<!-- View: Panels --> <!-- View: Panels -->
<div layout="row" class="height-300"> <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> <span class="wz-text-link" ng-click="expand(4)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
<md-card flex="33" class="wz-md-card" ng-class="{'fullscreen': expandArray[5]}"> <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> <span class="wz-text-link" ng-click="expand(5)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
</div> </div>
@ -99,23 +101,28 @@
</div> </div>
</md-content> </md-content>
<md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels' && showSyscheckFiles" layout-align="start"> <md-content flex layout="column" ng-if="tab === 'fim' && tabView === 'panels' && showSyscheckFiles"
<div layout="row" layout-padding> layout-align="start">
<div layout="row">
<span flex></span> <span flex></span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> <md-button ng-click="launchSyscheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i>
Run scan</span> Run scan</md-button>
<span></span> <span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-area-chart"></i> <md-button ng-click="switchSyscheckFiles()" class="wz-button pull-right"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</span> Show alerts</md-button>
</div> </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 flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader"> <div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" <svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"> 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> <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> </defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg> </svg>
@ -130,9 +137,12 @@
<span class="wz-headline-title"><i class="fa fa-fw fa-windows"></i> Windows registry</span> <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> <md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10"> <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" <input placeholder="Filter registry..." ng-model="registrySearch" type="text"
aria-invalid="false" wz-enter="searchSyscheckFile(registrySearch,{name:'type',value:'registry'})"> class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid height-30"
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-30" ng-click="searchSyscheckFile(registrySearch,{name:'type',value:'registry'})"> 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> <span class="fa fa-search" aria-hidden="true"></span>
</button> </button>
</div> </div>
@ -143,7 +153,8 @@
</div> </div>
<div layout="row" layout-padding> <div layout="row" layout-padding>
<span flex></span> <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> <i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div> </div>
</md-card-content> </md-card-content>
@ -156,20 +167,24 @@
<span class="wz-headline-title"><i class="fa fa-fw fa-file-o"></i> Files</span> <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> <md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10"> <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'})"> 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> <span class="fa fa-search" aria-hidden="true"></span>
</button> </button>
</div> </div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-10 wz-margin-bottom-40-inv"> <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'}]" <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> </wz-table>
</div> </div>
<div layout="row" layout-padding> <div layout="row" layout-padding>
<span flex></span> <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> <i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div> </div>
</md-card-content> </md-card-content>
@ -182,20 +197,24 @@
<span class="wz-headline-title"><i class="fa fa-fw fa-file-o"></i> Files</span> <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> <md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-10 wz-margin-bottom-25"> <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)"> 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> <span class="fa fa-search" aria-hidden="true"></span>
</button> </button>
</div> </div>
<div layout="row" ng-if="agent && !load" class="wz-margin-top-16 wz-margin-bottom-40-inv"> <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]" <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> </wz-table>
</div> </div>
<div layout="row" layout-padding> <div layout="row" layout-padding>
<span flex></span> <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> <i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div> </div>
</md-card-content> </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}" <md-content flex layout="column" ng-if="tab === 'pm' && tabView === 'panels'"
layout-align="start"> ng-class="{'no-opacity': resultState !== 'ready' || !rendered}" layout-align="start">
<div layout="row" layout-padding class="wz-padding-top-0"> <div layout="row" layout-padding class="wz-padding-top-0">
<span flex></span> <span flex></span>
<span ng-click="launchRootcheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run <md-button ng-click="launchRootcheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i> Run
scan</span> scan</md-button>
</div> </div>
<div layout="row" class="height-240"> <div layout="row" class="height-240">
<md-card flex="50" class="wz-md-card" ng-class="{'fullscreen': expandArray[0]}"> <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> <span class="wz-text-link" ng-click="expand(0)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
<md-card flex="25" class="wz-md-card" ng-class="{'fullscreen': expandArray[1]}"> <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> <span class="wz-text-link" ng-click="expand(1)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
<md-card flex="25" class="wz-md-card" ng-class="{'fullscreen': expandArray[2]}"> <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> <span class="wz-text-link" ng-click="expand(2)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
</div> </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"> 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 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> Show state</md-button>
</div> </div>
<div layout="row" class="height-240"> <div layout="row" class="height-240">
<md-card flex class="wz-md-card" ng-class="{'fullscreen': expandArray[0]}"> <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> <span class="wz-text-link" ng-click="expand(0)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
<md-card flex class="wz-md-card" ng-class="{'fullscreen': expandArray[1]}"> <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> <span class="wz-text-link" ng-click="expand(1)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
<md-card flex class="wz-md-card" ng-class="{'fullscreen': expandArray[4]}"> <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> <span class="wz-text-link" ng-click="expand(4)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
</div> </div>
@ -50,7 +53,8 @@
<span class="wz-text-link" ng-click="expand(2)"><i class="fa fa-fw fa-expand"></i></span> <span class="wz-text-link" ng-click="expand(2)"><i class="fa fa-fw fa-expand"></i></span>
</div> </div>
<md-divider class="wz-margin-top-10"></md-divider> <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-content>
</md-card> </md-card>
</div> </div>
@ -71,21 +75,24 @@
</md-content> </md-content>
<md-content flex layout="column" ng-if="tab === 'configuration-assessment' && tabView === 'panels' && showConfigurationAssessmentScan" <md-content flex layout="column" ng-if="tab === 'sca' && tabView === 'panels' && showScaScan" layout-align="start">
layout-align="start"> <div layout="row">
<div layout="row" layout-padding>
<span flex></span> <span flex></span>
<span ng-click="switchConfigurationAssessmentScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-area-chart"></i> <md-button ng-click="switchScaScan()" class="wz-button pull-right"><i class="fa fa-fw fa-area-chart"></i>
Show alerts</span> Show alerts</md-button>
</div> </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 flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader"> <div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" <svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"> 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> <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> </defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg> </svg>
@ -94,11 +101,11 @@
</div> </div>
</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> <span class="wz-headline-title"><i class="fa fa-fw fa-shield"></i> Configuration assessment</span>
</div> </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"> <table class="euiTable euiTable--responsive" ng-if="policies && policies.length">
<thead> <thead>
<tr> <tr>
@ -106,7 +113,8 @@
<div class="euiTableCellContent"><span class="euiTableCellContent__text">Policy</span></div> <div class="euiTableCellContent"><span class="euiTableCellContent__text">Policy</span></div>
</th> </th>
<th class="euiTableHeaderCell padding-left-0 col-lg-5"> <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>
<th class="euiTableHeaderCell padding-left-0"> <th class="euiTableHeaderCell padding-left-0">
<div class="euiTableCellContent"><span class="euiTableCellContent__text">Last scan</span></div> <div class="euiTableCellContent"><span class="euiTableCellContent__text">Last scan</span></div>
@ -127,7 +135,8 @@
<tr class="euiTableRow" ng-repeat="policy in policies"> <tr class="euiTableRow" ng-repeat="policy in policies">
<td class="euiTableRowCell"> <td class="euiTableRowCell">
<div class="euiTableCellContent euiTableCellContent--overflowingContent"> <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> </div>
</td> </td>
<td class="euiTableRowCell"> <td class="euiTableRowCell">
@ -167,27 +176,31 @@
</div> </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 flex class="wz-md-card">
<md-card-content> <md-card-content>
<span class="wz-headline-title"><i class="fa fa-fw fa-arrow-left cursor-pointer" ng-click="closeAssessmentChecks()"></i> <span class="wz-headline-title"><i class="fa fa-fw fa-arrow-left cursor-pointer"
{{lookingAssessment.name}} checks</span> ng-click="closeScaChecks()"></i>
{{lookingSca.name}} checks</span>
<md-divider class="wz-margin-top-10"></md-divider> <md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-margin-top-16 wz-margin-bottom-25"> <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)"> 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> <span class="fa fa-search" aria-hidden="true"></span>
</button> </button>
</div> </div>
<div layout="row" class="wz-margin-top-16 wz-margin-bottom-40-inv"> <div layout="row" class="wz-margin-top-16 wz-margin-bottom-40-inv">
<wz-table flex path="'/configuration-assessment/' + agent.id + '/checks/' + lookingAssessment.id" <wz-table flex path="'/sca/' + agent.id + '/checks/' + lookingSca.id" row-sizes="[13,11,9]"
row-sizes="[13,11,9]" extra-limit="100" keys="['title','file','result']"> extra-limit="100" keys="['title','file','result']">
</wz-table> </wz-table>
</div> </div>
<div layout="row" layout-padding> <div layout="row" layout-padding>
<span flex></span> <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> <i aria-hidden="true" class="fa fa-fw fa-download"></i></a>
</div> </div>
</md-card-content> </md-card-content>

View File

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

View File

@ -12,7 +12,8 @@
<div ng-if="tab !== 'welcome' && tab !== 'configuration'"> <div ng-if="tab !== 'welcome' && tab !== 'configuration'">
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a> <a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
<span> / </span> <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> / </span>
<span>{{ tabNames[tab] }}</span> <span>{{ tabNames[tab] }}</span>
</div> </div>
@ -29,7 +30,8 @@
<div ng-if="tab === 'configuration' && configurationTab === 'welcome'"> <div ng-if="tab === 'configuration' && configurationTab === 'welcome'">
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a> <a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
<span> / </span> <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> / </span>
<span>{{ tabNames[tab] }}</span> <span>{{ tabNames[tab] }}</span>
</div> </div>
@ -37,7 +39,8 @@
<div ng-if="tab === 'configuration' && configurationTab !== 'welcome'"> <div ng-if="tab === 'configuration' && configurationTab !== 'welcome'">
<a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a> <a class="wz-text-link cursor-pointer" href="#/agents-preview">Agents</a>
<span> / </span> <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> / </span>
<span class="wz-text-link cursor-pointer" ng-click="switchConfigurationTab('welcome', true)">{{ <span class="wz-text-link cursor-pointer" ng-click="switchConfigurationTab('welcome', true)">{{
tabNames[tab] }}</span> tabNames[tab] }}</span>
@ -49,7 +52,8 @@
<!-- Agent status section --> <!-- Agent status section -->
<div ng-if="agent.status"> <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> </div>
<!-- End agent status section --> <!-- End agent status section -->
<!-- Separator --> <!-- Separator -->
@ -60,7 +64,8 @@
<div ng-show="tab !== 'welcome' && tab !== 'configuration' && tabView === 'panels'"> <div ng-show="tab !== 'welcome' && tab !== 'configuration' && tabView === 'panels'">
<!-- Report button --> <!-- Report button -->
<md-button md-no-ink class="md-icon-button small wz-no-margin-padding" tooltip="Generate report" <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"> ng-click="startVis2Png()" aria-label="Generate report button">
<i class="fa fa-fw fa-print" aria-hidden="true"></i> <i class="fa fa-fw fa-print" aria-hidden="true"></i>
</md-button> </md-button>
@ -76,7 +81,7 @@
</md-button> </md-button>
<!-- Discover 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"> ng-click="switchSubtab('discover')" aria-label="Discover button">
<i class="fa fa-fw fa-compass" aria-hidden="true"></i> Discover <i class="fa fa-fw fa-compass" aria-hidden="true"></i> Discover
</md-button> </md-button>
@ -86,9 +91,10 @@
<!-- Agent autocomplete selector section --> <!-- Agent autocomplete selector section -->
<div flex="30" class="wz-margin-8-no-left"> <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-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-selected-item="_swpagent" md-selected-item-change="getAgent(_swpagent.id,true)"
md-items="agentAutoComplete in analyzeAgents(searchTerm)" md-item-text="agentAutoComplete.name" md-search-text="searchTerm" md-items="agentAutoComplete in analyzeAgents(searchTerm)"
md-min-length="0" md-clear-button="true" md-no-asterisk="false" placeholder="Search by name, ID or IP address"> 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> <md-item-template>
<span class="item-title"> <span class="item-title">
<span><strong md-highlight-text="search" md-highlight-flags="i"> {{agentAutoComplete.name}} <span><strong md-highlight-text="search" md-highlight-flags="i"> {{agentAutoComplete.name}}
@ -111,7 +117,8 @@
<!-- Host monitoring navigation bar --> <!-- Host monitoring navigation bar -->
<md-nav-bar ng-if="inArray(tab, hostMonitoringTabs)" class="wz-nav-bar" ng-show="tab !== 'welcome'" <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-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('fim')" name="fim">{{ tabNames['fim'] }}</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('syscollector')" name="syscollector">{{ <md-nav-item class="wz-nav-item" md-nav-click="switchTab('syscollector')" name="syscollector">{{
tabNames['syscollector'] }}</md-nav-item> tabNames['syscollector'] }}</md-nav-item>
@ -120,10 +127,11 @@
<!-- System audit navigation bar --> <!-- System audit navigation bar -->
<md-nav-bar ng-if="inArray(tab, systemAuditTabs) && (extensions.audit || extensions.oscap || extensions.ciscat)" <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('pm')" name="pm">{{ tabNames['pm'] }}</md-nav-item>
<md-nav-item class="wz-nav-item" md-nav-click="switchTab('configuration-assessment')" name="configuration-assessment">{{ <md-nav-item class="wz-nav-item" md-nav-click="switchTab('sca')" name="sca">{{
tabNames['configuration-assessment'] }}</md-nav-item> tabNames['sca'] }}</md-nav-item>
<md-nav-item ng-show="extensions.audit" class="wz-nav-item" md-nav-click="switchTab('audit')" name="audit">{{ <md-nav-item ng-show="extensions.audit" class="wz-nav-item" md-nav-click="switchTab('audit')" name="audit">{{
tabNames['audit'] }}</md-nav-item> tabNames['audit'] }}</md-nav-item>
<md-nav-item ng-show="extensions.oscap" class="wz-nav-item" md-nav-click="switchTab('oscap')" name="oscap">{{ <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 --> <!-- Security navigation bar -->
<md-nav-bar ng-if="inArray(tab, securityTabs) && (extensions.virustotal || extensions.osquery)" class="wz-nav-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"> 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 class="wz-nav-item" md-nav-click="switchTab('vuls')" name="vuls">{{ tabNames['vuls'] }}
<md-nav-item ng-show="extensions.virustotal" class="wz-nav-item" md-nav-click="switchTab('virustotal')" name="virustotal">{{ </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> 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> tabNames['osquery'] }}</md-nav-item>
</md-nav-bar> </md-nav-bar>
<!-- End Security navigation bar --> <!-- End Security navigation bar -->
<!-- Compliance 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-nav-bar ng-if="inArray(tab, complianceTabs) && extensions.pci && extensions.gdpr" class="wz-nav-bar"
md-selected-nav-item="tab" nav-bar-aria-label="Compliance navigation links"> 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">{{ <md-nav-item ng-show="extensions.pci" class="wz-nav-item" md-nav-click="switchTab('pci')" name="pci">{{
tabNames['pci'] }}</md-nav-item> tabNames['pci'] }}</md-nav-item>
<md-nav-item ng-show="extensions.gdpr" class="wz-nav-item" md-nav-click="switchTab('gdpr')" name="gdpr">{{ <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 --> <!-- End Compliance navigation bar -->
<!-- Discover search bar section --> <!-- 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 --> <!-- End Discover search bar section -->
<!-- Loading status 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"> 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"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
<div class="percentage">{{loadingStatus}}</div> <div class="percentage">{{loadingStatus}}</div>
@ -167,42 +181,47 @@
<!-- End loading status section --> <!-- End loading status section -->
<!-- Report status section --> <!-- Report status section -->
<div layout="column" layout-align="center center" class="wz-margin-top-8" ng-if="(tab !== 'welcome') && (tab !== 'configuration')" <div layout="column" layout-align="center center" class="wz-margin-top-8"
ng-show="reportBusy && reportStatus"> 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"><i class="fa fa-fw fa-spin fa-spinner" aria-hidden="true"></i></div>
<div class="percentage">{{reportStatus}}</div> <div class="percentage">{{reportStatus}}</div>
</div> </div>
<!-- End report status section --> <!-- End report status section -->
<!-- No results section --> <!-- No results section -->
<div layout="row" ng-if="!showSyscheckFiles && !showConfigurationAssessmentScan && tab === 'fim' && resultState === 'none' && tabView === 'panels'" <div layout="row"
layout-padding class="wz-padding-top-0"> ng-if="!showSyscheckFiles && !showScaScan && tab === 'fim' && resultState === 'none' && tabView === 'panels'">
<span flex></span> <span flex></span>
<span ng-click="launchSyscheckScan()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-play"></i> Run <md-button ng-click="launchSyscheckScan()" class="wz-button pull-right"><i class="fa fa-fw fa-play"></i> Run
scan</span> scan</md-button>
<span></span> <span></span>
<span ng-click="switchSyscheckFiles()" class="btn pull-right btn-primary"><i class="fa fa-fw fa-database"></i> <md-button ng-click="switchSyscheckFiles()" class="wz-button pull-right"><i class="fa fa-fw fa-database"></i>
Show state</span> Show state</md-button>
</div> </div>
<div layout="row" ng-if="!showSyscheckFiles && !showConfigurationAssessmentScan && tab === 'configuration-assessment' && resultState === 'none' && tabView === 'panels'" <div layout="row"
layout-padding class="wz-padding-top-0"> ng-if="!showSyscheckFiles && !showScaScan && tab === 'sca' && resultState === 'none' && tabView === 'panels'">
<span flex></span> <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 Show
state</span> state</md-button>
</div> </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'"> ng-show="resultState === 'none' && tabView === 'panels'">
<div flex class="euiCallOut euiCallOut--warning"> <div flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader"> <div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" <svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"> 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> <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> </defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg> </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> </div>
</div> </div>

View File

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

View File

@ -1,31 +1,37 @@
<!-- No configuration section --> <!-- 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 --> <!-- End no configuration section -->
<!-- The main card will all the settings --> <!-- 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> <md-card-content>
<div layout="row" layout-align="start center"> <div layout="row" layout-align="start center">
<div> <div>
<span class="font-size-16">Configuration assessment</span> <span class="font-size-16">Configuration assessment</span>
</div> </div>
<span flex></span> <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 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> </div>
<md-divider class="wz-margin-top-10"></md-divider> <md-divider class="wz-margin-top-10"></md-divider>
<!-- Configuration block --> <!-- Configuration block -->
<div class="wz-padding-top-10"> <div class="wz-padding-top-10">
<!-- content --> <!-- 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>
<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>
<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>
<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> </wz-config-item>
<!-- end content --> <!-- end content -->
</div> </div>
@ -44,7 +50,7 @@
<th class="wz-text-left">Name</th> <th class="wz-text-left">Name</th>
</thead> </thead>
<tbody class="wz-word-wrap"> <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> <td>{{policy}}</td>
</tr> </tr>
</tbody> </tbody>

View File

@ -1,36 +1,38 @@
<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 --> <!-- Headline -->
<div layout="column" layout-padding> <div layout="column" layout-padding>
<div> <div>
<span class="font-size-18">Policy monitoring</span> <span class="font-size-18">Policy monitoring</span>
<span <span ng-if="currentConfig['syscheck-rootcheck']
ng-if="currentConfig['syscheck-rootcheck']
&& currentConfig['syscheck-rootcheck'].rootcheck && currentConfig['syscheck-rootcheck'].rootcheck
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled && currentConfig['syscheck-rootcheck'].rootcheck.disabled
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled === 'no'" && currentConfig['syscheck-rootcheck'].rootcheck.disabled === 'no'"
class="wz-agent-status-indicator small teal">Enabled</span> class="wz-agent-status-indicator small teal">Enabled</span>
<span <span ng-if="(currentConfig['syscheck-rootcheck']
ng-if="(currentConfig['syscheck-rootcheck']
&& currentConfig['syscheck-rootcheck'].rootcheck && currentConfig['syscheck-rootcheck'].rootcheck
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled && currentConfig['syscheck-rootcheck'].rootcheck.disabled
&& currentConfig['syscheck-rootcheck'].rootcheck.disabled === 'yes') && currentConfig['syscheck-rootcheck'].rootcheck.disabled === 'yes')
|| ||
(currentConfig['syscheck-rootcheck'] (currentConfig['syscheck-rootcheck']
&& isString(currentConfig['syscheck-rootcheck']))" class="wz-agent-status-indicator small red">Disabled</span> && isString(currentConfig['syscheck-rootcheck']))"
class="wz-agent-status-indicator small red">Disabled</span>
</div> </div>
<span class="md-subheader">Configuration to ensure compliance with security policies, standards and hardening guides</span> <span class="md-subheader">Configuration to ensure compliance with security policies, standards and hardening
guides</span>
</div> </div>
<!-- End headline --> <!-- End headline -->
<!-- Policy monitoring navigation bar --> <!-- Policy monitoring navigation bar -->
<md-nav-bar <md-nav-bar class="wz-nav-bar" md-selected-nav-item="configurationSubTab"
class="wz-nav-bar"
md-selected-nav-item="configurationSubTab"
nav-bar-aria-label="Policy monitoring navigation links"> 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-general')" name="pm-general">General
<md-nav-item class="wz-nav-item" md-nav-click="switchConfigurationSubTab('pm-unix')" name="pm-unix">System audit</md-nav-item> </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-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> </md-nav-bar>
<!-- End Policy monitoring navigation bar --> <!-- End Policy monitoring navigation bar -->
@ -43,15 +45,13 @@
<div flex="auto" layout="row" ng-if="!load"> <div flex="auto" layout="row" ng-if="!load">
<!-- No configuration section --> <!-- No configuration section -->
<wz-no-config <wz-no-config flex error="currentConfig['syscheck-rootcheck']"
flex
error="currentConfig['syscheck-rootcheck']"
ng-if="currentConfig['syscheck-rootcheck'] && isString(currentConfig['syscheck-rootcheck'])"></wz-no-config> ng-if="currentConfig['syscheck-rootcheck'] && isString(currentConfig['syscheck-rootcheck'])"></wz-no-config>
<wz-no-config <wz-no-config flex error="'not-present'"
flex ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && !currentConfig['syscheck-rootcheck'].rootcheck">
error="'not-present'" </wz-no-config>
ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && !currentConfig['syscheck-rootcheck'].rootcheck"></wz-no-config>
<!-- End no configuration section --> <!-- End no configuration section -->
<!-- This section is the main content --> <!-- This section is the main content -->
<div flex layout="column" ng-if="currentConfig['syscheck-rootcheck'] && !isString(currentConfig['syscheck-rootcheck']) && currentConfig['syscheck-rootcheck'].rootcheck"> <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 ./policy-monitoring.head
include ./pm-general.html include ./pm-general.html
include ./pm-unix.html include ./pm-unix.html
include ./pm-configuration-assessment.html include ./pm-sca.html
include ./policy-monitoring.foot include ./policy-monitoring.foot
include ../../../footer.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 --> <!-- Headline -->
<div ng-show="!ctrl.loading" layout="column" layout-padding> <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"> <div ng-show="!ctrl.loading" layout="row" layout-align="start center" class="md-padding">
<!-- Daemon selector --> <!-- Daemon selector -->
<div flex="20" layout="column" layout-align="center" class="height-40 wz-margin-right-15 wz-select-input"> <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" <select flex class="kuiSelect wz-border-none cursor-pointer max-height-35"
id="categoryBox" ng-model="ctrl.category" ng-change="ctrl.filter({name:'category',value:ctrl.category})" ng-disabled="ctrl.realtime || !ctrl.daemons.length" id="categoryBox" ng-model="ctrl.category"
aria-label="Logs category"> ng-change="ctrl.filter({name:'category',value:ctrl.category})" aria-label="Logs category">
<option value="all">All daemons</option> <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> </select>
</div> </div>
<!-- End daemon selector --> <!-- End daemon selector -->
<!-- Level selector --> <!-- Level selector -->
<div flex="20" layout="column" layout-align="center" class="height-40 wz-select-input wz-margin-right-15"> <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" <select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime"
ng-model="ctrl.type_log" ng-change="ctrl.filter({name:'type_log',value:ctrl.type_log})" aria-label="Logs level"> 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="all">All log levels</option>
<option value="info">Info</option> <option value="info">Info</option>
<option value="error">Error</option> <option value="error">Error</option>
@ -34,8 +37,9 @@
</div> </div>
<div flex="20" layout="column" ng-show="ctrl.nodeList" layout-align="center" class="height-40 wz-select-input"> <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" <select flex class="kuiSelect wz-border-none cursor-pointer max-height-35" ng-disabled="ctrl.realtime"
ng-model="ctrl.selectedNode" ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Logs category"> 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> <option ng-repeat="node in ctrl.nodeList" value="{{node}}">{{node}}</option>
</select> </select>
</div> </div>
@ -44,12 +48,12 @@
<!-- White space between filters and Realtime button --> <!-- White space between filters and Realtime button -->
<span flex></span> <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"> aria-label="Play realtime button">
<i class="fa fa-play fa-fw" aria-hidden="true"></i> <i class="fa fa-play fa-fw" aria-hidden="true"></i>
Play realtime Play realtime
</md-button> </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"> aria-label="Stop realtime button">
<i class="fa fa-stop fa-fw" aria-hidden="true"></i> <i class="fa fa-stop fa-fw" aria-hidden="true"></i>
Stop realtime Stop realtime
@ -58,16 +62,19 @@
<!-- End Filters and Realtime button section --> <!-- End Filters and Realtime button section -->
<div layout="row" flex class="md-padding" ng-if="ctrl.logsPath"> <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" <input placeholder="Filter logs..." ng-model="ctrl.custom_search" type="text"
aria-invalid="false" wz-enter="ctrl.search(ctrl.custom_search)"> class="kuiLocalSearchInput ng-empty ng-pristine ng-scope ng-touched ng-valid" aria-invalid="false"
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="ctrl.search(ctrl.custom_search)"> 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> <span class="fa fa-search" aria-hidden="true"></span>
</button> </button>
</div> </div>
<!-- Logs table section --> <!-- Logs table section -->
<div layout="row" layout-padding ng-if="ctrl.logsPath"> <div layout="row" layout-padding ng-if="ctrl.logsPath">
<wz-table custom-columns="true" flex extra-limit="true" path="ctrl.logsPath" keys="['timestamp',{value:'tag',size:2},'level',{value:'description',size:4,nosortable:true}]" <wz-table custom-columns="true" flex extra-limit="true" path="ctrl.logsPath"
keys="['timestamp',{value:'tag',size:2},'level',{value:'description',size:4,nosortable:true}]"
row-sizes="[12,10,7]"> row-sizes="[12,10,7]">
</wz-table> </wz-table>
</div> </div>
@ -75,6 +82,7 @@
<div layout="row" layout-padding> <div layout="row" layout-padding>
<span flex></span> <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>
</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'" <div layout="column" layout-align="start stretch" ng-controller="managerStatusController as ctrl"
class=""> ng-if="mctrl.tab === 'status'" class="">
<!-- Loading ring --> <!-- Loading ring -->
<div class='uil-ring-css' ng-show="ctrl.load"> <div class='uil-ring-css' ng-show="ctrl.load">
@ -9,24 +9,27 @@
<!-- Headline --> <!-- Headline -->
<div ng-show="!ctrl.load" layout="column" layout-padding> <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="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>
<div ng-show="!ctrl.load" layout="row" layout-padding> <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"> <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" <select class="kuiSelect wz-border-none cursor-pointer max-height-35" id="categoryBox"
ng-change="ctrl.changeNode(ctrl.selectedNode)" aria-label="Select node"> 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> <option ng-repeat="node in ctrl.nodes" value="{{node.name}}">{{node.name}}</option>
</select> </select>
</div> </div>
<div flex></div> <div flex></div>
<div layout="column" class="height-40 wz-no-padding"> <div layout="column" class="height-40 wz-no-padding">
<button ng-if="mctrl.clusterInfo.status === 'enabled' && !mctrl.showConfirmRestart" class="btn wz-button height-35" <button ng-if="mctrl.clusterInfo.status === 'enabled' && !mctrl.showConfirmRestart"
ng-disabled="mctrl.isRestarting" ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i> class="btn wz-button height-35" ng-disabled="mctrl.isRestarting"
ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i>
Restart cluster Restart cluster
</button> </button>
<button ng-if="mctrl.clusterInfo.status !== 'enabled' && !mctrl.showConfirmRestart" class="btn wz-button height-35" <button ng-if="mctrl.clusterInfo.status !== 'enabled' && !mctrl.showConfirmRestart"
ng-disabled="mctrl.isRestarting" ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i> class="btn wz-button height-35" ng-disabled="mctrl.isRestarting"
ng-click="mctrl.showConfirmRestart = true"><i class="fa fa-refresh"></i>
Restart manager Restart manager
</button> </button>
<div ng-show="mctrl.showConfirmRestart" class="confirmEmbedBubble confirmEmbedBubbleInline"> <div ng-show="mctrl.showConfirmRestart" class="confirmEmbedBubble confirmEmbedBubbleInline">
@ -37,12 +40,15 @@
manager will be restarted </span> manager will be restarted </span>
</div> </div>
<div layout="row"> <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" <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> Confirm</md-button>
<md-button ng-if="mctrl.clusterInfo.status !== 'enabled'" class="btn wz-button" type="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> Confirm</md-button>
</div> </div>
</div> </div>
@ -50,13 +56,17 @@
</div> </div>
<!-- End headline --> <!-- 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 flex class="euiCallOut euiCallOut--warning">
<div class="euiCallOutHeader"> <div class="euiCallOutHeader">
<svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" <svg class="euiIcon euiIcon--medium euiCallOutHeader__icon" aria-hidden="true"
xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16"> 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> <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> </defs>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#help-a" fill-rule="evenodd"></use>
</svg> </svg>
@ -91,7 +101,8 @@
<div flex class="wz-text-truncatable">Disconnected: <div flex class="wz-text-truncatable">Disconnected:
<span class="wz-text-bold">{{ctrl.agentsCountDisconnected}}</span> <span class="wz-text-bold">{{ctrl.agentsCountDisconnected}}</span>
</div> </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>
<div flex class="wz-text-truncatable">Agents coverage: <div flex class="wz-text-truncatable">Agents coverage:
<span class="wz-text-bold">{{(ctrl.agentsCoverity | number:2)}}%</span> <span class="wz-text-bold">{{(ctrl.agentsCoverity | number:2)}}%</span>
@ -105,8 +116,10 @@
<!-- Manager information section --> <!-- Manager information section -->
<md-card flex class="wz-md-card"> <md-card flex class="wz-md-card">
<md-card-content> <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}} <i class="fa fa-fw fa-server" aria-hidden="true"></i> <span ng-if="ctrl.selectedNode"
information</span> <span ng-if="!ctrl.selectedNode" class="wz-headline-title">Manager information</span> 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> <md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Version</span> <span flex="25">Version</span>
@ -120,11 +133,13 @@
</div> </div>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Installation path</span> <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>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Installation type</span> <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>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Agents limit</span> <span flex="25">Agents limit</span>
@ -144,7 +159,8 @@
<!-- Last registered agent section --> <!-- Last registered agent section -->
<md-card flex class="wz-md-card" ng-show="ctrl.agentInfo && ctrl.agentInfo.id !== '000'"> <md-card flex class="wz-md-card" ng-show="ctrl.agentInfo && ctrl.agentInfo.id !== '000'">
<md-card-content> <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> <md-divider class="wz-margin-top-10"></md-divider>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Name</span> <span flex="25">Name</span>
@ -156,7 +172,8 @@
</div> </div>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Status</span> <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>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">IP Address</span> <span flex="25">IP Address</span>
@ -164,11 +181,13 @@
</div> </div>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Date add</span> <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>
<div layout="row" class="wz-padding-top-10"> <div layout="row" class="wz-padding-top-10">
<span flex="25">Version</span> <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>
<div layout="row" class="wz-padding-top-10" ng-if="ctrl.agentInfo.id !== '000'"> <div layout="row" class="wz-padding-top-10" ng-if="ctrl.agentInfo.id !== '000'">
<span flex="25">Last keep alive</span> <span flex="25">Last keep alive</span>

View File

@ -59,5 +59,5 @@ export const TabNames = {
client: 'Client configuration', client: 'Client configuration',
edition: 'Edit node configuration', edition: 'Edit node configuration',
'client-buffer': 'Anti-flooding settings', '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 virustotal from './agents-virustotal';
import vuls from './agents-vuls'; import vuls from './agents-vuls';
import osquery from './agents-osquery'; import osquery from './agents-osquery';
import configurationAssessment from './agents-configuration-assessment'; import sca from './agents-sca';
export { export {
audit, audit,
@ -34,5 +34,5 @@ export {
virustotal, virustotal,
vuls, vuls,
osquery, osquery,
configurationAssessment sca
}; };

View File

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

View File

@ -471,7 +471,7 @@ export const apiRequestList = [
args: [] args: []
}, },
{ {
name: '/configuration-assessment/:agent_id', name: '/sca/:agent_id',
args: [ args: [
{ {
name: ':agent_id' 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: [ args: [
{ {
name: ':agent_id' name: ':agent_id'