Permission management, create add permission component and apiInformation service, which parse swagger api information schema

This commit is contained in:
Sylvain MATHIEU 2022-01-13 09:41:02 +01:00
parent 2664911455
commit 65f1d45dc5
14 changed files with 772 additions and 376 deletions

View File

@ -1,293 +1,293 @@
/* tslint:disable */
/* tslint:disable:max-line-length */
import { DragDropModule } from '@angular/cdk/drag-drop';
import { OverlayModule } from '@angular/cdk/overlay';
import { CdkTableModule } from '@angular/cdk/table';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { ErrorHandler, NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatSidenavModule } from '@angular/material/sidenav';
import { BrowserModule, Title } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { DragAndDropModule } from 'angular-draggable-droppable';
import { ResizableModule } from 'angular-resizable-element';
import { D3Service } from 'd3-ng2-service';
import { NgCircleProgressModule } from 'ng-circle-progress';
import { FileUploadModule } from 'ng2-file-upload';
import { NgxChildProcessModule } from 'ngx-childprocess';
import { NgxElectronModule } from 'ngx-electron';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { CartographyModule } from './cartography/cartography.module';
import { DrawingsDataSource } from './cartography/datasources/drawings-datasource';
import { LinksDataSource } from './cartography/datasources/links-datasource';
import { NodesDataSource } from './cartography/datasources/nodes-datasource';
import { SymbolsDataSource } from './cartography/datasources/symbols-datasource';
import { InRectangleHelper } from './cartography/helpers/in-rectangle-helper';
import { SelectionManager } from './cartography/managers/selection-manager';
import { ToasterErrorHandler } from './common/error-handlers/toaster-error-handler';
import { ProgressDialogComponent } from './common/progress-dialog/progress-dialog.component';
import { ProgressDialogService } from './common/progress-dialog/progress-dialog.service';
import { ProgressComponent } from './common/progress/progress.component';
import { ProgressService } from './common/progress/progress.service';
import { AdbutlerComponent } from './components/adbutler/adbutler.component';
import { BundledServerFinderComponent } from './components/bundled-server-finder/bundled-server-finder.component';
import { InformationDialogComponent } from './components/dialogs/information-dialog.component';
import { DirectLinkComponent } from './components/direct-link/direct-link.component';
import { DrawingAddedComponent } from './components/drawings-listeners/drawing-added/drawing-added.component';
import { DrawingDraggedComponent } from './components/drawings-listeners/drawing-dragged/drawing-dragged.component';
import { DrawingResizedComponent } from './components/drawings-listeners/drawing-resized/drawing-resized.component';
import { InterfaceLabelDraggedComponent } from './components/drawings-listeners/interface-label-dragged/interface-label-dragged.component';
import { LinkCreatedComponent } from './components/drawings-listeners/link-created/link-created.component';
import { NodeDraggedComponent } from './components/drawings-listeners/node-dragged/node-dragged.component';
import { NodeLabelDraggedComponent } from './components/drawings-listeners/node-label-dragged/node-label-dragged.component';
import { TextAddedComponent } from './components/drawings-listeners/text-added/text-added.component';
import { TextEditedComponent } from './components/drawings-listeners/text-edited/text-edited.component';
import { HelpComponent } from './components/help/help.component';
import { InstallSoftwareComponent } from './components/installed-software/install-software/install-software.component';
import { InstalledSoftwareComponent } from './components/installed-software/installed-software.component';
import { PageNotFoundComponent } from './components/page-not-found/page-not-found.component';
import { BuiltInPreferencesComponent } from './components/preferences/built-in/built-in-preferences.component';
import { CloudNodesAddTemplateComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import { CloudNodesTemplateDetailsComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import { CloudNodesTemplatesComponent } from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import { EthernetHubsAddTemplateComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import { EthernetHubsTemplateDetailsComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import { EthernetHubsTemplatesComponent } from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import { EthernetSwitchesAddTemplateComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import { EthernetSwitchesTemplateDetailsComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import { EthernetSwitchesTemplatesComponent } from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import { CustomAdaptersTableComponent } from './components/preferences/common/custom-adapters-table/custom-adapters-table.component';
import { CustomAdaptersComponent } from './components/preferences/common/custom-adapters/custom-adapters.component';
import { DeleteConfirmationDialogComponent } from './components/preferences/common/delete-confirmation-dialog/delete-confirmation-dialog.component';
import { DeleteTemplateComponent } from './components/preferences/common/delete-template-component/delete-template.component';
import { EmptyTemplatesListComponent } from './components/preferences/common/empty-templates-list/empty-templates-list.component';
import { PortsComponent } from './components/preferences/common/ports/ports.component';
import { SymbolsMenuComponent } from './components/preferences/common/symbols-menu/symbols-menu.component';
import { SymbolsComponent } from './components/preferences/common/symbols/symbols.component';
import { UdpTunnelsComponent } from './components/preferences/common/udp-tunnels/udp-tunnels.component';
import { AddDockerTemplateComponent } from './components/preferences/docker/add-docker-template/add-docker-template.component';
import { CopyDockerTemplateComponent } from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import { DockerTemplateDetailsComponent } from './components/preferences/docker/docker-template-details/docker-template-details.component';
import { DockerTemplatesComponent } from './components/preferences/docker/docker-templates/docker-templates.component';
import { AddIosTemplateComponent } from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import { CopyIosTemplateComponent } from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import { DynamipsPreferencesComponent } from './components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import { IosTemplateDetailsComponent } from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import { IosTemplatesComponent } from './components/preferences/dynamips/ios-templates/ios-templates.component';
import { GeneralPreferencesComponent } from './components/preferences/general/general-preferences.component';
import { AddIouTemplateComponent } from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import { CopyIouTemplateComponent } from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import { IouTemplateDetailsComponent } from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import { IouTemplatesComponent } from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import { PreferencesComponent } from './components/preferences/preferences.component';
import { AddQemuVmTemplateComponent } from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import { CopyQemuVmTemplateComponent } from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import { QemuPreferencesComponent } from './components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import { QemuVmTemplateDetailsComponent } from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import { QemuVmTemplatesComponent } from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import { AddVirtualBoxTemplateComponent } from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import { VirtualBoxPreferencesComponent } from './components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import { VirtualBoxTemplateDetailsComponent } from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import { VirtualBoxTemplatesComponent } from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import { AddVmwareTemplateComponent } from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import { VmwarePreferencesComponent } from './components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import { VmwareTemplateDetailsComponent } from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import { VmwareTemplatesComponent } from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import { AddVpcsTemplateComponent } from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import { VpcsPreferencesComponent } from './components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import { VpcsTemplateDetailsComponent } from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import { VpcsTemplatesComponent } from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import { ChangeHostnameDialogComponent } from './components/project-map/change-hostname-dialog/change-hostname-dialog.component';
import { ChangeSymbolDialogComponent } from './components/project-map/change-symbol-dialog/change-symbol-dialog.component';
import { ConsoleWrapperComponent } from './components/project-map/console-wrapper/console-wrapper.component';
import { ContextConsoleMenuComponent } from './components/project-map/context-console-menu/context-console-menu.component';
import { AlignHorizontallyActionComponent } from './components/project-map/context-menu/actions/align-horizontally/align-horizontally.component';
import { AlignVerticallyActionComponent } from './components/project-map/context-menu/actions/align_vertically/align-vertically.component';
import { BringToFrontActionComponent } from './components/project-map/context-menu/actions/bring-to-front-action/bring-to-front-action.component';
import { ChangeHostnameActionComponent } from './components/project-map/context-menu/actions/change-hostname/change-hostname-action.component';
import { ChangeSymbolActionComponent } from './components/project-map/context-menu/actions/change-symbol/change-symbol-action.component';
import { ConfigActionComponent } from './components/project-map/context-menu/actions/config-action/config-action.component';
import { ConsoleDeviceActionBrowserComponent } from './components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component';
import { ConsoleDeviceActionComponent } from './components/project-map/context-menu/actions/console-device-action/console-device-action.component';
import { DeleteActionComponent } from './components/project-map/context-menu/actions/delete-action/delete-action.component';
import { DuplicateActionComponent } from './components/project-map/context-menu/actions/duplicate-action/duplicate-action.component';
import { EditConfigActionComponent } from './components/project-map/context-menu/actions/edit-config/edit-config-action.component';
import { EditStyleActionComponent } from './components/project-map/context-menu/actions/edit-style-action/edit-style-action.component';
import { EditTextActionComponent } from './components/project-map/context-menu/actions/edit-text-action/edit-text-action.component';
import { ExportConfigActionComponent } from './components/project-map/context-menu/actions/export-config/export-config-action.component';
import { HttpConsoleNewTabActionComponent } from './components/project-map/context-menu/actions/http-console-new-tab/http-console-new-tab-action.component';
import { HttpConsoleActionComponent } from './components/project-map/context-menu/actions/http-console/http-console-action.component';
import { ImportConfigActionComponent } from './components/project-map/context-menu/actions/import-config/import-config-action.component';
import { LockActionComponent } from './components/project-map/context-menu/actions/lock-action/lock-action.component';
import { MoveLayerDownActionComponent } from './components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component';
import { MoveLayerUpActionComponent } from './components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component';
import { OpenFileExplorerActionComponent } from './components/project-map/context-menu/actions/open-file-explorer/open-file-explorer-action.component';
import { PacketFiltersActionComponent } from './components/project-map/context-menu/actions/packet-filters-action/packet-filters-action.component';
import { ReloadNodeActionComponent } from './components/project-map/context-menu/actions/reload-node-action/reload-node-action.component';
import { ResumeLinkActionComponent } from './components/project-map/context-menu/actions/resume-link-action/resume-link-action.component';
import { ShowNodeActionComponent } from './components/project-map/context-menu/actions/show-node-action/show-node-action.component';
import { StartCaptureOnStartedLinkActionComponent } from './components/project-map/context-menu/actions/start-capture-on-started-link/start-capture-on-started-link.component';
import { StartCaptureActionComponent } from './components/project-map/context-menu/actions/start-capture/start-capture-action.component';
import { StartNodeActionComponent } from './components/project-map/context-menu/actions/start-node-action/start-node-action.component';
import { StopCaptureActionComponent } from './components/project-map/context-menu/actions/stop-capture/stop-capture-action.component';
import { IsolateNodeActionComponent } from './components/project-map/context-menu/actions/isolate-node-action/isolate-node-action.component';
import {DragDropModule} from '@angular/cdk/drag-drop';
import {OverlayModule} from '@angular/cdk/overlay';
import {CdkTableModule} from '@angular/cdk/table';
import {HttpClientModule, HTTP_INTERCEPTORS} from '@angular/common/http';
import {ErrorHandler, NgModule} from '@angular/core';
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
import {MatSidenavModule} from '@angular/material/sidenav';
import {BrowserModule, Title} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {DragAndDropModule} from 'angular-draggable-droppable';
import {ResizableModule} from 'angular-resizable-element';
import {D3Service} from 'd3-ng2-service';
import {NgCircleProgressModule} from 'ng-circle-progress';
import {FileUploadModule} from 'ng2-file-upload';
import {NgxChildProcessModule} from 'ngx-childprocess';
import {NgxElectronModule} from 'ngx-electron';
import {AppRoutingModule} from './app-routing.module';
import {AppComponent} from './app.component';
import {CartographyModule} from './cartography/cartography.module';
import {DrawingsDataSource} from './cartography/datasources/drawings-datasource';
import {LinksDataSource} from './cartography/datasources/links-datasource';
import {NodesDataSource} from './cartography/datasources/nodes-datasource';
import {SymbolsDataSource} from './cartography/datasources/symbols-datasource';
import {InRectangleHelper} from './cartography/helpers/in-rectangle-helper';
import {SelectionManager} from './cartography/managers/selection-manager';
import {ToasterErrorHandler} from './common/error-handlers/toaster-error-handler';
import {ProgressDialogComponent} from './common/progress-dialog/progress-dialog.component';
import {ProgressDialogService} from './common/progress-dialog/progress-dialog.service';
import {ProgressComponent} from './common/progress/progress.component';
import {ProgressService} from './common/progress/progress.service';
import {AdbutlerComponent} from './components/adbutler/adbutler.component';
import {BundledServerFinderComponent} from './components/bundled-server-finder/bundled-server-finder.component';
import {InformationDialogComponent} from './components/dialogs/information-dialog.component';
import {DirectLinkComponent} from './components/direct-link/direct-link.component';
import {DrawingAddedComponent} from './components/drawings-listeners/drawing-added/drawing-added.component';
import {DrawingDraggedComponent} from './components/drawings-listeners/drawing-dragged/drawing-dragged.component';
import {DrawingResizedComponent} from './components/drawings-listeners/drawing-resized/drawing-resized.component';
import {InterfaceLabelDraggedComponent} from './components/drawings-listeners/interface-label-dragged/interface-label-dragged.component';
import {LinkCreatedComponent} from './components/drawings-listeners/link-created/link-created.component';
import {NodeDraggedComponent} from './components/drawings-listeners/node-dragged/node-dragged.component';
import {NodeLabelDraggedComponent} from './components/drawings-listeners/node-label-dragged/node-label-dragged.component';
import {TextAddedComponent} from './components/drawings-listeners/text-added/text-added.component';
import {TextEditedComponent} from './components/drawings-listeners/text-edited/text-edited.component';
import {HelpComponent} from './components/help/help.component';
import {InstallSoftwareComponent} from './components/installed-software/install-software/install-software.component';
import {InstalledSoftwareComponent} from './components/installed-software/installed-software.component';
import {PageNotFoundComponent} from './components/page-not-found/page-not-found.component';
import {BuiltInPreferencesComponent} from './components/preferences/built-in/built-in-preferences.component';
import {CloudNodesAddTemplateComponent} from './components/preferences/built-in/cloud-nodes/cloud-nodes-add-template/cloud-nodes-add-template.component';
import {CloudNodesTemplateDetailsComponent} from './components/preferences/built-in/cloud-nodes/cloud-nodes-template-details/cloud-nodes-template-details.component';
import {CloudNodesTemplatesComponent} from './components/preferences/built-in/cloud-nodes/cloud-nodes-templates/cloud-nodes-templates.component';
import {EthernetHubsAddTemplateComponent} from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-add-template/ethernet-hubs-add-template.component';
import {EthernetHubsTemplateDetailsComponent} from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-template-details/ethernet-hubs-template-details.component';
import {EthernetHubsTemplatesComponent} from './components/preferences/built-in/ethernet-hubs/ethernet-hubs-templates/ethernet-hubs-templates.component';
import {EthernetSwitchesAddTemplateComponent} from './components/preferences/built-in/ethernet-switches/ethernet-switches-add-template/ethernet-switches-add-template.component';
import {EthernetSwitchesTemplateDetailsComponent} from './components/preferences/built-in/ethernet-switches/ethernet-switches-template-details/ethernet-switches-template-details.component';
import {EthernetSwitchesTemplatesComponent} from './components/preferences/built-in/ethernet-switches/ethernet-switches-templates/ethernet-switches-templates.component';
import {CustomAdaptersTableComponent} from './components/preferences/common/custom-adapters-table/custom-adapters-table.component';
import {CustomAdaptersComponent} from './components/preferences/common/custom-adapters/custom-adapters.component';
import {DeleteConfirmationDialogComponent} from './components/preferences/common/delete-confirmation-dialog/delete-confirmation-dialog.component';
import {DeleteTemplateComponent} from './components/preferences/common/delete-template-component/delete-template.component';
import {EmptyTemplatesListComponent} from './components/preferences/common/empty-templates-list/empty-templates-list.component';
import {PortsComponent} from './components/preferences/common/ports/ports.component';
import {SymbolsMenuComponent} from './components/preferences/common/symbols-menu/symbols-menu.component';
import {SymbolsComponent} from './components/preferences/common/symbols/symbols.component';
import {UdpTunnelsComponent} from './components/preferences/common/udp-tunnels/udp-tunnels.component';
import {AddDockerTemplateComponent} from './components/preferences/docker/add-docker-template/add-docker-template.component';
import {CopyDockerTemplateComponent} from './components/preferences/docker/copy-docker-template/copy-docker-template.component';
import {DockerTemplateDetailsComponent} from './components/preferences/docker/docker-template-details/docker-template-details.component';
import {DockerTemplatesComponent} from './components/preferences/docker/docker-templates/docker-templates.component';
import {AddIosTemplateComponent} from './components/preferences/dynamips/add-ios-template/add-ios-template.component';
import {CopyIosTemplateComponent} from './components/preferences/dynamips/copy-ios-template/copy-ios-template.component';
import {DynamipsPreferencesComponent} from './components/preferences/dynamips/dynamips-preferences/dynamips-preferences.component';
import {IosTemplateDetailsComponent} from './components/preferences/dynamips/ios-template-details/ios-template-details.component';
import {IosTemplatesComponent} from './components/preferences/dynamips/ios-templates/ios-templates.component';
import {GeneralPreferencesComponent} from './components/preferences/general/general-preferences.component';
import {AddIouTemplateComponent} from './components/preferences/ios-on-unix/add-iou-template/add-iou-template.component';
import {CopyIouTemplateComponent} from './components/preferences/ios-on-unix/copy-iou-template/copy-iou-template.component';
import {IouTemplateDetailsComponent} from './components/preferences/ios-on-unix/iou-template-details/iou-template-details.component';
import {IouTemplatesComponent} from './components/preferences/ios-on-unix/iou-templates/iou-templates.component';
import {PreferencesComponent} from './components/preferences/preferences.component';
import {AddQemuVmTemplateComponent} from './components/preferences/qemu/add-qemu-vm-template/add-qemu-vm-template.component';
import {CopyQemuVmTemplateComponent} from './components/preferences/qemu/copy-qemu-vm-template/copy-qemu-vm-template.component';
import {QemuPreferencesComponent} from './components/preferences/qemu/qemu-preferences/qemu-preferences.component';
import {QemuVmTemplateDetailsComponent} from './components/preferences/qemu/qemu-vm-template-details/qemu-vm-template-details.component';
import {QemuVmTemplatesComponent} from './components/preferences/qemu/qemu-vm-templates/qemu-vm-templates.component';
import {AddVirtualBoxTemplateComponent} from './components/preferences/virtual-box/add-virtual-box-template/add-virtual-box-template.component';
import {VirtualBoxPreferencesComponent} from './components/preferences/virtual-box/virtual-box-preferences/virtual-box-preferences.component';
import {VirtualBoxTemplateDetailsComponent} from './components/preferences/virtual-box/virtual-box-template-details/virtual-box-template-details.component';
import {VirtualBoxTemplatesComponent} from './components/preferences/virtual-box/virtual-box-templates/virtual-box-templates.component';
import {AddVmwareTemplateComponent} from './components/preferences/vmware/add-vmware-template/add-vmware-template.component';
import {VmwarePreferencesComponent} from './components/preferences/vmware/vmware-preferences/vmware-preferences.component';
import {VmwareTemplateDetailsComponent} from './components/preferences/vmware/vmware-template-details/vmware-template-details.component';
import {VmwareTemplatesComponent} from './components/preferences/vmware/vmware-templates/vmware-templates.component';
import {AddVpcsTemplateComponent} from './components/preferences/vpcs/add-vpcs-template/add-vpcs-template.component';
import {VpcsPreferencesComponent} from './components/preferences/vpcs/vpcs-preferences/vpcs-preferences.component';
import {VpcsTemplateDetailsComponent} from './components/preferences/vpcs/vpcs-template-details/vpcs-template-details.component';
import {VpcsTemplatesComponent} from './components/preferences/vpcs/vpcs-templates/vpcs-templates.component';
import {ChangeHostnameDialogComponent} from './components/project-map/change-hostname-dialog/change-hostname-dialog.component';
import {ChangeSymbolDialogComponent} from './components/project-map/change-symbol-dialog/change-symbol-dialog.component';
import {ConsoleWrapperComponent} from './components/project-map/console-wrapper/console-wrapper.component';
import {ContextConsoleMenuComponent} from './components/project-map/context-console-menu/context-console-menu.component';
import {AlignHorizontallyActionComponent} from './components/project-map/context-menu/actions/align-horizontally/align-horizontally.component';
import {AlignVerticallyActionComponent} from './components/project-map/context-menu/actions/align_vertically/align-vertically.component';
import {BringToFrontActionComponent} from './components/project-map/context-menu/actions/bring-to-front-action/bring-to-front-action.component';
import {ChangeHostnameActionComponent} from './components/project-map/context-menu/actions/change-hostname/change-hostname-action.component';
import {ChangeSymbolActionComponent} from './components/project-map/context-menu/actions/change-symbol/change-symbol-action.component';
import {ConfigActionComponent} from './components/project-map/context-menu/actions/config-action/config-action.component';
import {ConsoleDeviceActionBrowserComponent} from './components/project-map/context-menu/actions/console-device-action-browser/console-device-action-browser.component';
import {ConsoleDeviceActionComponent} from './components/project-map/context-menu/actions/console-device-action/console-device-action.component';
import {DeleteActionComponent} from './components/project-map/context-menu/actions/delete-action/delete-action.component';
import {DuplicateActionComponent} from './components/project-map/context-menu/actions/duplicate-action/duplicate-action.component';
import {EditConfigActionComponent} from './components/project-map/context-menu/actions/edit-config/edit-config-action.component';
import {EditStyleActionComponent} from './components/project-map/context-menu/actions/edit-style-action/edit-style-action.component';
import {EditTextActionComponent} from './components/project-map/context-menu/actions/edit-text-action/edit-text-action.component';
import {ExportConfigActionComponent} from './components/project-map/context-menu/actions/export-config/export-config-action.component';
import {HttpConsoleNewTabActionComponent} from './components/project-map/context-menu/actions/http-console-new-tab/http-console-new-tab-action.component';
import {HttpConsoleActionComponent} from './components/project-map/context-menu/actions/http-console/http-console-action.component';
import {ImportConfigActionComponent} from './components/project-map/context-menu/actions/import-config/import-config-action.component';
import {LockActionComponent} from './components/project-map/context-menu/actions/lock-action/lock-action.component';
import {MoveLayerDownActionComponent} from './components/project-map/context-menu/actions/move-layer-down-action/move-layer-down-action.component';
import {MoveLayerUpActionComponent} from './components/project-map/context-menu/actions/move-layer-up-action/move-layer-up-action.component';
import {OpenFileExplorerActionComponent} from './components/project-map/context-menu/actions/open-file-explorer/open-file-explorer-action.component';
import {PacketFiltersActionComponent} from './components/project-map/context-menu/actions/packet-filters-action/packet-filters-action.component';
import {ReloadNodeActionComponent} from './components/project-map/context-menu/actions/reload-node-action/reload-node-action.component';
import {ResumeLinkActionComponent} from './components/project-map/context-menu/actions/resume-link-action/resume-link-action.component';
import {ShowNodeActionComponent} from './components/project-map/context-menu/actions/show-node-action/show-node-action.component';
import {StartCaptureOnStartedLinkActionComponent} from './components/project-map/context-menu/actions/start-capture-on-started-link/start-capture-on-started-link.component';
import {StartCaptureActionComponent} from './components/project-map/context-menu/actions/start-capture/start-capture-action.component';
import {StartNodeActionComponent} from './components/project-map/context-menu/actions/start-node-action/start-node-action.component';
import {StopCaptureActionComponent} from './components/project-map/context-menu/actions/stop-capture/stop-capture-action.component';
import {IsolateNodeActionComponent } from './components/project-map/context-menu/actions/isolate-node-action/isolate-node-action.component';
import { UnisolateNodeActionComponent } from './components/project-map/context-menu/actions/unisolate-node-action/unisolate-node-action.component';
import { StopNodeActionComponent } from './components/project-map/context-menu/actions/stop-node-action/stop-node-action.component';
import { SuspendLinkActionComponent } from './components/project-map/context-menu/actions/suspend-link/suspend-link-action.component';
import { SuspendNodeActionComponent } from './components/project-map/context-menu/actions/suspend-node-action/suspend-node-action.component';
import { ContextMenuComponent } from './components/project-map/context-menu/context-menu.component';
import { ConfigDialogComponent } from './components/project-map/context-menu/dialogs/config-dialog/config-dialog.component';
import { DrawLinkToolComponent } from './components/project-map/draw-link-tool/draw-link-tool.component';
import { StyleEditorDialogComponent } from './components/project-map/drawings-editors/style-editor/style-editor.component';
import { TextEditorDialogComponent } from './components/project-map/drawings-editors/text-editor/text-editor.component';
import { HelpDialogComponent } from './components/project-map/help-dialog/help-dialog.component';
import { NodeCreatedLabelStylesFixer } from './components/project-map/helpers/node-created-label-styles-fixer';
import { ImportApplianceComponent } from './components/project-map/import-appliance/import-appliance.component';
import { InfoDialogComponent } from './components/project-map/info-dialog/info-dialog.component';
import { LogConsoleComponent } from './components/project-map/log-console/log-console.component';
import { LogEventsDataSource } from './components/project-map/log-console/log-events-datasource';
import { ApplianceInfoDialogComponent } from './components/project-map/new-template-dialog/appliance-info-dialog/appliance-info-dialog.component';
import { NewTemplateDialogComponent } from './components/project-map/new-template-dialog/new-template-dialog.component';
import { TemplateNameDialogComponent } from './components/project-map/new-template-dialog/template-name-dialog/template-name-dialog.component';
import { ConfigEditorDialogComponent } from './components/project-map/node-editors/config-editor/config-editor.component';
import { ConfiguratorDialogAtmSwitchComponent } from './components/project-map/node-editors/configurator/atm_switch/configurator-atm-switch.component';
import { ConfiguratorDialogCloudComponent } from './components/project-map/node-editors/configurator/cloud/configurator-cloud.component';
import { ConfiguratorDialogDockerComponent } from './components/project-map/node-editors/configurator/docker/configurator-docker.component';
import { ConfigureCustomAdaptersDialogComponent } from './components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component';
import { EditNetworkConfigurationDialogComponent } from './components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component';
import { ConfiguratorDialogEthernetSwitchComponent } from './components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component';
import { ConfiguratorDialogEthernetHubComponent } from './components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component';
import { ConfiguratorDialogIosComponent } from './components/project-map/node-editors/configurator/ios/configurator-ios.component';
import { ConfiguratorDialogIouComponent } from './components/project-map/node-editors/configurator/iou/configurator-iou.component';
import { ConfiguratorDialogNatComponent } from './components/project-map/node-editors/configurator/nat/configurator-nat.component';
import { ConfiguratorDialogQemuComponent } from './components/project-map/node-editors/configurator/qemu/configurator-qemu.component';
import { QemuImageCreatorComponent } from './components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component';
import { ConfiguratorDialogSwitchComponent } from './components/project-map/node-editors/configurator/switch/configurator-switch.component';
import { ConfiguratorDialogVirtualBoxComponent } from './components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component';
import { ConfiguratorDialogVmwareComponent } from './components/project-map/node-editors/configurator/vmware/configurator-vmware.component';
import { ConfiguratorDialogVpcsComponent } from './components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component';
import { NodeSelectInterfaceComponent } from './components/project-map/node-select-interface/node-select-interface.component';
import { NodesMenuComponent } from './components/project-map/nodes-menu/nodes-menu.component';
import { PacketFiltersDialogComponent } from './components/project-map/packet-capturing/packet-filters/packet-filters.component';
import { StartCaptureDialogComponent } from './components/project-map/packet-capturing/start-capture/start-capture.component';
import { ProjectMapMenuComponent } from './components/project-map/project-map-menu/project-map-menu.component';
import { ProjectMapComponent } from './components/project-map/project-map.component';
import { ProjectReadmeComponent } from './components/project-map/project-readme/project-readme.component';
import { ScreenshotDialogComponent } from './components/project-map/screenshot-dialog/screenshot-dialog.component';
import { WebConsoleComponent } from './components/project-map/web-console/web-console.component';
import { AddBlankProjectDialogComponent } from './components/projects/add-blank-project-dialog/add-blank-project-dialog.component';
import { ChooseNameDialogComponent } from './components/projects/choose-name-dialog/choose-name-dialog.component';
import { ConfirmationBottomSheetComponent } from './components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import { ConfirmationDialogComponent } from './components/projects/confirmation-dialog/confirmation-dialog.component';
import { EditProjectDialogComponent } from './components/projects/edit-project-dialog/edit-project-dialog.component';
import { ReadmeEditorComponent } from './components/projects/edit-project-dialog/readme-editor/readme-editor.component';
import { ImportProjectDialogComponent } from './components/projects/import-project-dialog/import-project-dialog.component';
import { ProjectNameValidator } from './components/projects/models/projectNameValidator';
import { NavigationDialogComponent } from './components/projects/navigation-dialog/navigation-dialog.component';
import { ProjectsComponent } from './components/projects/projects.component';
import { SaveProjectDialogComponent } from './components/projects/save-project-dialog/save-project-dialog.component';
import { AddServerDialogComponent } from './components/servers/add-server-dialog/add-server-dialog.component';
import { ServerDiscoveryComponent } from './components/servers/server-discovery/server-discovery.component';
import { ServersComponent } from './components/servers/servers.component';
import { ConsoleComponent } from './components/settings/console/console.component';
import { SettingsComponent } from './components/settings/settings.component';
import { CreateSnapshotDialogComponent } from './components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component';
import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import { SnapshotMenuItemComponent } from './components/snapshots/snapshot-menu-item/snapshot-menu-item.component';
import { StatusChartComponent } from './components/system-status/status-chart/status-chart.component';
import { StatusInfoComponent } from './components/system-status/status-info/status-info.component';
import { SystemStatusComponent } from './components/system-status/system-status.component';
import { TemplateListDialogComponent } from './components/template/template-list-dialog/template-list-dialog.component';
import { TemplateComponent } from './components/template/template.component';
import { TopologySummaryComponent } from './components/topology-summary/topology-summary.component';
import { WebConsoleFullWindowComponent } from './components/web-console-full-window/web-console-full-window.component';
import { DataSourceFilter } from './filters/dataSourceFilter';
import { AuthImageFilter } from './filters/authImageFilter';
import { DateFilter } from './filters/dateFilter.pipe';
import { NameFilter } from './filters/nameFilter.pipe';
import { ProjectsFilter } from './filters/projectsFilter.pipe';
import { SearchFilter } from './filters/searchFilter.pipe';
import { TemplateFilter } from './filters/templateFilter.pipe';
import { ConsoleGuard } from './guards/console-guard';
import { LoginGuard } from './guards/login-guard';
import { ProjectWebServiceHandler } from './handlers/project-web-service-handler';
import { DefaultLayoutComponent } from './layouts/default-layout/default-layout.component';
import { MATERIAL_IMPORTS } from './material.imports';
import { ServerResolve } from './resolvers/server-resolve';
import { ApplianceService } from './services/appliances.service';
import { BuiltInTemplatesConfigurationService } from './services/built-in-templates-configuration.service';
import { BuiltInTemplatesService } from './services/built-in-templates.service';
import { ComputeService } from './services/compute.service';
import { DockerConfigurationService } from './services/docker-configuration.service';
import { DockerService } from './services/docker.service';
import { DrawingService } from './services/drawing.service';
import { ExternalSoftwareDefinitionService } from './services/external-software-definition.service';
import { GoogleAnalyticsService } from './services/google-analytics.service';
import { HttpServer, ServerErrorHandler } from './services/http-server.service';
import { InfoService } from './services/info.service';
import { InstalledSoftwareService } from './services/installed-software.service';
import { IosConfigurationService } from './services/ios-configuration.service';
import { IosService } from './services/ios.service';
import { IouConfigurationService } from './services/iou-configuration.service';
import { IouService } from './services/iou.service';
import { LinkService } from './services/link.service';
import { MapScaleService } from './services/mapScale.service';
import { MapSettingsService } from './services/mapsettings.service';
import { NodeService } from './services/node.service';
import { NodeConsoleService } from './services/nodeConsole.service';
import { NotificationService } from './services/notification.service';
import { PacketCaptureService } from './services/packet-capture.service';
import { PlatformService } from './services/platform.service';
import { ProjectService } from './services/project.service';
import { QemuConfigurationService } from './services/qemu-configuration.service';
import { QemuService } from './services/qemu.service';
import { RecentlyOpenedProjectService } from './services/recentlyOpenedProject.service';
import { ServerManagementService } from './services/server-management.service';
import { ServerSettingsService } from './services/server-settings.service';
import { ServerDatabase } from './services/server.database';
import { ServerService } from './services/server.service';
import { SettingsService } from './services/settings.service';
import { ConsoleService } from './services/settings/console.service';
import { DefaultConsoleService } from './services/settings/default-console.service';
import { SnapshotService } from './services/snapshot.service';
import { SymbolService } from './services/symbol.service';
import { TemplateMocksService } from './services/template-mocks.service';
import { TemplateService } from './services/template.service';
import { ThemeService } from './services/theme.service';
import { ToasterService } from './services/toaster.service';
import { ToolsService } from './services/tools.service';
import { UpdatesService } from './services/updates.service';
import { VersionService } from './services/version.service';
import { VirtualBoxConfigurationService } from './services/virtual-box-configuration.service';
import { VirtualBoxService } from './services/virtual-box.service';
import { VmwareConfigurationService } from './services/vmware-configuration.service';
import { VmwareService } from './services/vmware.service';
import { VpcsConfigurationService } from './services/vpcs-configuration.service';
import { VpcsService } from './services/vpcs.service';
import { NonNegativeValidator } from './validators/non-negative-validator';
import { RotationValidator } from './validators/rotation-validator';
import { MarkedDirective } from './directives/marked.directive';
import { LoginComponent } from './components/login/login.component';
import { LoginService } from './services/login.service';
import { HttpRequestsInterceptor } from './interceptors/http.interceptor';
import { UserManagementComponent } from './components/user-management/user-management.component';
import { UserService } from './services/user.service';
import { LoggedUserComponent } from './components/users/logged-user/logged-user.component';
import { AddUserDialogComponent } from './components/user-management/add-user-dialog/add-user-dialog.component';
import { UserFilterPipe } from './filters/user-filter.pipe';
import { GroupManagementComponent } from './components/group-management/group-management.component';
import { GroupFilterPipe } from './filters/group-filter.pipe';
import { AddGroupDialogComponent } from './components/group-management/add-group-dialog/add-group-dialog.component';
import { DeleteGroupDialogComponent } from './components/group-management/delete-group-dialog/delete-group-dialog.component';
import { DeleteUserDialogComponent } from './components/user-management/delete-user-dialog/delete-user-dialog.component';
import { GroupDetailsComponent } from './components/group-details/group-details.component';
import { UserDetailComponent } from './components/user-management/user-detail/user-detail.component';
import { AddUserToGroupDialogComponent } from './components/group-details/add-user-to-group-dialog/add-user-to-group-dialog.component';
import { RemoveToGroupDialogComponent } from '@components/group-details/remove-to-group-dialog/remove-to-group-dialog.component';
import { PaginatorPipe } from './components/group-details/paginator.pipe';
import { MembersFilterPipe } from './components/group-details/members-filter.pipe';
import { ManagementComponent } from './components/management/management.component';
import {StopNodeActionComponent} from './components/project-map/context-menu/actions/stop-node-action/stop-node-action.component';
import {SuspendLinkActionComponent} from './components/project-map/context-menu/actions/suspend-link/suspend-link-action.component';
import {SuspendNodeActionComponent} from './components/project-map/context-menu/actions/suspend-node-action/suspend-node-action.component';
import {ContextMenuComponent} from './components/project-map/context-menu/context-menu.component';
import {ConfigDialogComponent} from './components/project-map/context-menu/dialogs/config-dialog/config-dialog.component';
import {DrawLinkToolComponent} from './components/project-map/draw-link-tool/draw-link-tool.component';
import {StyleEditorDialogComponent} from './components/project-map/drawings-editors/style-editor/style-editor.component';
import {TextEditorDialogComponent} from './components/project-map/drawings-editors/text-editor/text-editor.component';
import {HelpDialogComponent} from './components/project-map/help-dialog/help-dialog.component';
import {NodeCreatedLabelStylesFixer} from './components/project-map/helpers/node-created-label-styles-fixer';
import {ImportApplianceComponent} from './components/project-map/import-appliance/import-appliance.component';
import {InfoDialogComponent} from './components/project-map/info-dialog/info-dialog.component';
import {LogConsoleComponent} from './components/project-map/log-console/log-console.component';
import {LogEventsDataSource} from './components/project-map/log-console/log-events-datasource';
import {ApplianceInfoDialogComponent} from './components/project-map/new-template-dialog/appliance-info-dialog/appliance-info-dialog.component';
import {NewTemplateDialogComponent} from './components/project-map/new-template-dialog/new-template-dialog.component';
import {TemplateNameDialogComponent} from './components/project-map/new-template-dialog/template-name-dialog/template-name-dialog.component';
import {ConfigEditorDialogComponent} from './components/project-map/node-editors/config-editor/config-editor.component';
import {ConfiguratorDialogAtmSwitchComponent} from './components/project-map/node-editors/configurator/atm_switch/configurator-atm-switch.component';
import {ConfiguratorDialogCloudComponent} from './components/project-map/node-editors/configurator/cloud/configurator-cloud.component';
import {ConfiguratorDialogDockerComponent} from './components/project-map/node-editors/configurator/docker/configurator-docker.component';
import {ConfigureCustomAdaptersDialogComponent} from './components/project-map/node-editors/configurator/docker/configure-custom-adapters/configure-custom-adapters.component';
import {EditNetworkConfigurationDialogComponent} from './components/project-map/node-editors/configurator/docker/edit-network-configuration/edit-network-configuration.component';
import {ConfiguratorDialogEthernetSwitchComponent} from './components/project-map/node-editors/configurator/ethernet-switch/configurator-ethernet-switch.component';
import {ConfiguratorDialogEthernetHubComponent} from './components/project-map/node-editors/configurator/ethernet_hub/configurator-ethernet-hub.component';
import {ConfiguratorDialogIosComponent} from './components/project-map/node-editors/configurator/ios/configurator-ios.component';
import {ConfiguratorDialogIouComponent} from './components/project-map/node-editors/configurator/iou/configurator-iou.component';
import {ConfiguratorDialogNatComponent} from './components/project-map/node-editors/configurator/nat/configurator-nat.component';
import {ConfiguratorDialogQemuComponent} from './components/project-map/node-editors/configurator/qemu/configurator-qemu.component';
import {QemuImageCreatorComponent} from './components/project-map/node-editors/configurator/qemu/qemu-image-creator/qemu-image-creator.component';
import {ConfiguratorDialogSwitchComponent} from './components/project-map/node-editors/configurator/switch/configurator-switch.component';
import {ConfiguratorDialogVirtualBoxComponent} from './components/project-map/node-editors/configurator/virtualbox/configurator-virtualbox.component';
import {ConfiguratorDialogVmwareComponent} from './components/project-map/node-editors/configurator/vmware/configurator-vmware.component';
import {ConfiguratorDialogVpcsComponent} from './components/project-map/node-editors/configurator/vpcs/configurator-vpcs.component';
import {NodeSelectInterfaceComponent} from './components/project-map/node-select-interface/node-select-interface.component';
import {NodesMenuComponent} from './components/project-map/nodes-menu/nodes-menu.component';
import {PacketFiltersDialogComponent} from './components/project-map/packet-capturing/packet-filters/packet-filters.component';
import {StartCaptureDialogComponent} from './components/project-map/packet-capturing/start-capture/start-capture.component';
import {ProjectMapMenuComponent} from './components/project-map/project-map-menu/project-map-menu.component';
import {ProjectMapComponent} from './components/project-map/project-map.component';
import {ProjectReadmeComponent} from './components/project-map/project-readme/project-readme.component';
import {ScreenshotDialogComponent} from './components/project-map/screenshot-dialog/screenshot-dialog.component';
import {WebConsoleComponent} from './components/project-map/web-console/web-console.component';
import {AddBlankProjectDialogComponent} from './components/projects/add-blank-project-dialog/add-blank-project-dialog.component';
import {ChooseNameDialogComponent} from './components/projects/choose-name-dialog/choose-name-dialog.component';
import {ConfirmationBottomSheetComponent} from './components/projects/confirmation-bottomsheet/confirmation-bottomsheet.component';
import {ConfirmationDialogComponent} from './components/projects/confirmation-dialog/confirmation-dialog.component';
import {EditProjectDialogComponent} from './components/projects/edit-project-dialog/edit-project-dialog.component';
import {ReadmeEditorComponent} from './components/projects/edit-project-dialog/readme-editor/readme-editor.component';
import {ImportProjectDialogComponent} from './components/projects/import-project-dialog/import-project-dialog.component';
import {ProjectNameValidator} from './components/projects/models/projectNameValidator';
import {NavigationDialogComponent} from './components/projects/navigation-dialog/navigation-dialog.component';
import {ProjectsComponent} from './components/projects/projects.component';
import {SaveProjectDialogComponent} from './components/projects/save-project-dialog/save-project-dialog.component';
import {AddServerDialogComponent} from './components/servers/add-server-dialog/add-server-dialog.component';
import {ServerDiscoveryComponent} from './components/servers/server-discovery/server-discovery.component';
import {ServersComponent} from './components/servers/servers.component';
import {ConsoleComponent} from './components/settings/console/console.component';
import {SettingsComponent} from './components/settings/settings.component';
import {CreateSnapshotDialogComponent} from './components/snapshots/create-snapshot-dialog/create-snapshot-dialog.component';
import {ListOfSnapshotsComponent} from './components/snapshots/list-of-snapshots/list-of-snapshots.component';
import {SnapshotMenuItemComponent} from './components/snapshots/snapshot-menu-item/snapshot-menu-item.component';
import {StatusChartComponent} from './components/system-status/status-chart/status-chart.component';
import {StatusInfoComponent} from './components/system-status/status-info/status-info.component';
import {SystemStatusComponent} from './components/system-status/system-status.component';
import {TemplateListDialogComponent} from './components/template/template-list-dialog/template-list-dialog.component';
import {TemplateComponent} from './components/template/template.component';
import {TopologySummaryComponent} from './components/topology-summary/topology-summary.component';
import {WebConsoleFullWindowComponent} from './components/web-console-full-window/web-console-full-window.component';
import {DataSourceFilter} from './filters/dataSourceFilter';
import {AuthImageFilter} from './filters/authImageFilter';
import {DateFilter} from './filters/dateFilter.pipe';
import {NameFilter} from './filters/nameFilter.pipe';
import {ProjectsFilter} from './filters/projectsFilter.pipe';
import {SearchFilter} from './filters/searchFilter.pipe';
import {TemplateFilter} from './filters/templateFilter.pipe';
import {ConsoleGuard} from './guards/console-guard';
import {LoginGuard} from './guards/login-guard';
import {ProjectWebServiceHandler} from './handlers/project-web-service-handler';
import {DefaultLayoutComponent} from './layouts/default-layout/default-layout.component';
import {MATERIAL_IMPORTS} from './material.imports';
import {ServerResolve} from './resolvers/server-resolve';
import {ApplianceService} from './services/appliances.service';
import {BuiltInTemplatesConfigurationService} from './services/built-in-templates-configuration.service';
import {BuiltInTemplatesService} from './services/built-in-templates.service';
import {ComputeService} from './services/compute.service';
import {DockerConfigurationService} from './services/docker-configuration.service';
import {DockerService} from './services/docker.service';
import {DrawingService} from './services/drawing.service';
import {ExternalSoftwareDefinitionService} from './services/external-software-definition.service';
import {GoogleAnalyticsService} from './services/google-analytics.service';
import {HttpServer, ServerErrorHandler} from './services/http-server.service';
import {InfoService} from './services/info.service';
import {InstalledSoftwareService} from './services/installed-software.service';
import {IosConfigurationService} from './services/ios-configuration.service';
import {IosService} from './services/ios.service';
import {IouConfigurationService} from './services/iou-configuration.service';
import {IouService} from './services/iou.service';
import {LinkService} from './services/link.service';
import {MapScaleService} from './services/mapScale.service';
import {MapSettingsService} from './services/mapsettings.service';
import {NodeService} from './services/node.service';
import {NodeConsoleService} from './services/nodeConsole.service';
import {NotificationService} from './services/notification.service';
import {PacketCaptureService} from './services/packet-capture.service';
import {PlatformService} from './services/platform.service';
import {ProjectService} from './services/project.service';
import {QemuConfigurationService} from './services/qemu-configuration.service';
import {QemuService} from './services/qemu.service';
import {RecentlyOpenedProjectService} from './services/recentlyOpenedProject.service';
import {ServerManagementService} from './services/server-management.service';
import {ServerSettingsService} from './services/server-settings.service';
import {ServerDatabase} from './services/server.database';
import {ServerService} from './services/server.service';
import {SettingsService} from './services/settings.service';
import {ConsoleService} from './services/settings/console.service';
import {DefaultConsoleService} from './services/settings/default-console.service';
import {SnapshotService} from './services/snapshot.service';
import {SymbolService} from './services/symbol.service';
import {TemplateMocksService} from './services/template-mocks.service';
import {TemplateService} from './services/template.service';
import {ThemeService} from './services/theme.service';
import {ToasterService} from './services/toaster.service';
import {ToolsService} from './services/tools.service';
import {UpdatesService} from './services/updates.service';
import {VersionService} from './services/version.service';
import {VirtualBoxConfigurationService} from './services/virtual-box-configuration.service';
import {VirtualBoxService} from './services/virtual-box.service';
import {VmwareConfigurationService} from './services/vmware-configuration.service';
import {VmwareService} from './services/vmware.service';
import {VpcsConfigurationService} from './services/vpcs-configuration.service';
import {VpcsService} from './services/vpcs.service';
import {NonNegativeValidator} from './validators/non-negative-validator';
import {RotationValidator} from './validators/rotation-validator';
import {MarkedDirective} from './directives/marked.directive';
import {LoginComponent} from './components/login/login.component';
import {LoginService} from './services/login.service';
import {HttpRequestsInterceptor} from './interceptors/http.interceptor';
import {UserManagementComponent} from './components/user-management/user-management.component';
import {UserService} from './services/user.service';
import {LoggedUserComponent} from './components/users/logged-user/logged-user.component';
import {AddUserDialogComponent} from './components/user-management/add-user-dialog/add-user-dialog.component';
import {UserFilterPipe} from './filters/user-filter.pipe';
import {GroupManagementComponent} from './components/group-management/group-management.component';
import {GroupFilterPipe} from './filters/group-filter.pipe';
import {AddGroupDialogComponent} from './components/group-management/add-group-dialog/add-group-dialog.component';
import {DeleteGroupDialogComponent} from './components/group-management/delete-group-dialog/delete-group-dialog.component';
import {DeleteUserDialogComponent} from './components/user-management/delete-user-dialog/delete-user-dialog.component';
import {GroupDetailsComponent} from './components/group-details/group-details.component';
import {UserDetailComponent} from './components/user-management/user-detail/user-detail.component';
import {AddUserToGroupDialogComponent} from './components/group-details/add-user-to-group-dialog/add-user-to-group-dialog.component';
import {RemoveToGroupDialogComponent} from '@components/group-details/remove-to-group-dialog/remove-to-group-dialog.component';
import {PaginatorPipe} from './components/group-details/paginator.pipe';
import {MembersFilterPipe} from './components/group-details/members-filter.pipe';
import {ManagementComponent} from './components/management/management.component';
import {MatCheckboxModule} from "@angular/material/checkbox";
import { RoleManagementComponent } from './components/role-management/role-management.component';
import { RoleFilterPipe } from './components/role-management/role-filter.pipe';
@ -300,6 +300,9 @@ import { PermissionEditorValidateDialogComponent } from './components/role-manag
import { PermissionsManagementComponent } from './components/permissions-management/permissions-management.component';
import { PermissionEditLineComponent } from '@components/permissions-management/permission-edit-line/permission-edit-line.component';
import {MatSlideToggleModule} from '@angular/material/slide-toggle';
import {MatAutocompleteModule} from "@angular/material/autocomplete";
import {PathAutoCompleteComponent} from './components/permissions-management/add-permission-line/path-auto-complete/path-auto-complete.component';
import {FilterCompletePipe} from './components/permissions-management/add-permission-line/path-auto-complete/filter-complete.pipe';
import { AddPermissionLineComponent } from './components/permissions-management/add-permission-line/add-permission-line.component';
import { MethodButtonComponent } from './components/permissions-management/method-button/method-button.component';
import { ActionButtonComponent } from './components/permissions-management/action-button/action-button.component';
@ -523,7 +526,9 @@ import {MatFormFieldModule} from "@angular/material/form-field";
AddPermissionLineComponent,
MethodButtonComponent,
ActionButtonComponent,
DeletePermissionDialogComponent
DeletePermissionDialogComponent,
PathAutoCompleteComponent,
FilterCompletePipe
],
imports: [
BrowserModule,
@ -537,21 +542,22 @@ import {MatFormFieldModule} from "@angular/material/form-field";
NgxElectronModule,
FileUploadModule,
MatSidenavModule,
MatFormFieldModule,
ResizableModule,
DragAndDropModule,
DragDropModule,
NgxChildProcessModule,
MatFormFieldModule,
MATERIAL_IMPORTS,
NgCircleProgressModule.forRoot(),
OverlayModule,
MatSlideToggleModule,
MatCheckboxModule,
MatAutocompleteModule,
],
providers: [
SettingsService,
{ provide: ErrorHandler, useClass: ToasterErrorHandler },
{ provide: HTTP_INTERCEPTORS, useClass: HttpRequestsInterceptor, multi: true },
{provide: ErrorHandler, useClass: ToasterErrorHandler},
{provide: HTTP_INTERCEPTORS, useClass: HttpRequestsInterceptor, multi: true},
D3Service,
VersionService,
ProjectService,

View File

@ -1,19 +1,48 @@
<mat-form-field appearance="fill">
<mat-label>Type</mat-label>
<mat-select [(ngModel)]="selectedType" (ngModelChange)="changeType($event)">
<mat-option *ngFor="let type of objectTypes" [value]="type">{{type}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field appearance="fill">
<mat-select>
<mat-option *ngFor="let elt of elements" [value]="elt">{{elt.name ? elt.name : elt.filename}}</mat-option>
</mat-select>
</mat-form-field>
<button mat-button matTooltip="Save Changes" (click)="onSave()" color="primary">
<mat-icon>check_circle</mat-icon>
</button>
<button mat-button matTooltip="Cancel Changes" color="warn" (click)="onCancel()">
<mat-icon>cancel</mat-icon>
</button>
<div class="box-border">
<div *ngIf="edit; else add">
<div class="edit-mode">
<div class="information-box">
<div>
<app-path-auto-complete
[server]="server"
(update)="permission.path = $event"></app-path-auto-complete>
</div>
<div class="methods">
<app-action-button
[disabled]="false"
[action]="permission.action"></app-action-button>
<div *ngFor="let method of apiInformation.getMethods(permission.path) | async">
<app-method-button
[name]="method"
[disabled]="false"
(update)="updateMethod($event)"></app-method-button>
</div>
<div class="description">
<mat-form-field>
<input
[(ngModel)]="permission.description"
matInput
type="text"
placeholder="Description"/>
</mat-form-field>
</div>
</div>
</div>
<div class="button-box">
<button mat-button (click)="reset()">
<mat-icon>cancel</mat-icon>
</button>
<button mat-button (click)="save()">
<mat-icon>done</mat-icon>
</button>
</div>
</div>
</div>
<ng-template #add>
<div class="not-edit">
<button mat-button (click)="edit = true">
<mat-icon>add</mat-icon>
</button>
</div>
</ng-template>
</div>

View File

@ -0,0 +1,49 @@
.box-border {
width: 100%;
margin-top: 20px;
border-bottom: 1px solid;
}
.edit-mode {
display: flex;
flex-direction: row;
justify-content: flex-end;
}
.information-box {
margin-left: 10px;
width: 100%;
}
.information-box > div {
margin-bottom: 10px;
}
.methods {
display: flex;
flex-direction: row;
align-items: center;
}
.button-box {
display: flex;
flex-direction: column;
justify-content: space-around;
}
.description {
width: 100%;
margin-left: 10px;
margin-right: 10px;
}
.description > mat-form-field {
width: 100%;
}
.not-edit {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
}

View File

@ -10,11 +10,12 @@
*
* Author: Sylvain MATHIEU, Elise LEBEAU
*/
import {Component, Input, OnInit, Output} from '@angular/core';
import {ProjectService} from "@services/project.service";
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {Server} from "@models/server";
import {ComputeService} from "@services/compute.service";
import EventEmitter from "events";
import {ApiInformationService} from "@services/api-information.service";
import {Methods, Permission, PermissionActions} from "@models/api/permission";
import {PermissionsService} from "@services/permissions.service";
import {ToasterService} from "@services/toaster.service";
@Component({
selector: 'app-add-permission-line',
@ -23,51 +24,56 @@ import EventEmitter from "events";
})
export class AddPermissionLineComponent implements OnInit {
objectTypes = ['projects', 'images', 'templates', 'computes']
elements = [];
selectedType = 'projects';
@Input() server: Server;
@Output() addPermissionEvent = new EventEmitter<void>();
permission: Permission = {
action: PermissionActions.ALLOW,
description: "",
methods: [],
path: "/",
};
edit = false;
@Output() addPermissionEvent = new EventEmitter();
constructor(public apiInformation: ApiInformationService,
private permissionService: PermissionsService,
private toasterService: ToasterService) {
constructor(private projectService: ProjectService,
private computeService: ComputeService) { }
}
ngOnInit(): void {
this.projectService.list(this.server)
.subscribe(elts => {
this.elements = elts;
})
}
changeType(value) {
console.log(value);
this.selectedType = value;
switch (this.selectedType) {
case 'projects':
this.projectService.list(this.server)
.subscribe(elts => {
this.elements = elts;
})
break;
case 'computes':
this.computeService.getComputes(this.server)
.subscribe(elts => {
this.elements = elts;
})
break;
default:
console.log("TODO");
this.elements = [];
updateMethod(data: { name: Methods; enable: boolean }) {
const set = new Set(this.permission.methods);
if (data.enable) {
set.add(data.name);
} else {
set.delete(data.name);
}
this.permission.methods = Array.from(set);
}
onSave() {
this.addPermissionEvent.emit('save');
reset() {
this.permission = {
action: PermissionActions.ALLOW,
description: "",
methods: [],
path: "/",
};
this.edit = false;
}
onCancel() {
this.addPermissionEvent.emit('cancel');
save() {
this.permissionService.add(this.server, this.permission)
.subscribe(() => {
this.toasterService.success(`permission was created`);
this.reset();
}, (error) => {
this.toasterService.error(error);
});
}
}

View File

@ -0,0 +1,8 @@
import { FilterCompletePipe } from './filter-complete.pipe';
describe('FilterCompletePipe', () => {
it('create an instance', () => {
const pipe = new FilterCompletePipe();
expect(pipe).toBeTruthy();
});
});

View File

@ -0,0 +1,17 @@
import { Pipe, PipeTransform } from '@angular/core';
import {IFormatedList} from "@services/api-information.service";
@Pipe({
name: 'filterComplete'
})
export class FilterCompletePipe implements PipeTransform {
transform(value: IFormatedList[], searchText: string): IFormatedList[] {
if (!searchText || searchText === '') { return value; }
return value.filter((v) => {
return v.name.includes(searchText) || v.id.includes(searchText);
});
}
}

View File

@ -0,0 +1,37 @@
<div class="path">
<div>Path: /</div>
<div *ngFor="let p of path">{{p}}/</div>
<div class="path-edit-line">
<div>
<div *ngIf="mode === 'SELECT'">
<mat-select (valueChange)="valueChanged($event)" class="edit-area">
<mat-option *ngFor="let value of values" value="{{value}}">{{value}}</mat-option>
</mat-select>
</div>
<div *ngIf="mode === 'COMPLETE'">
<input matInput
autofocus
class="complete edit-area"
aria-label="find"
[(ngModel)]="completeField"
[matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete">
<mat-option [value]="'*'">*</mat-option>
<mat-option *ngFor="let data of completeData | filterComplete: completeField"
[value]="data.id">
<span>{{data.name}}</span> |
<small>{{data.id}}</small>
</mat-option>
</mat-autocomplete>
</div>
</div>
<div class="command-button">
<mat-icon (click)="removePrevious()" *ngIf="path.length > 0">cancel</mat-icon>
<mat-icon (click)="getNext()" *ngIf="!this.mode">add_circle_outline</mat-icon>
<mat-icon
matTooltip="validate data"
(click)="validComplete()"
*ngIf="this.mode === 'COMPLETE'">check_circle</mat-icon>
</div>
</div>
</div>

View File

@ -0,0 +1,22 @@
.path {
display: flex;
flex-direction: row;
justify-content: flex-start;
}
mat-select {
width: 150px;
}
.edit-area {
border: 1px solid;
}
.command-button {
margin-left: 5px;
}
.path-edit-line {
display: flex;
flex-direction: row;
}

View File

@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PathAutoCompleteComponent } from './path-auto-complete.component';
describe('PathAutoCompleteComponent', () => {
let component: PathAutoCompleteComponent;
let fixture: ComponentFixture<PathAutoCompleteComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ PathAutoCompleteComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(PathAutoCompleteComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -0,0 +1,74 @@
import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';
import {ApiInformationService, IFormatedList} from "@services/api-information.service";
import {Server} from "@models/server";
@Component({
selector: 'app-path-auto-complete',
templateUrl: './path-auto-complete.component.html',
styleUrls: ['./path-auto-complete.component.scss']
})
export class PathAutoCompleteComponent implements OnInit {
@Output() update = new EventEmitter<string>();
@Input() server: Server;
path: string[] = [];
values: string[] = [];
private completeData: IFormatedList[];
public mode: 'SELECT' | 'COMPLETE' | undefined;
completeField: string;
constructor(private apiInformationService: ApiInformationService) {
}
updatePath(value: string) {
this.path.push(value);
this.update.emit(`/${this.path.join('/')}`);
}
popPath() {
this.path.pop();
this.update.emit(`/${this.path.join('/')}`);
}
ngOnInit(): void {
}
getNext() {
this.apiInformationService
.getPathNextElement(this.path)
.subscribe((next: string[]) => {
this.values = next;
this.mode = 'SELECT';
});
}
removePrevious() {
if (this.mode) {
return this.mode = undefined;
}
if (this.path.length > 0) {
return this.popPath();
}
}
valueChanged(value: string) {
if (value.match(this.apiInformationService.bracketIdRegex)) {
this.apiInformationService.getListByObjectId(this.server, value)
.subscribe((data) => {
this.mode = 'COMPLETE';
this.completeData = data;
});
} else {
this.updatePath(value);
this.mode = undefined;
}
}
validComplete() {
this.updatePath(this.completeField);
this.mode = undefined;
}
}

View File

@ -1,15 +1,13 @@
<div class="content" *ngIf="isReady; else loading">
<div class="default-header">
<div class="row">
<button class="col" mat-raised-button color="primary" (click)="addPermission()" class="add-button" *ngIf="!newPermissionEdit" >
Add Permission
</button>
</div>
<div class="add">
<app-add-permission-line
[server]="server"
(addPermissionEvent)="refresh()"></app-add-permission-line>
</div>
<div class="permission-content default-content">
<!--<ng-template #dynamic></ng-template>-->
<app-add-permission-line [server]="server" (addPermissionEvent)="updateList($event)" *ngIf="newPermissionEdit"></app-add-permission-line>
<app-add-permission-line [server]="server" (addPermissionEvent)="updateList($event)"
*ngIf="newPermissionEdit"></app-add-permission-line>
<div *ngFor="let permission of permissions">
<app-permission-add-edit-line
[permission]="permission"

View File

@ -18,3 +18,13 @@
top: 0;
width: 175px;
}
.add {
/* display: flex;
flex-direction: row;
justify-content: flex-end;
padding-right: 20px;
padding-bottom: 20px;
border-bottom: 1px solid;
align-items: center;*/
}

View File

@ -29,7 +29,7 @@ export interface Permission {
path: string;
action: PermissionActions;
description: string;
created_at: string;
updated_at: string;
permission_id: string;
created_at?: string;
updated_at?: string;
permission_id?: string;
}

View File

@ -13,8 +13,10 @@
import {Injectable} from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {Observable, ReplaySubject} from "rxjs";
import {map} from "rxjs/operators";
import {map, switchMap} from "rxjs/operators";
import {Methods} from "@models/api/permission";
import {HttpServer} from "@services/http-server.service";
import {Server} from "@models/server";
export interface IPathDict {
methods: ('POST' | 'GET' | 'PUT' | 'DELETE' | 'HEAD' | 'PATH')[];
@ -23,37 +25,93 @@ export interface IPathDict {
subPaths: string[];
}
export interface IApiObject {
name: string;
path: string;
}
export interface IQueryObject {
id: string;
text: string[];
}
export interface IFormatedList {
id: string;
name?: string;
}
@Injectable({
providedIn: 'root'
})
export class ApiInformationService {
private data: ReplaySubject<IPathDict[]> = new ReplaySubject<IPathDict[]>(1);
constructor(private httpClient: HttpClient) {
private allowed = ['projects', 'images', 'templates', 'computes', 'symbols', 'notifications'];
private data: ReplaySubject<IPathDict[]> = new ReplaySubject<IPathDict[]>(1);
private objs: ReplaySubject<IApiObject[]> = new ReplaySubject<IApiObject[]>(1);
public readonly bracketIdRegex = new RegExp("\{(.*?)\}");
public readonly finalBracketIdRegex = new RegExp("\{(.*?)\}$");
constructor(private httpClient: HttpClient,
private httpServer: HttpServer) {
this.loadLocalInformation();
this.data.subscribe((data) => {
localStorage.setItem('api-definition', JSON.stringify(data));
});
this.objs.subscribe((data) => {
localStorage.setItem('api-definition-objs', JSON.stringify(data));
});
this.httpClient
.get(`https://apiv3.gns3.net/openapi.json`)
.subscribe((openapi: any) => {
const data = this.apiModelAdapter(openapi);
const objs = this.apiObjectModelAdapter(openapi);
const data = this.apiPathModelAdapter(openapi);
this.data.next(data);
this.objs.next(objs);
});
}
private apiModelAdapter(openapi: any): IPathDict[] {
private apiObjectModelAdapter(openapi: any): IApiObject[] {
function haveGetMethod(path: string): boolean {
const obj = openapi.paths[path];
if (obj) {
const methods = Object.keys(obj);
return methods.includes("get");
} else {
return false;
}
}
function extractId(originalPath: string): IApiObject {
const d = originalPath.split('/');
const name = d.pop();
const path = d.join('/');
return {name, path};
}
const keys = Object.keys(openapi.paths);
return keys
.filter((path: string) => path.match(this.finalBracketIdRegex))
.filter(haveGetMethod)
.map(extractId)
.filter((object) => haveGetMethod(object.path));
}
private apiPathModelAdapter(openapi: any): IPathDict[] {
const keys = Object.keys(openapi.paths);
return keys
.map(path => {
const subPaths = path.split('/').filter(elem => !(elem === '' || elem === 'v3'));
return {originalPath: path, path: subPaths.join('/'), subPaths};
})
.filter(d => this.allowed.includes(d.subPaths[0]))
.map(path => {
//FIXME
// @ts-ignore
@ -69,7 +127,6 @@ export class ApiInformationService {
.pipe(
map((data: IPathDict[]) => {
const availableMethods = new Set<string>();
data.forEach((p: IPathDict) => {
p.methods.forEach(method => availableMethods.add(method));
});
@ -83,24 +140,24 @@ export class ApiInformationService {
.asObservable()
.pipe(
map((data) => {
const splinted = path
.split('/')
.filter(elem => !(elem === '' || elem === 'v3'));
const splinted = path.split('/').filter(elem => !(elem === '' || elem === 'v3'));
let remains = data;
splinted.forEach((value, index) => {
if (value === '*') {
return remains;
return;
}
remains = remains.filter((val => {
if (!val.subPaths[index]) {
return false;
}
if (val.subPaths[index].includes('{')) {
return true;
}
return val.subPaths[index] === value;
}));
});
let matchUrl = remains.filter(val => val.subPaths[index]?.includes(value));
if (matchUrl.length === 0) {
matchUrl = remains.filter(val => val.subPaths[index]?.match(this.bracketIdRegex));
}
remains = matchUrl;
});
return remains;
})
);
@ -111,5 +168,63 @@ export class ApiInformationService {
if (data) {
this.data.next(data);
}
const obj = JSON.parse(localStorage.getItem('api-definition-objs'));
if (obj) {
this.objs.next(obj);
}
}
getPathNextElement(path: string[]): Observable<string[]> {
return this.getPath(path.join('/'))
.pipe(map((paths: IPathDict[]) => {
const set = new Set<string>();
paths.forEach((p) => {
if (p.subPaths[path.length]) {
set.add(p.subPaths[path.length]);
}
});
return Array.from(set);
}));
}
getListByObjectId(server: Server, value: string) {
function findElement(data: IApiObject[]): IApiObject {
const elem = data.find(d => d.name === value);
if (!elem) {
throw new Error('entry not found');
}
return elem;
}
return this.objs.pipe(
map(findElement),
switchMap(elem => {
const url = `${server.protocol}//${server.host}:${server.port}${elem.path}`;
return this.httpClient.get<any[]>(url, {headers: {Authorization: `Bearer ${server.authToken}`}});
}
),
map(response => {
if (response.length === 0) {
return [];
}
const keys = Object.keys(response[0]);
const idKey = keys.find(k => k.match(/_id$|filename/));
const nameKey = keys.find(k => k.match(/name/));
return response.map(o => {
return {
id: o[idKey],
name: o[nameKey]
};
});
}));
}
}