discovery
This commit is contained in:
		
							parent
							
								
									5628f7a6c4
								
							
						
					
					
						commit
						e2f2b59df3
					
				@ -1,10 +1,11 @@
 | 
			
		||||
<of-probe-summary *ngIf="selectedProbe" @discoveryFilterAnim [probeHost]="selectedProbe"></of-probe-summary>
 | 
			
		||||
<div class="ui-g">
 | 
			
		||||
  <div class="ui-g-12 ui-md-3">
 | 
			
		||||
    <p-accordion [multiple]="true">
 | 
			
		||||
      <p-accordionTab header="Discovery Settings" [selected]="true">
 | 
			
		||||
        <span *ngIf="!selectedProbe">Choose a Probe to perform Discovery.</span>
 | 
			
		||||
        <of-probe-summary *ngIf="requested" @discoveryFilterAnim [probeHost]="selectedProbe"></of-probe-summary>
 | 
			
		||||
        <of-discovery-search-config *ngIf="!requested && selectedProbe" @discoveryFilterAnim [probeHost]="selectedProbe" (requestDiscovery)="onRequestDiscovery($event)"></of-discovery-search-config>
 | 
			
		||||
        <of-discovery-request-summary *ngIf="discoverZone" @discoveryFilterAnim  [discoverZone]="discoverZone"></of-discovery-request-summary>
 | 
			
		||||
      </p-accordionTab>
 | 
			
		||||
      <p-accordionTab header="Filter" [selected]="requested" [disabled]="!requested">
 | 
			
		||||
        <of-discovery-search-filter></of-discovery-search-filter>
 | 
			
		||||
@ -12,9 +13,13 @@
 | 
			
		||||
    </p-accordion>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div class="ui-g-12 ui-md-9" >
 | 
			
		||||
  <div class="ui-g-12 ui-md-9">
 | 
			
		||||
    <p-panel>
 | 
			
		||||
      <of-discovery-result [started]="requested" (stop)="onStop($event)"></of-discovery-result>
 | 
			
		||||
      <of-discovery-result *ngIf="requested else info" [started]="requested" (stop)="onRequestDiscoveryStop($event)"></of-discovery-result>
 | 
			
		||||
    </p-panel>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<ng-template #info>
 | 
			
		||||
  INFO
 | 
			
		||||
</ng-template>
 | 
			
		||||
@ -16,6 +16,8 @@ export class DiscoveryComponent  {
 | 
			
		||||
  @Output() requestDiscovery = new EventEmitter<DiscoverZone>();
 | 
			
		||||
  @Output() requestStop = new EventEmitter();
 | 
			
		||||
 | 
			
		||||
  discoverZone: DiscoverZone;
 | 
			
		||||
 | 
			
		||||
  requested: boolean;
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
@ -24,11 +26,13 @@ export class DiscoveryComponent  {
 | 
			
		||||
 | 
			
		||||
  onRequestDiscovery(dz: DiscoverZone) {
 | 
			
		||||
    this.requested = true;
 | 
			
		||||
    this.discoverZone = dz;
 | 
			
		||||
    this.requestDiscovery.emit(dz);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onStop() {
 | 
			
		||||
  onRequestDiscoveryStop() {
 | 
			
		||||
    this.requested = false;
 | 
			
		||||
    this.discoverZone = null;
 | 
			
		||||
    this.requestStop.emit();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,9 @@
 | 
			
		||||
<div *ngIf="discoverZone">
 | 
			
		||||
    <of-key-value [key]="'Host Range'" [value]="hostRange"></of-key-value>
 | 
			
		||||
    <of-key-value [key]="'Port Range'" [value]="portRange"></of-key-value>
 | 
			
		||||
    <span *ngIf="discoverZone.discoverHost.discoverPort.includeTCP">TCP</span>
 | 
			
		||||
    <span *ngIf="discoverZone.discoverHost.discoverPort.includeUDP">UDP</span>
 | 
			
		||||
    <div *ngFor="let service of services">
 | 
			
		||||
      <span>{{service}}</span>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
@ -0,0 +1,32 @@
 | 
			
		||||
import {
 | 
			
		||||
  Component, Input, OnChanges, SimpleChanges,
 | 
			
		||||
} from '@angular/core';
 | 
			
		||||
import { DiscoverZone } from '@overflow/commons-typescript/model/discovery';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'of-discovery-request-summary',
 | 
			
		||||
  templateUrl: './request-summary.component.html',
 | 
			
		||||
})
 | 
			
		||||
export class RequestSummaryComponent implements OnChanges {
 | 
			
		||||
 | 
			
		||||
  @Input() discoverZone: DiscoverZone;
 | 
			
		||||
  hostRange: string;
 | 
			
		||||
  hostExclude: string;
 | 
			
		||||
  portRange: string;
 | 
			
		||||
  portExclude: string;
 | 
			
		||||
  services: string[];
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
  ) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnChanges(changes: SimpleChanges): void {
 | 
			
		||||
    this.hostRange = this.discoverZone.discoverHost.firstScanRangev4
 | 
			
		||||
      + ' ~ '
 | 
			
		||||
      + this.discoverZone.discoverHost.lastScanRangev4;
 | 
			
		||||
    this.portRange = this.discoverZone.discoverHost.discoverPort.firstScanRange
 | 
			
		||||
     + ' ~ '
 | 
			
		||||
     + this.discoverZone.discoverHost.discoverPort.lastScanRange;
 | 
			
		||||
    this.services = this.discoverZone.discoverHost.discoverPort.discoverService.includeServices;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -25,8 +25,8 @@
 | 
			
		||||
      <of-ip-input [hostIp]="endIP" (inputIp)="onInputIP($event, 1)" [title]="'To'" [fixed]="fixedIPrange"></of-ip-input>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="ui-g-12">
 | 
			
		||||
      <p-multiSelect (onFocus)="onIPExcludeFocus()" [options]="ipArray" optionLabel="ip" [(ngModel)]="excludeIPs" 
 | 
			
		||||
      [panelStyle]="{minWidth:'12em'}" selectedItemsLabel="{0} hosts are excluded." maxSelectedLabels="2" defaultLabel="Add exclude IP"></p-multiSelect>
 | 
			
		||||
      <p-multiSelect (onFocus)="onIPExcludeFocus()" [options]="ipArray" optionLabel="ip" [(ngModel)]="excludeIPs" [panelStyle]="{minWidth:'12em'}"
 | 
			
		||||
        selectedItemsLabel="{0} hosts are excluded." maxSelectedLabels="2" defaultLabel="Add exclude IP"></p-multiSelect>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div *ngIf="ipErrMsg" class="ui-message ui-messages-error ui-corner-all">
 | 
			
		||||
      {{ipErrMsg}}
 | 
			
		||||
@ -67,7 +67,10 @@
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="ui-g-12">
 | 
			
		||||
    <a style="cursor: pointer" (click)="displayPortExclude = true">Add Exclude Ports</a>
 | 
			
		||||
    <a style="cursor: pointer" (click)="portExcludeDisplay = true">
 | 
			
		||||
      <span *ngIf="excludePorts.length === 0">Add Exclude Ports</span>
 | 
			
		||||
      <span *ngIf="excludePorts.length > 0">{{excludePorts.length}} ports are excluded.</span>
 | 
			
		||||
    </a>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div *ngIf="portErrMsg" class="ui-message ui-messages-error ui-corner-all">
 | 
			
		||||
    {{portErrMsg}}
 | 
			
		||||
@ -81,10 +84,21 @@
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div class="ui-g-12 ui-g-nopad">
 | 
			
		||||
    <of-service-selector [disabled]="!serviceChecked" [(includeServices)]="includeServices"></of-service-selector>
 | 
			
		||||
    <!-- <of-service-selector [disabled]="!serviceChecked" [(includeServices)]="includeServices"></of-service-selector> -->
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div class="ui-g-12" dir="rtl">
 | 
			
		||||
    <button type="submit" [disabled]="!validation" label="Discovery Start" pButton class="ui-button-width-fit" (click)="onRequestDiscovery()"></button>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<p-dialog [(visible)]="portExcludeDisplay" [modal]="true" [responsive]="true" [width]="400">
 | 
			
		||||
  <p-header>
 | 
			
		||||
    Add Ports to exclude.
 | 
			
		||||
  </p-header>
 | 
			
		||||
  <p-chips [(ngModel)]="portChips" [addOnTab]="true" [allowDuplicate]="false" (onAdd)="onAddExcludePort($event)" (onRemove)="onRemoveExcludePort($event)"
 | 
			
		||||
    [max]="20" placeholder="e.g. 1025~65535"></p-chips>
 | 
			
		||||
  <p-footer>
 | 
			
		||||
    <button type="button" pButton icon="fa-check" (click)="portExcludeDisplay=false" label="Done"></button>
 | 
			
		||||
  </p-footer>
 | 
			
		||||
</p-dialog>
 | 
			
		||||
@ -40,6 +40,8 @@ export class SearchConfigComponent implements OnChanges {
 | 
			
		||||
 | 
			
		||||
  fixedIPrange: number;
 | 
			
		||||
  ipArray = [];
 | 
			
		||||
  portExcludeDisplay = false;
 | 
			
		||||
  portChips = [];
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
  ) {
 | 
			
		||||
@ -113,7 +115,7 @@ export class SearchConfigComponent implements OnChanges {
 | 
			
		||||
        lastScanRange: Number(this.endPort),
 | 
			
		||||
        includeTCP: this.tcpChecked,
 | 
			
		||||
        includeUDP: this.udpChecked,
 | 
			
		||||
        excludePorts: null,
 | 
			
		||||
        excludePorts: this.excludePorts,
 | 
			
		||||
        discoverService: discoverService
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
@ -121,7 +123,8 @@ export class SearchConfigComponent implements OnChanges {
 | 
			
		||||
      discoverHost: {
 | 
			
		||||
        firstScanRangev4: this.startIP,
 | 
			
		||||
        lastScanRangev4: this.endIP,
 | 
			
		||||
        discoverPort: discoverPort
 | 
			
		||||
        discoverPort: discoverPort,
 | 
			
		||||
        excludeHostsv4: this.excludeIPs,
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
@ -249,11 +252,57 @@ export class SearchConfigComponent implements OnChanges {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  onSaveIPExclude() {
 | 
			
		||||
 | 
			
		||||
  onAddExcludePort(event) {
 | 
			
		||||
    const port = event.value.replace(/\s/g, '');
 | 
			
		||||
    if (port.indexOf('~') > 0) { // e.g. 1~3000
 | 
			
		||||
      const splited = port.split('~');
 | 
			
		||||
      this.portChips.pop();
 | 
			
		||||
      const from = Number(splited[0]);
 | 
			
		||||
      const to = Number(splited[1]);
 | 
			
		||||
      if (this.checkInvalidPort(from)
 | 
			
		||||
        || this.checkInvalidPort(to)
 | 
			
		||||
        || !Number.isInteger(from)
 | 
			
		||||
        || !Number.isInteger(to)) {
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      const chipItem = 'All ' + from + ' ~ ' + to;
 | 
			
		||||
      this.portChips.push(chipItem);
 | 
			
		||||
      for (let i = from; i <= to; i++) {
 | 
			
		||||
        this.excludePorts.push(String(i));
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      const num = Number(event.value);
 | 
			
		||||
      if (!Number.isInteger(num) || this.checkInvalidPort(num) || this.checkExistExcludePort(event.value)) {
 | 
			
		||||
        this.portChips.pop();
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
      this.excludePorts.push(event.value);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  onSavePortExclude() {
 | 
			
		||||
 | 
			
		||||
  onRemoveExcludePort(event) {
 | 
			
		||||
    if (event.value.indexOf('~') > 0) {
 | 
			
		||||
      // e.g. 'All 1 ~ 30'
 | 
			
		||||
      const splited = event.value.replace(/\s/g, '').replace('All', '').split('~');
 | 
			
		||||
      for (let i = Number(splited[0]); i <= Number(splited[1]); i++) {
 | 
			
		||||
        console.log(String(i));
 | 
			
		||||
        const index = this.excludePorts.indexOf(String(i));
 | 
			
		||||
        this.excludePorts.splice(index, 1);
 | 
			
		||||
      }
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    const idx = this.excludePorts.indexOf(event.value);
 | 
			
		||||
    this.excludePorts.splice(idx, 1);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  checkExistExcludePort(portNum) {
 | 
			
		||||
    return this.excludePorts.find((value) => {
 | 
			
		||||
      return value === portNum;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  checkInvalidPort(port) {
 | 
			
		||||
    return port <= 0 || port > 65535;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
<div class="ui-g">
 | 
			
		||||
    <p-button label="Stop" (click)="onStop()"></p-button>
 | 
			
		||||
    <button class="ui-button-danger ui-button-width-fit" type="button" 
 | 
			
		||||
    label="Stop" icon="ui-icon-close" pButton (click)="onStop()" [disabled]="!started"></button>
 | 
			
		||||
 | 
			
		||||
    <div *ngFor="let data of tempData" class="ui-g-12 ui-md-12" @discoveryResultAnim>
 | 
			
		||||
        <p-button label="TEST" icon="fa fa-check" iconPos="left"></p-button>
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@ import { SearchConfigComponent } from './discovery/search-config.component';
 | 
			
		||||
import { SearchFilterComponent } from './discovery/search-filter.component';
 | 
			
		||||
import { SearchResultComponent } from './discovery/search-result.component';
 | 
			
		||||
import { IpInputComponent } from './discovery/ip-input.component';
 | 
			
		||||
import { RequestSummaryComponent } from './discovery/request-summary.component';
 | 
			
		||||
 | 
			
		||||
export const COMPONENTS = [
 | 
			
		||||
  ServiceSelectorComponent,
 | 
			
		||||
@ -12,4 +13,5 @@ export const COMPONENTS = [
 | 
			
		||||
  SearchFilterComponent,
 | 
			
		||||
  SearchResultComponent,
 | 
			
		||||
  IpInputComponent,
 | 
			
		||||
  RequestSummaryComponent,
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,14 @@
 | 
			
		||||
<div *ngIf="probeHost">
 | 
			
		||||
  <of-key-value [key]="'CIDR'" [value]="probeHost.probe.cidr"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'Description'" [value]="probeHost.probe.description"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'Key'" [value]="probeHost.probe.probeKey"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'Authrozied at'" [value]="probeHost.probe.authorizeDate | date: 'dd/MM/yyyy'"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'Authrozied by'" [value]="probeHost.probe.authorizeMember.name"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'IPv4'" [value]="probeHost.host.ipv4"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'IPv6'" [value]="probeHost.host.ipv6 | uppercase"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'Mac Address'" [value]="probeHost.host.mac"></of-key-value>
 | 
			
		||||
  <of-key-value [key]="'OS'" [value]="probeHost.host.os.vendor.name"></of-key-value>
 | 
			
		||||
</div>
 | 
			
		||||
<div *ngIf="probeHost" class="ui-g">
 | 
			
		||||
  <div class="ui-g-12 ui-md-4 ui-nopad ui-key-value">
 | 
			
		||||
    <of-key-value [key]="'Status'" [value]="connectionStatus"></of-key-value>
 | 
			
		||||
    <of-key-value [key]="'CIDR'" [value]="probeHost.probe.cidr"></of-key-value>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="ui-g-12 ui-md-4 ui-nopad ui-key-value">
 | 
			
		||||
    <of-key-value [key]="'Name'" [value]="probeHost.probe.displayName"></of-key-value>
 | 
			
		||||
    <of-key-value [key]="'OS'" [value]="probeHost.host.os.vendor.name"></of-key-value>
 | 
			
		||||
  </div>
 | 
			
		||||
  <div class="ui-g-12 ui-md-4 ui-nopad ui-key-value">
 | 
			
		||||
      <of-key-value [key]="'IPv4'" [value]="probeHost.host.ipv4"></of-key-value>
 | 
			
		||||
      <of-key-value [key]="'Mac Address'" [value]="probeHost.host.mac"></of-key-value>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
@ -1,15 +1,20 @@
 | 
			
		||||
import { Component, Input } from '@angular/core';
 | 
			
		||||
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
 | 
			
		||||
import { Probe, ProbeHost } from '@overflow/commons-typescript/model/probe';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'of-probe-summary',
 | 
			
		||||
  templateUrl: './summary.component.html',
 | 
			
		||||
})
 | 
			
		||||
export class ProbeSummaryComponent  {
 | 
			
		||||
export class ProbeSummaryComponent implements OnChanges {
 | 
			
		||||
 | 
			
		||||
  @Input() probeHost: ProbeHost;
 | 
			
		||||
  connectionStatus: string;
 | 
			
		||||
 | 
			
		||||
  constructor() {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnChanges(changes: SimpleChanges): void {
 | 
			
		||||
    this.connectionStatus = this.probeHost.probe.connectDate ? 'Connected' : 'Not connected';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user