Skip to content

Commit

Permalink
Device detail: Refresh entire device (primefaces#268)
Browse files Browse the repository at this point in the history
  • Loading branch information
atretyak1985 authored and Gunnsteinn Hall committed Jul 25, 2019
1 parent 08790f9 commit e24c6b5
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 39 deletions.
16 changes: 15 additions & 1 deletion src/assets/less/custom.less
Original file line number Diff line number Diff line change
Expand Up @@ -673,7 +673,6 @@ a i.fa.fa-trash,a i.fa.fa-edit,a i.fa.fa-refresh, a i.fa.fa-envelope {

.btn-lg{
text-transform: uppercase;

}

.btn-print{
Expand All @@ -682,6 +681,12 @@ a i.fa.fa-trash,a i.fa.fa-edit,a i.fa.fa-refresh, a i.fa.fa-envelope {
margin-top: 0.6em;
}

.btn-recheck-color {
background: none;
color: #898989;
border-color: #898989;
}

// Check box input

.checkbox-custom, .radio-custom {
Expand Down Expand Up @@ -1303,6 +1308,11 @@ div input.input-type-slug {
}
}

.nav-device-detail {
display: inline-flex;
width: 100%;
}

.modal .nav-tabs-nanitor li {
height: auto;
vertical-align: baseline;
Expand Down Expand Up @@ -1846,6 +1856,10 @@ div.badge-container {
border: 1px solid #D9DEE3;
border-radius: 4px;
margin-bottom: 8px;

label {
margin-left: 10px;
}
}

.cursor-grab {
Expand Down
6 changes: 5 additions & 1 deletion src/organization/device/device-detail.service.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Injectable } from '@angular/core';
import { DeviceListResponse, DeviceDetailResponse } from './device_response';
import { DeviceListResponse, DeviceDetailResponse, RequestCheckinForm } from './device_response';
import { AccountService } from 'account/account.service';
import { Observable, Subscription } from 'rxjs';
import { BasicListRequest } from 'common/request';
Expand Down Expand Up @@ -40,6 +40,10 @@ export class DeviceDetailService extends TableCache {
return this.accountService.executePost(`/organization/${this.accountService.getOrganizationId()}/device/request_checkin`, data);
}

requestRechecks(data: RequestCheckinForm) {
return this.accountService.executePost(`/organization/${this.accountService.getOrganizationId()}/device/request_checkin`, data);
}

getRequest(requestPage) {
let request = new BasicListRequest();
request.filters = this.getFilters();
Expand Down
50 changes: 42 additions & 8 deletions src/organization/device/device_detail.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,8 @@ <h2>Credentials2</h2>

<div class="white-wrapper" *ngIf="response" style="margin-top: 25px; padding-bottom: 10px; min-height: 0">
<div class="container-fluid">
<div>
<ul class="nav-tabs-nanitor list-inline">
<div class="nav-tabs-nanitor nav-device-detail">
<ul class="list-inline" style="width: inherit;">
<li id="tab1" class="active"><a (click)="setTabSelected(CONFIGURATION_TAB_INDEX)">Configurations</a></li>
<li id="tab2" *ngIf="vulnerabilityEnabled && numVulnerabilities > 0 || isVulnerabilitiesTabActive"><a
(click)="setTabSelected(VULNERABILITY_TAB_INDEX)">Vulnerabilities ({{ numVulnerabilities }})</a></li>
Expand All @@ -202,6 +202,9 @@ <h2>Credentials2</h2>
<li id="tab6" *ngIf="numGpos > 0 || isGposTabActive"><a (click)="setTabSelected(GROUP_POLICY_TAB_INDEX)">Group Policies ({{ numGpos }})</a></li>
<li id="tab7" *ngIf="numSoftware > 0 || isSoftwareTabActive"><a (click)="setTabSelected(SOFTWARE_TAB_INDEX)">Software ({{ numSoftware }})</a></li>
</ul>
<div>
<button class="btn btn-sm btn-recheck-color" (click)="clickRechecks($event)" id="recheck-button" [disabled]="response.recheck_requested" title="Request Recheck">Request Recheck</button>
</div>
</div>
<div class="table-responsive" style="overflow: hidden; margin-top: 10px;" *ngIf="isTabSelected(CONFIGURATION_TAB_INDEX)">
<div class="no-data" *ngIf="response.assignments.length == 0">
Expand Down Expand Up @@ -280,11 +283,6 @@ <h2>Credentials2</h2>
{{ rowData.last_checkin_at*1000 | moment:'MMM Do YYYY HH:mm' }}
</td>
<td *ngIf="isCurrentOrgAdmin()" class="table-cell" style="width: 140px">
<a href="#" [class.nanitor-disable]="rowData.scap_checkin_requested"
[attr.item-id]="rowData.id" (click)="clickRequestCheckin($event)" title="Request update">
<i class="fa fa-refresh" style="margin-right: 0.5em;"></i>
</a>

<a href="#" [class.nanitor-disable]="!rowData.can_exclude" [attr.item-id]="rowData.id"
[hidden]="rowData.is_excluded" (click)="clickExcludeBaselineDevice($event, rowData.profile_id)"
title="Exclude">
Expand Down Expand Up @@ -400,4 +398,40 @@ <h2 class="modal-title">Create PDF Report</h2>
</div>
</div>
</div>
</div>
</div>

<div id="request-rechecks-confirm" class="modal fade" role="dialog" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title">Request Rechecks</h2>
</div>
<div class="modal-body" style="padding:40px 0; background-color: #ffffff">
<div style="display: inline-block; text-align: left;">
<ng-container>
<div class="customize-column-item" *ngIf="agentSysinfoRecheckSupported()">
<input type="checkbox" [(ngModel)]="itemRechecks.sysinfo_recheck" id="id_sysinfo_recheck" name="sysinfo_recheck"/>
<label for="id_sysinfo_recheck">System info</label>
</div>
<div class="customize-column-item">
<input type="checkbox" [(ngModel)]="itemRechecks.configurations_recheck" id="id_configurations_recheck" name="configurations_recheck"/>
<label for="id_configurations_recheck">Configurations</label>
</div>
<div class="customize-column-item">
<input type="checkbox" [(ngModel)]="itemRechecks.vulnerabilities_recheck" id="id_vulnerabilities_recheck" name="vulnerabilities_recheck"/>
<label for="id_vulnerabilities_recheck">Vulnerabilities</label>
</div>
<div class="customize-column-item">
<input type="checkbox" [(ngModel)]="itemRechecks.patches_recheck" id="id_patches_recheck" name="patches_recheck"/>
<label for="id_patches_recheck">Patches</label>
</div>
</ng-container>
</div>
</div>
<div class="modal-footer">
<button type="button" href="#" data-dismiss="modal" class="btn btn-default btn-lg btn-lg-width">Cancel</button>
<button type="button" class="btn btn-lg btn-success btn-lg-width" [disabled]="!recheckValidation(itemRechecks)" (click)="clickConfirmRechecks($event)">Request</button>
</div>
</div>
</div>
</div>
70 changes: 41 additions & 29 deletions src/organization/device/device_detail.component.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Component, OnInit, Renderer2, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';
import { DeviceDetailResponse, DeviceDetailItem, DeviceAssigmentItem } from './device_response';
import { DeviceDetailResponse, DeviceDetailItem, DeviceAssigmentItem, RequestCheckinForm } from './device_response';
import { BasicResponse } from '../../common/response';
import { Router, ActivatedRoute } from '@angular/router';
import { SpinnerService } from '../../common/spinner/spinner.service';
Expand Down Expand Up @@ -46,6 +46,7 @@ export class DeviceDetailComponent implements OnInit {
@ViewChild('incidentId') incidentId: DeviceIncidentComponent;
@ViewChild('patchId') patchId: DevicePatchComponent;

public itemRechecks: RequestCheckinForm;
public isRequesting: boolean;
private headerInfoEl: ElementRef;
private ROWS: number = 20;
Expand Down Expand Up @@ -111,6 +112,7 @@ export class DeviceDetailComponent implements OnInit {
this.vulnerabilityEnabled = false;
this.infoCollapsed = false;
this.disabledColumns = {};
this.itemRechecks = {} as RequestCheckinForm;
}

ngOnInit() {
Expand Down Expand Up @@ -201,34 +203,6 @@ export class DeviceDetailComponent implements OnInit {
return (this.headerInfoEl ? this.window.innerHeight - this.headerInfoEl.nativeElement.offsetHeight - this.OTHER_CONTENT_HEIGHT : 0) + 'px';
}

clickRequestCheckin(event) {
event.preventDefault();
this.spinnerService.setState(true);

let itemId = parseInt(jQuery(event.target).parent().attr('item-id'));
for (var assignment of this.response.assignments) {
if (assignment.id == itemId) {
this.currentAssignment = assignment;
break;
}
}

let r = this.service.requestCheckin(parseInt(this.deviceId), this.currentAssignment.profile_id);
let self = this;
r.subscribe(
(data: any) => {
let obj: BasicResponse = data;
this.service.flashService.addItemFromStatus(data.status, obj.message);
self.refresh();
this.spinnerService.setState(false);
},
err => {
this.service.accountService.handleError(err);
this.spinnerService.setState(false);
}
);
}

clickExcludeBaselineDevice(event, profileId) {
event.preventDefault();
this.exclusionProfileId = profileId;
Expand Down Expand Up @@ -308,6 +282,37 @@ export class DeviceDetailComponent implements OnInit {
);
}

clickRechecks(event) {
event.preventDefault();
this.itemRechecks = {} as RequestCheckinForm;
this.itemRechecks.device_id = parseInt(this.deviceId);
jQuery('#request-rechecks-confirm').modal('show');
}

clickConfirmRechecks(event) {
event.preventDefault();
let r = this.service.requestRechecks(this.itemRechecks);
let self = this;
r.subscribe(
(data: any) => {
let obj: BasicResponse = data;
this.service.flashService.addItemFromStatus(data.status, obj.message);
self.refresh();
},
err => {
this.service.accountService.handleError(err);
}
);
jQuery('#request-rechecks-confirm').modal('hide');
}

recheckValidation(item: RequestCheckinForm) {
if (item.sysinfo_recheck || item.configurations_recheck || item.vulnerabilities_recheck || item.patches_recheck) {
return true;
}
return false;
}

setResponse(r: DeviceDetailResponse) {
this.benchmarks = [];
for (var item of r.available_assignments) {
Expand Down Expand Up @@ -431,6 +436,13 @@ export class DeviceDetailComponent implements OnInit {
return true;
}

agentSysinfoRecheckSupported() {
if (this.response && this.response.item && this.response.item.agent_version >= '1.8.0') {
return true;
}
return false;
}

getCisScore(item: DeviceAssigmentItem) {
if (!this.assignmentCheckedIn(item)) {
return '-';
Expand Down
10 changes: 10 additions & 0 deletions src/organization/device/device_response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ export interface DeviceDetailResponse {
num_patches: number;
num_software: number;
num_vulnerabilities: number;
recheck_requested: boolean;
}


Expand Down Expand Up @@ -130,3 +131,12 @@ export interface DeviceAssigmentItem {
can_exclude: boolean;
excluded_info: string;
}

export interface RequestCheckinForm {
device_id: number;
sysinfo_recheck: boolean;
configurations_recheck: boolean;
vulnerabilities_recheck: boolean;
patches_recheck: boolean;
}

0 comments on commit e24c6b5

Please sign in to comment.