@c8y/ngx-components 1021.73.8 → 1021.74.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +15 -10
- package/esm2022/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.mjs +9 -12
- package/esm2022/remote-access/data/remote-access.service.mjs +12 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +24 -20
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +11 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
- package/locales/ko.po +2 -1
- package/package.json +1 -1
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts +4 -2
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -1
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts +2 -3
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -1
- package/remote-access/data/remote-access.service.d.ts +8 -2
- package/remote-access/data/remote-access.service.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-remote-access-configurations.mjs","sources":["../../remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.ts","../../remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.html","../../remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.ts","../../remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.html","../../remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.ts","../../remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.html","../../remote-access/configurations/index.ts","../../remote-access/configurations/c8y-ngx-components-remote-access-configurations.ts"],"sourcesContent":["import { NgIf } from '@angular/common';\nimport { Component, effect, input, Optional, signal } from '@angular/core';\nimport { RouterLinkWithHref } from '@angular/router';\nimport { C8yTranslatePipe, CellRendererContext, IconDirective } from '@c8y/ngx-components';\nimport {\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\n\n@Component({\n selector: 'c8y-remote-access-connect-button',\n templateUrl: './remote-access-connect-button.component.html',\n standalone: true,\n imports: [RouterLinkWithHref, IconDirective, NgIf, C8yTranslatePipe]\n})\nexport class RemoteAccessConnectButtonComponent {\n deviceId = input<string>(null);\n configurationId = input<string>(null);\n protocol = input<string>(null);\n\n connectHref: ReturnType<RemoteAccessConnectButtonComponent['getEndpointHref']>;\n\n private protocolProviders: RemoteAccessProtocolProvider[] = [];\n\n constructor(\n private remoteAccess: RemoteAccessService,\n @Optional() private context?: CellRendererContext\n ) {\n this.protocolProviders = this.remoteAccess.getProtocolProviders();\n this.connectHref = this.getEndpointHref();\n }\n\n getEndpointHref() {\n const resultSignal = signal<string>(null);\n\n effect(\n async () => {\n let deviceId = this.deviceId();\n let configurationId = this.configurationId();\n let protocol = this.protocol();\n if (this.context) {\n if (!deviceId) {\n deviceId = (<any>this.context.property)?.target;\n }\n if (!configurationId) {\n configurationId = this.context.item.id;\n }\n if (!protocol) {\n protocol = this.context.item.protocol;\n }\n }\n if (!deviceId || !configurationId || !protocol) {\n resultSignal.set(null);\n return;\n }\n\n const provider = this.protocolProviders.find(p => p.protocolName === protocol);\n if (!provider || !provider.connectEndpointHref) {\n resultSignal.set(null);\n return;\n }\n const href = await provider.connectEndpointHref(\n deviceId,\n this.context.item || { id: configurationId }\n );\n resultSignal.set(href);\n },\n { allowSignalWrites: true }\n );\n\n return resultSignal.asReadonly();\n }\n}\n","<a\n *ngIf=\"connectHref() as endpointHref\"\n [title]=\"'Connect' | translate\"\n [routerLink]=\"endpointHref\"\n [attr.data-cy]=\"'remoteAccessConnectButton'\"\n>\n <i [c8yIcon]=\"'connected'\"></i>\n</a>\n","import { Component } from '@angular/core';\nimport { CoreModule, gettext } from '@c8y/ngx-components';\nimport {\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'c8y-remote-access-pick-protocol-modal',\n templateUrl: './remote-access-pick-protocol-modal.component.html',\n standalone: true,\n imports: [CoreModule]\n})\nexport class RemoteAccessPickProtocolModalComponent {\n title = gettext('Select a protocol');\n result = new Promise<RemoteAccessProtocolProvider>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n protocolProviders: RemoteAccessProtocolProvider[] = [];\n\n private _resolve: (value: RemoteAccessProtocolProvider) => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private remoteAccess: RemoteAccessService,\n private bsModalRef: BsModalRef\n ) {\n this.protocolProviders = this.remoteAccess.getProtocolProviders();\n }\n\n cancel() {\n this._reject();\n }\n\n selectProtocol(protocol: RemoteAccessProtocolProvider) {\n this.bsModalRef.hide();\n this._resolve(protocol);\n }\n}\n","<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n ActionBarItemComponent,\n ActionControl,\n AlertService,\n BuiltInActionType,\n C8yTranslateDirective,\n C8yTranslatePipe,\n Column,\n DataGridModule,\n DisplayOptions,\n EmptyComponent,\n EmptyStateComponent,\n gettext,\n IconDirective,\n ModalService,\n Pagination,\n Status,\n TitleComponent\n} from '@c8y/ngx-components';\nimport {\n RemoteAccessConfiguration,\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\nimport { RemoteAccessConnectButtonComponent } from './remote-access-connect-button/remote-access-connect-button.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { RemoteAccessPickProtocolModalComponent } from '../remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component';\nimport { IconDeviceGridColumn } from '@c8y/ngx-components/device-grid';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'c8y-remote-access-configuration-list',\n templateUrl: './remote-access-configuration-list.component.html',\n standalone: true,\n imports: [\n DataGridModule,\n TitleComponent,\n C8yTranslateDirective,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateComponent,\n C8yTranslatePipe\n ]\n})\nexport class RemoteAccessConfigurationListComponent implements OnInit {\n rows: RemoteAccessConfiguration[] = [];\n columns: Column[] = [\n new IconDeviceGridColumn(\n {\n headerCellRendererComponent: EmptyComponent\n },\n context => {\n const provider = this.protocolProviders.find(p => p.protocolName === context.item.protocol);\n return provider?.protocolIcon || 'laptop';\n }\n ),\n {\n name: 'name',\n header: gettext('Endpoint'),\n path: 'name'\n },\n {\n name: 'hostname',\n header: gettext('Host'),\n path: 'hostname'\n },\n {\n name: 'port',\n header: gettext('Port'),\n path: 'port'\n },\n {\n name: 'protocol',\n header: gettext('Protocol'),\n path: 'protocol'\n },\n {\n name: 'connect',\n header: gettext('Connect'),\n cellRendererComponent: RemoteAccessConnectButtonComponent\n }\n ];\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n callback: async (entry: RemoteAccessConfiguration) => {\n const provider = this.getProtocolProviderForConfiguration(entry);\n\n try {\n let result: RemoteAccessConfiguration;\n if (provider.editEndpoint) {\n result = await provider.editEndpoint(this.deviceId, entry);\n } else {\n result = await this.defaultEditEndpoint(this.deviceId, entry);\n }\n\n if (!result) {\n return;\n }\n\n this.alert.success(gettext('Endpoint saved.'));\n } catch (e) {\n console.warn(e);\n this.alert.danger(gettext('Failed to save endpoint.'), e);\n }\n this.reload();\n }\n },\n {\n type: BuiltInActionType.Delete,\n callback: async (entry: RemoteAccessConfiguration) => {\n const result = await this.modalService.confirm(\n gettext('Delete endpoint'),\n this.translateService.instant(\n gettext(\n `You are about to delete endpoint \"{{ endpointName }}\". Do you want to proceed?`\n ),\n { endpointName: entry.name }\n ),\n Status.DANGER,\n { cancel: gettext('Cancel'), ok: gettext('Delete') }\n );\n if (!result) {\n return;\n }\n\n const provider = this.getProtocolProviderForConfiguration(entry);\n\n try {\n await provider.removeEndpoint(this.deviceId, entry);\n this.alert.success(gettext('Endpoint deleted.'));\n } catch (e) {\n console.warn(e);\n this.alert.danger(gettext('Failed to delete endpoint.'), e);\n }\n this.reload();\n }\n }\n ];\n deviceId: string;\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n protocolProviders: RemoteAccessProtocolProvider[] = [];\n gridTitle = gettext('Remote access endpoints');\n\n constructor(\n private remoteAccess: RemoteAccessService,\n private activatedRoute: ActivatedRoute,\n private modalService: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService,\n private translateService: TranslateService\n ) {\n this.protocolProviders = this.remoteAccess.getProtocolProviders();\n this.deviceId = this.activatedRoute.parent.snapshot.params.id;\n const connectColum = this.columns.find(c => c.name === 'connect');\n if (connectColum) {\n (<any>connectColum).target = this.deviceId;\n }\n }\n\n ngOnInit() {\n this.reload();\n }\n\n async reload() {\n const configurations = await this.remoteAccess.listConfigurations(this.deviceId);\n const supportedProtocols = this.protocolProviders.map(p => p.protocolName);\n this.rows = configurations.filter(c => supportedProtocols.includes(c.protocol));\n }\n\n async addEndpoint() {\n let provider: RemoteAccessProtocolProvider = null;\n if (this.protocolProviders.length > 1) {\n try {\n const modalRef = this.bsModalService.show(RemoteAccessPickProtocolModalComponent);\n provider = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n } else if (this.protocolProviders.length === 1) {\n provider = this.protocolProviders[0];\n } else {\n return;\n }\n\n try {\n let addModalResult: RemoteAccessConfiguration = null;\n if (provider.addEndpoint) {\n addModalResult = await provider.addEndpoint(this.deviceId);\n } else {\n addModalResult = await this.defaultAddEndpoint(this.deviceId, provider);\n }\n if (!addModalResult) {\n return;\n }\n this.alert.success(gettext('Endpoint added.'));\n } catch (e) {\n console.warn(e);\n this.alert.danger(gettext('Failed to add endpoint.'), e);\n }\n this.reload();\n }\n\n getProtocolProviderForConfiguration(configuration: RemoteAccessConfiguration) {\n return this.protocolProviders.find(p => p.protocolName === configuration.protocol);\n }\n\n async defaultEditEndpoint(deviceId: string, configuration: RemoteAccessConfiguration) {\n const modalResult = await this.openBasicEndpointModal(configuration);\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.updateConfiguration(deviceId, modalResult);\n }\n\n async defaultAddEndpoint(deviceId: string, provider: RemoteAccessProtocolProvider) {\n let defaultConfig = { protocol: provider.protocolName };\n if (provider.getDefaultEndpointConfiguration) {\n const defaultConfigFromProvider = await provider.getDefaultEndpointConfiguration();\n defaultConfig = { ...defaultConfig, ...defaultConfigFromProvider };\n }\n const modalResult = await this.openBasicEndpointModal(defaultConfig);\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.addConfiguration(deviceId, modalResult);\n }\n\n async openBasicEndpointModal(\n currentConfiguration: Partial<RemoteAccessConfiguration>\n ): Promise<RemoteAccessConfiguration | null> {\n const { RemoteAccessBasicEndpointModalComponent } = await import(\n '@c8y/ngx-components/remote-access/shared'\n );\n\n try {\n const modalRef = this.bsModalService.show(RemoteAccessBasicEndpointModalComponent, {\n initialState: { currentValue: currentConfiguration }\n });\n return (await modalRef.content.result) as RemoteAccessConfiguration;\n } catch (e) {\n // modal closed\n return null;\n }\n }\n}\n","<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n","import { hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { RemoteAccessConfigurationListComponent } from './remote-access-configuration-list/remote-access-configuration-list.component';\nimport { canActivateRemoteAccess } from '@c8y/ngx-components/remote-access/data';\n\nexport * from './remote-access-configuration-list/remote-access-configuration-list.component';\n\nexport const remoteAccessConfigurationListProviders = [\n hookRoute({\n component: RemoteAccessConfigurationListComponent,\n label: gettext('Remote access'),\n path: 'remote_access',\n icon: 'window-restore',\n context: ViewContext.Device,\n canActivate: [canActivateRemoteAccess]\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i4","gettext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-remote-access-configurations.mjs","sources":["../../remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.ts","../../remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.html","../../remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.ts","../../remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.html","../../remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.ts","../../remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.html","../../remote-access/configurations/index.ts","../../remote-access/configurations/c8y-ngx-components-remote-access-configurations.ts"],"sourcesContent":["import { NgIf } from '@angular/common';\nimport { Component, effect, input, Optional, signal } from '@angular/core';\nimport { RouterLinkWithHref } from '@angular/router';\nimport { C8yTranslatePipe, CellRendererContext, IconDirective } from '@c8y/ngx-components';\nimport {\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\n\n@Component({\n selector: 'c8y-remote-access-connect-button',\n templateUrl: './remote-access-connect-button.component.html',\n standalone: true,\n imports: [RouterLinkWithHref, IconDirective, NgIf, C8yTranslatePipe]\n})\nexport class RemoteAccessConnectButtonComponent {\n deviceId = input<string>(null);\n configurationId = input<string>(null);\n protocol = input<string>(null);\n\n connectHref: ReturnType<RemoteAccessConnectButtonComponent['getEndpointHref']>;\n\n private protocolProviders: RemoteAccessProtocolProvider[] = [];\n\n constructor(\n private remoteAccess: RemoteAccessService,\n @Optional() private context?: CellRendererContext\n ) {\n this.protocolProviders = this.remoteAccess.getProtocolProviders();\n this.connectHref = this.getEndpointHref();\n }\n\n getEndpointHref() {\n const resultSignal = signal<string>(null);\n\n effect(\n async () => {\n let deviceId = this.deviceId();\n let configurationId = this.configurationId();\n let protocol = this.protocol();\n if (this.context) {\n if (!deviceId) {\n deviceId = (<any>this.context.property)?.target;\n }\n if (!configurationId) {\n configurationId = this.context.item.id;\n }\n if (!protocol) {\n protocol = this.context.item.protocol;\n }\n }\n if (!deviceId || !configurationId || !protocol) {\n resultSignal.set(null);\n return;\n }\n\n const provider = this.protocolProviders.find(p => p.protocolName === protocol);\n if (!provider || !provider.connectEndpointHref) {\n resultSignal.set(null);\n return;\n }\n const href = await provider.connectEndpointHref(\n deviceId,\n this.context.item || { id: configurationId }\n );\n resultSignal.set(href);\n },\n { allowSignalWrites: true }\n );\n\n return resultSignal.asReadonly();\n }\n}\n","<a\n *ngIf=\"connectHref() as endpointHref\"\n [title]=\"'Connect' | translate\"\n [routerLink]=\"endpointHref\"\n [attr.data-cy]=\"'remoteAccessConnectButton'\"\n>\n <i [c8yIcon]=\"'connected'\"></i>\n</a>\n","import { Component } from '@angular/core';\nimport { CoreModule, gettext } from '@c8y/ngx-components';\nimport { RemoteAccessProtocolProvider } from '@c8y/ngx-components/remote-access/data';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'c8y-remote-access-pick-protocol-modal',\n templateUrl: './remote-access-pick-protocol-modal.component.html',\n standalone: true,\n imports: [CoreModule]\n})\nexport class RemoteAccessPickProtocolModalComponent {\n title = gettext('Select a protocol');\n result = new Promise<RemoteAccessProtocolProvider>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n // set via initialState\n protocolProviders: RemoteAccessProtocolProvider[] = [];\n\n private _resolve: (value: RemoteAccessProtocolProvider) => void;\n private _reject: (reason?: any) => void;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n cancel() {\n this._reject();\n }\n\n selectProtocol(protocol: RemoteAccessProtocolProvider) {\n this.bsModalRef.hide();\n this._resolve(protocol);\n }\n}\n","<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n [labels]=\"{ cancel: 'Cancel' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'laptop'\"></span>\n </ng-container>\n <div class=\"p-24\">\n <c8y-li *ngFor=\"let provider of protocolProviders\">\n <c8y-li-icon>\n <i [c8yIcon]=\"provider.protocolIcon\"></i>\n </c8y-li-icon>\n <c8y-li-body>\n <div class=\"d-flex j-c-between\">\n <div>\n <p>{{ provider.protocolLabel | translate }}</p>\n <p>\n <small>{{ provider.protocolDescription | translate }}</small>\n </p>\n </div>\n <div>\n <button\n class=\"btn btn-primary\"\n (click)=\"selectProtocol(provider)\"\n [attr.data-cy]=\"'remoteAccessPickProtocolModal--select-' + provider.protocolName\"\n >\n <span translate>Select</span>\n </button>\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </div>\n</c8y-modal>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n ActionBarItemComponent,\n ActionControl,\n AlertService,\n BuiltInActionType,\n C8yTranslateDirective,\n C8yTranslatePipe,\n Column,\n ContextRouteService,\n DataGridModule,\n DisplayOptions,\n EmptyComponent,\n EmptyStateComponent,\n gettext,\n IconDirective,\n ModalService,\n Pagination,\n Status,\n TitleComponent\n} from '@c8y/ngx-components';\nimport {\n RemoteAccessConfiguration,\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\nimport { RemoteAccessConnectButtonComponent } from './remote-access-connect-button/remote-access-connect-button.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { RemoteAccessPickProtocolModalComponent } from '../remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component';\nimport { IconDeviceGridColumn } from '@c8y/ngx-components/device-grid';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-remote-access-configuration-list',\n templateUrl: './remote-access-configuration-list.component.html',\n standalone: true,\n imports: [\n DataGridModule,\n TitleComponent,\n C8yTranslateDirective,\n ActionBarItemComponent,\n IconDirective,\n EmptyStateComponent,\n C8yTranslatePipe\n ]\n})\nexport class RemoteAccessConfigurationListComponent implements OnInit {\n rows: RemoteAccessConfiguration[] = [];\n columns: Column[] = [\n new IconDeviceGridColumn(\n {\n headerCellRendererComponent: EmptyComponent\n },\n context => {\n const provider = this.protocolProviders.find(p => p.protocolName === context.item.protocol);\n return provider?.protocolIcon || 'laptop';\n }\n ),\n {\n name: 'name',\n header: gettext('Endpoint'),\n path: 'name'\n },\n {\n name: 'hostname',\n header: gettext('Host'),\n path: 'hostname'\n },\n {\n name: 'port',\n header: gettext('Port'),\n path: 'port'\n },\n {\n name: 'protocol',\n header: gettext('Protocol'),\n path: 'protocol'\n },\n {\n name: 'connect',\n header: gettext('Connect'),\n cellRendererComponent: RemoteAccessConnectButtonComponent\n }\n ];\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n callback: async (entry: RemoteAccessConfiguration) => {\n const provider = this.getProtocolProviderForConfiguration(entry);\n\n try {\n let result: RemoteAccessConfiguration;\n if (provider.editEndpoint) {\n result = await provider.editEndpoint(this.deviceId, entry);\n } else {\n result = await this.defaultEditEndpoint(this.deviceId, entry);\n }\n\n if (!result) {\n return;\n }\n\n this.alert.success(gettext('Endpoint saved.'));\n } catch (e) {\n console.warn(e);\n this.alert.danger(gettext('Failed to save endpoint.'), e);\n }\n this.reload();\n }\n },\n {\n type: BuiltInActionType.Delete,\n callback: async (entry: RemoteAccessConfiguration) => {\n const result = await this.modalService.confirm(\n gettext('Delete endpoint'),\n this.translateService.instant(\n gettext(\n `You are about to delete endpoint \"{{ endpointName }}\". Do you want to proceed?`\n ),\n { endpointName: entry.name }\n ),\n Status.DANGER,\n { cancel: gettext('Cancel'), ok: gettext('Delete') }\n );\n if (!result) {\n return;\n }\n\n const provider = this.getProtocolProviderForConfiguration(entry);\n\n try {\n await provider.removeEndpoint(this.deviceId, entry);\n this.alert.success(gettext('Endpoint deleted.'));\n } catch (e) {\n console.warn(e);\n this.alert.danger(gettext('Failed to delete endpoint.'), e);\n }\n this.reload();\n }\n }\n ];\n deviceId: string;\n pagination: Pagination = {\n pageSize: 10,\n currentPage: 1\n };\n displayOptions: DisplayOptions = {\n bordered: false,\n striped: true,\n filter: true,\n gridHeader: true,\n hover: true\n };\n protocolProviders: RemoteAccessProtocolProvider[] = [];\n gridTitle = gettext('Remote access endpoints');\n\n private device: IManagedObject;\n\n constructor(\n private remoteAccess: RemoteAccessService,\n private activatedRoute: ActivatedRoute,\n private modalService: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService,\n private translateService: TranslateService,\n private ctx: ContextRouteService\n ) {\n this.device = this.ctx.getContextData(this.activatedRoute)?.contextData as IManagedObject;\n this.deviceId = this.device?.id as string;\n this.protocolProviders = this.remoteAccess.getSupportedProtocolProvidersFor(this.device);\n const connectColum = this.columns.find(c => c.name === 'connect');\n if (connectColum) {\n (<any>connectColum).target = this.deviceId;\n }\n }\n\n ngOnInit() {\n this.reload();\n }\n\n async reload() {\n const configurations = await this.remoteAccess.listConfigurations(this.deviceId);\n const supportedProtocols = this.remoteAccess.getSupportedProtocolProvidersFor(this.device);\n const supportedProtocolsNames = supportedProtocols.map(p => p.protocolName);\n this.rows = configurations.filter(c =>\n supportedProtocolsNames.includes(c.protocol.toUpperCase())\n );\n }\n\n async addEndpoint() {\n let provider: RemoteAccessProtocolProvider = null;\n if (this.protocolProviders.length > 1) {\n try {\n const modalRef = this.bsModalService.show(RemoteAccessPickProtocolModalComponent, {\n initialState: { protocolProviders: this.protocolProviders }\n });\n provider = await modalRef.content.result;\n } catch (e) {\n // modal closed\n return;\n }\n } else if (this.protocolProviders.length === 1) {\n provider = this.protocolProviders[0];\n } else {\n return;\n }\n\n try {\n let addModalResult: RemoteAccessConfiguration = null;\n if (provider.addEndpoint) {\n addModalResult = await provider.addEndpoint(this.deviceId);\n } else {\n addModalResult = await this.defaultAddEndpoint(this.deviceId, provider);\n }\n if (!addModalResult) {\n return;\n }\n this.alert.success(gettext('Endpoint added.'));\n } catch (e) {\n console.warn(e);\n this.alert.danger(gettext('Failed to add endpoint.'), e);\n }\n this.reload();\n }\n\n getProtocolProviderForConfiguration(configuration: RemoteAccessConfiguration) {\n return this.protocolProviders.find(p => p.protocolName === configuration.protocol);\n }\n\n async defaultEditEndpoint(deviceId: string, configuration: RemoteAccessConfiguration) {\n const modalResult = await this.openBasicEndpointModal(configuration);\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.updateConfiguration(deviceId, modalResult);\n }\n\n async defaultAddEndpoint(deviceId: string, provider: RemoteAccessProtocolProvider) {\n let defaultConfig = { protocol: provider.protocolName };\n if (provider.getDefaultEndpointConfiguration) {\n const defaultConfigFromProvider = await provider.getDefaultEndpointConfiguration();\n defaultConfig = { ...defaultConfig, ...defaultConfigFromProvider };\n }\n const modalResult = await this.openBasicEndpointModal(defaultConfig);\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.addConfiguration(deviceId, modalResult);\n }\n\n async openBasicEndpointModal(\n currentConfiguration: Partial<RemoteAccessConfiguration>\n ): Promise<RemoteAccessConfiguration | null> {\n const { RemoteAccessBasicEndpointModalComponent } = await import(\n '@c8y/ngx-components/remote-access/shared'\n );\n\n try {\n const modalRef = this.bsModalService.show(RemoteAccessBasicEndpointModalComponent, {\n initialState: { currentValue: currentConfiguration }\n });\n return (await modalRef.content.result) as RemoteAccessConfiguration;\n } catch (e) {\n // modal closed\n return null;\n }\n }\n}\n","<c8y-title translate>Remote access</c8y-title>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEndpoint()\"\n [disabled]=\"!protocolProviders?.length\"\n [attr.data-cy]=\"'remoteAccessConfigurationList--add-endpoint'\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n <span translate>Add endpoint</span>\n </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"gridTitle\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n (onReload)=\"reload()\"\n [actionControls]=\"actionControls\"\n [displayOptions]=\"displayOptions\"\n >\n <c8y-ui-empty-state\n [icon]=\"'window-restore'\"\n [title]=\"'No endpoints configured.' | translate\"\n [subtitle]=\"'Click below to add your first endpoint.' | translate\"\n [horizontal]=\"false\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"addEndpoint()\"\n translate\n >\n Add endpoint\n </button>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n","import { hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { RemoteAccessConfigurationListComponent } from './remote-access-configuration-list/remote-access-configuration-list.component';\nimport { canActivateRemoteAccess } from '@c8y/ngx-components/remote-access/data';\n\nexport * from './remote-access-configuration-list/remote-access-configuration-list.component';\n\nexport const remoteAccessConfigurationListProviders = [\n hookRoute({\n component: RemoteAccessConfigurationListComponent,\n label: gettext('Remote access'),\n path: 'remote_access',\n icon: 'window-restore',\n context: ViewContext.Device,\n canActivate: [canActivateRemoteAccess]\n })\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","gettext"],"mappings":";;;;;;;;;;;;;;;MAea,kCAAkC,CAAA;IAS7C,WACU,CAAA,YAAiC,EACrB,OAA6B,EAAA;QADzC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAqB;QACrB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAsB;AAVnD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;AACtC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;QAIvB,IAAiB,CAAA,iBAAA,GAAmC,EAAE,CAAC;QAM7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;KAC3C;IAED,eAAe,GAAA;AACb,QAAA,MAAM,YAAY,GAAG,MAAM,CAAS,IAAI,CAAC,CAAC;QAE1C,MAAM,CACJ,YAAW;AACT,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/B,YAAA,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC7C,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/B,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,QAAQ,EAAE;oBACb,QAAQ,GAAS,IAAI,CAAC,OAAO,CAAC,QAAS,EAAE,MAAM,CAAC;iBACjD;gBACD,IAAI,CAAC,eAAe,EAAE;oBACpB,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;iBACxC;gBACD,IAAI,CAAC,QAAQ,EAAE;oBACb,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACvC;aACF;YACD,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE;AAC9C,gBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;aACR;AAED,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC;YAC/E,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;AAC9C,gBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;aACR;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAC7C,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,eAAe,EAAE,CAC7C,CAAC;AACF,YAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,SAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B,CAAC;AAEF,QAAA,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;KAClC;+GAxDU,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECf/C,uNAQA,EDKY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,oOAAE,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAExD,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAN9C,SAAS;+BACE,kCAAkC,EAAA,UAAA,EAEhC,IAAI,EAAA,OAAA,EACP,CAAC,kBAAkB,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,uNAAA,EAAA,CAAA;;0BAajE,QAAQ;;;MEfA,sCAAsC,CAAA;AAajD,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAZ1C,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACrC,IAAM,CAAA,MAAA,GAAG,IAAI,OAAO,CAA+B,CAAC,OAAO,EAAE,MAAM,KAAI;AACrE,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACxB,SAAC,CAAC,CAAC;;QAGH,IAAiB,CAAA,iBAAA,GAAmC,EAAE,CAAC;KAKT;IAE9C,MAAM,GAAA;QACJ,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAED,IAAA,cAAc,CAAC,QAAsC,EAAA;AACnD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACzB;+GAtBU,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAtC,sCAAsC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXnD,ykCAoCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BY,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAET,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBANlD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,EAErC,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,UAAU,CAAC,EAAA,QAAA,EAAA,ykCAAA,EAAA,CAAA;;;MEuCV,sCAAsC,CAAA;AAgHjD,IAAA,WAAA,CACU,YAAiC,EACjC,cAA8B,EAC9B,YAA0B,EAC1B,KAAmB,EACnB,cAA8B,EAC9B,gBAAkC,EAClC,GAAwB,EAAA;QANxB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAqB;QACjC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QACnB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAqB;QAtHlC,IAAI,CAAA,IAAA,GAAgC,EAAE,CAAC;AACvC,QAAA,IAAA,CAAA,OAAO,GAAa;AAClB,YAAA,IAAI,oBAAoB,CACtB;AACE,gBAAA,2BAA2B,EAAE,cAAc;aAC5C,EACD,OAAO,IAAG;gBACR,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5F,gBAAA,OAAO,QAAQ,EAAE,YAAY,IAAI,QAAQ,CAAC;AAC5C,aAAC,CACF;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;AAC3B,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;AAC1B,gBAAA,qBAAqB,EAAE,kCAAkC;AAC1D,aAAA;SACF,CAAC;AACF,QAAA,IAAA,CAAA,cAAc,GAAoB;AAChC,YAAA;gBACE,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,gBAAA,QAAQ,EAAE,OAAO,KAAgC,KAAI;oBACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC;AAEjE,oBAAA,IAAI;AACF,wBAAA,IAAI,MAAiC,CAAC;AACtC,wBAAA,IAAI,QAAQ,CAAC,YAAY,EAAE;AACzB,4BAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;yBAC5D;6BAAM;AACL,4BAAA,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;yBAC/D;wBAED,IAAI,CAAC,MAAM,EAAE;4BACX,OAAO;yBACR;wBAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;qBAChD;oBAAC,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,wBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC3D;oBACD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf;AACF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,gBAAA,QAAQ,EAAE,OAAO,KAAgC,KAAI;oBACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAC5C,OAAO,CAAC,iBAAiB,CAAC,EAC1B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3B,OAAO,CACL,CAAA,8EAAA,CAAgF,CACjF,EACD,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,CAC7B,EACD,MAAM,CAAC,MAAM,EACb,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CACrD,CAAC;oBACF,IAAI,CAAC,MAAM,EAAE;wBACX,OAAO;qBACR;oBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC;AAEjE,oBAAA,IAAI;wBACF,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;qBAClD;oBAAC,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,wBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC7D;oBACD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf;AACF,aAAA;SACF,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAe;AACvB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE,CAAC;SACf,CAAC;AACF,QAAA,IAAA,CAAA,cAAc,GAAmB;AAC/B,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,IAAiB,CAAA,iBAAA,GAAmC,EAAE,CAAC;AACvD,QAAA,IAAA,CAAA,SAAS,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAa7C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,WAA6B,CAAC;QAC1F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAClE,IAAI,YAAY,EAAE;AACV,YAAA,YAAa,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC5C;KACF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjF,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3F,QAAA,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IACjC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAC3D,CAAC;KACH;AAED,IAAA,MAAM,WAAW,GAAA;QACf,IAAI,QAAQ,GAAiC,IAAI,CAAC;QAClD,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,IAAI;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE;AAChF,oBAAA,YAAY,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAC5D,iBAAA,CAAC,CAAC;AACH,gBAAA,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;aAC1C;YAAC,OAAO,CAAC,EAAE;;gBAEV,OAAO;aACR;SACF;aAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,YAAA,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACtC;aAAM;YACL,OAAO;SACR;AAED,QAAA,IAAI;YACF,IAAI,cAAc,GAA8B,IAAI,CAAC;AACrD,YAAA,IAAI,QAAQ,CAAC,WAAW,EAAE;gBACxB,cAAc,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5D;iBAAM;AACL,gBAAA,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACzE;YACD,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAO;aACR;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;SAChD;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,mCAAmC,CAAC,aAAwC,EAAA;AAC1E,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;KACpF;AAED,IAAA,MAAM,mBAAmB,CAAC,QAAgB,EAAE,aAAwC,EAAA;QAClF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW,CAAC;SACpB;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;KACrE;AAED,IAAA,MAAM,kBAAkB,CAAC,QAAgB,EAAE,QAAsC,EAAA;QAC/E,IAAI,aAAa,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;AACxD,QAAA,IAAI,QAAQ,CAAC,+BAA+B,EAAE;AAC5C,YAAA,MAAM,yBAAyB,GAAG,MAAM,QAAQ,CAAC,+BAA+B,EAAE,CAAC;YACnF,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,yBAAyB,EAAE,CAAC;SACpE;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW,CAAC;SACpB;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;KAClE;IAED,MAAM,sBAAsB,CAC1B,oBAAwD,EAAA;QAExD,MAAM,EAAE,uCAAuC,EAAE,GAAG,MAAM,OACxD,0CAA0C,CAC3C,CAAC;AAEF,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE;AACjF,gBAAA,YAAY,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE;AACrD,aAAA,CAAC,CAAC;YACH,QAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,EAA+B;SACrE;QAAC,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,IAAI,CAAC;SACb;KACF;+GA9NU,sCAAsC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sCAAsC,EChDnD,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8nCAwCA,EDDI,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,qzBACd,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EACtB,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,+GACnB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAGP,sCAAsC,EAAA,UAAA,EAAA,CAAA;kBAdlD,SAAS;+BACE,sCAAsC,EAAA,UAAA,EAEpC,IAAI,EACP,OAAA,EAAA;wBACP,cAAc;wBACd,cAAc;wBACd,qBAAqB;wBACrB,sBAAsB;wBACtB,aAAa;wBACb,mBAAmB;wBACnB,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,8nCAAA,EAAA,CAAA;;;AEvCU,MAAA,sCAAsC,GAAG;AACpD,IAAA,SAAS,CAAC;AACR,QAAA,SAAS,EAAE,sCAAsC;AACjD,QAAA,KAAK,EAAEE,SAAO,CAAC,eAAe,CAAC;AAC/B,QAAA,IAAI,EAAE,eAAe;AACrB,QAAA,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,WAAW,CAAC,MAAM;QAC3B,WAAW,EAAE,CAAC,uBAAuB,CAAC;KACvC,CAAC;;;ACfJ;;AAEG;;;;"}
|
|
@@ -5,6 +5,7 @@ import * as i2 from '@c8y/ngx-components';
|
|
|
5
5
|
import { Permissions, ContextRouteService, ViewContext } from '@c8y/ngx-components';
|
|
6
6
|
import { gettext } from '@c8y/ngx-components/gettext';
|
|
7
7
|
import { defer, shareReplay } from 'rxjs';
|
|
8
|
+
import { uniqWith, isEqual, intersectionWith } from 'lodash';
|
|
8
9
|
|
|
9
10
|
const CREDENTIALS_TYPES = {
|
|
10
11
|
NONE: {
|
|
@@ -124,6 +125,16 @@ class RemoteAccessService {
|
|
|
124
125
|
getProtocolProviders() {
|
|
125
126
|
return this.serviceRegistry.get('remoteAccessProtocolHook');
|
|
126
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Retrieves all supported protocol providers for a given device.
|
|
130
|
+
* Based on the declarations in the fragment c8y_RemoteAccessSupportedProtocols of the device managed object.
|
|
131
|
+
*/
|
|
132
|
+
getSupportedProtocolProvidersFor(device) {
|
|
133
|
+
const { c8y_RemoteAccessSupportedProtocols = [] } = device;
|
|
134
|
+
const uniqueInput = uniqWith(c8y_RemoteAccessSupportedProtocols.map(p => p.toUpperCase()), isEqual);
|
|
135
|
+
const supportedProviders = intersectionWith(this.getProtocolProviders(), uniqueInput, ({ protocolName }, protocol) => protocolName?.toUpperCase() === protocol);
|
|
136
|
+
return supportedProviders?.length > 0 ? supportedProviders : this.getProtocolProviders();
|
|
137
|
+
}
|
|
127
138
|
/**
|
|
128
139
|
* Creates a new configuration for a given device.
|
|
129
140
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-remote-access-data.mjs","sources":["../../remote-access/data/remote-access.service.ts","../../remote-access/data/c8y-ngx-components-remote-access-data.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';\nimport { FetchClient, IManagedObject } from '@c8y/client';\nimport {\n ContextRouteService,\n Permissions,\n ServiceRegistry,\n ViewContext\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Observable, defer, shareReplay } from 'rxjs';\n\nexport interface RemoteAccessConfiguration {\n id: string;\n name: string;\n hostname: string;\n port: number;\n protocol: string;\n attrs?: any;\n credentials?: any;\n credentialsType?: string;\n}\n\nexport const CREDENTIALS_TYPES = {\n NONE: {\n name: 'NONE',\n value: 'NONE',\n label: gettext('No password')\n },\n USER_PASS: {\n name: 'USER_PASS',\n value: 'USER_PASS',\n label: gettext('Username and password')\n },\n PASS_ONLY: {\n name: 'PASS_ONLY',\n value: 'PASS_ONLY',\n label: gettext('Password only')\n },\n KEY_PAIR: {\n name: 'KEY_PAIR',\n value: 'KEY_PAIR',\n label: gettext('Public/private keys')\n },\n CERTIFICATE: {\n name: 'CERTIFICATE',\n value: 'CERTIFICATE',\n label: gettext('Certificate')\n }\n} as const;\n\nexport const canActivateRemoteAccess: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const permissions = inject(Permissions);\n const remoteAccessService = inject(RemoteAccessService);\n const contextRouteService = inject(ContextRouteService);\n if (!permissions.hasRole(Permissions.ROLE_REMOTE_ACCESS_ADMIN)) {\n return false;\n }\n\n const contextDetails = contextRouteService.getContextData(route);\n if (contextDetails.context !== ViewContext.Device) {\n return false;\n }\n\n const device = contextDetails.contextData as IManagedObject;\n if (!device || !Array.isArray(device.c8y_SupportedOperations)) {\n return false;\n }\n const supportedOperations: string[] = device.c8y_SupportedOperations;\n if (!supportedOperations.includes('c8y_RemoteAccessConnect')) {\n return false;\n }\n return remoteAccessService.isAvailable$();\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteAccessService {\n private cachedIsAvailable$: Observable<boolean>;\n readonly baseUrl = '/service/remoteaccess';\n constructor(\n private fetchClient: FetchClient,\n private serviceRegistry: ServiceRegistry\n ) {}\n\n /**\n * Verifies if the remote access service is available by sending a HEAD request to is's health endpoint.\n * @returns cached Observable that emits true if the service is available, false otherwise.\n */\n isAvailable$(): Observable<boolean> {\n if (!this.cachedIsAvailable$) {\n this.cachedIsAvailable$ = defer(() => this.healthEndpointAvailable()).pipe(shareReplay(1));\n }\n\n return this.cachedIsAvailable$;\n }\n\n /**\n * misses the leading ? for the query params\n */\n getAuthQueryParamsForWebsocketConnection() {\n const { headers } = this.fetchClient.getFetchOptions();\n const params = new URLSearchParams();\n\n if (headers) {\n const xsrfToken = headers['X-XSRF-TOKEN'];\n const auth = headers['Authorization'];\n\n if (xsrfToken) {\n params.append('XSRF-TOKEN', xsrfToken);\n }\n if (auth) {\n params.append('token', auth.replace('Bearer ', '').replace('Basic ', ''));\n }\n }\n\n const paramsString = params.toString();\n return paramsString;\n }\n\n /**\n * Returns the URI for the websocket connection to the remote access service.\n */\n getWebSocketUri<K extends string, I extends string>(deviceId: K, configurationId: I) {\n const authQueryParams = this.getAuthQueryParamsForWebsocketConnection();\n const protocol = window.location.protocol === 'http:' ? 'ws' : 'wss';\n const pathName =\n `${protocol}://${window.location.host}${this.baseUrl}/client/${deviceId}/configurations/${configurationId}` as const;\n return authQueryParams ? (`${pathName}?${authQueryParams}` as const) : pathName;\n }\n\n /**\n * Retrieves all configurations for a given device.\n */\n async listConfigurations(deviceId: string): Promise<RemoteAccessConfiguration[]> {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations`\n );\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to fetch configurations for device ${deviceId}`);\n }\n\n /**\n * Deletes a configuration for a given device.\n */\n async deleteConfiguration(deviceId: string, configurationId: string) {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations/${configurationId}`,\n { method: 'DELETE' }\n );\n\n if (response.ok) {\n return;\n }\n\n throw new Error(`Failed to delete configuration for device ${deviceId}`);\n }\n\n /**\n * Retrieves all available remote access protocol providers.\n */\n getProtocolProviders() {\n return this.serviceRegistry.get('remoteAccessProtocolHook');\n }\n\n /**\n * Creates a new configuration for a given device.\n */\n async addConfiguration(\n deviceId: string,\n configuration: Omit<RemoteAccessConfiguration, 'id'>\n ): Promise<RemoteAccessConfiguration> {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(configuration)\n }\n );\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to add configuration for device ${configuration.attrs.deviceId}`);\n }\n\n /**\n * Updates a configuration for a given device.\n */\n async updateConfiguration(\n deviceId: string,\n configuration: RemoteAccessConfiguration\n ): Promise<RemoteAccessConfiguration> {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations/${configuration.id}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(configuration)\n }\n );\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to update configuration for device ${configuration.attrs.deviceId}`);\n }\n\n /**\n * Generates a SSH key pair for a given hostname.\n */\n async generateKeyPair(hostname: string): Promise<{ publicKey: string; privateKey: string }> {\n const response = await this.fetchClient.fetch(`${this.baseUrl}/keypair/generate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ hostname })\n });\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to generate key pair for ${hostname}`);\n }\n\n private async healthEndpointAvailable(): Promise<boolean> {\n try {\n const response = await this.fetchClient.fetch(`${this.baseUrl}/health`, {\n method: 'HEAD',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n if (response.ok) {\n return !!response.ok;\n }\n } catch (e) {\n return false;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-remote-access-data.mjs","sources":["../../remote-access/data/remote-access.service.ts","../../remote-access/data/c8y-ngx-components-remote-access-data.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';\nimport { FetchClient, IManagedObject } from '@c8y/client';\nimport {\n ContextRouteService,\n Permissions,\n ServiceRegistry,\n ViewContext\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Observable, defer, shareReplay } from 'rxjs';\nimport { RemoteAccessProtocolProvider } from './remote-access-protocol-provider';\nimport { uniqWith, intersectionWith, isEqual } from 'lodash';\n\nexport interface RemoteAccessConfiguration {\n id: string;\n name: string;\n hostname: string;\n port: number;\n protocol: string;\n attrs?: any;\n credentials?: any;\n credentialsType?: string;\n}\n\nexport const CREDENTIALS_TYPES = {\n NONE: {\n name: 'NONE',\n value: 'NONE',\n label: gettext('No password')\n },\n USER_PASS: {\n name: 'USER_PASS',\n value: 'USER_PASS',\n label: gettext('Username and password')\n },\n PASS_ONLY: {\n name: 'PASS_ONLY',\n value: 'PASS_ONLY',\n label: gettext('Password only')\n },\n KEY_PAIR: {\n name: 'KEY_PAIR',\n value: 'KEY_PAIR',\n label: gettext('Public/private keys')\n },\n CERTIFICATE: {\n name: 'CERTIFICATE',\n value: 'CERTIFICATE',\n label: gettext('Certificate')\n }\n} as const;\n\nexport const canActivateRemoteAccess: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const permissions = inject(Permissions);\n const remoteAccessService = inject(RemoteAccessService);\n const contextRouteService = inject(ContextRouteService);\n if (!permissions.hasRole(Permissions.ROLE_REMOTE_ACCESS_ADMIN)) {\n return false;\n }\n\n const contextDetails = contextRouteService.getContextData(route);\n if (contextDetails.context !== ViewContext.Device) {\n return false;\n }\n\n const device = contextDetails.contextData as IManagedObject;\n if (!device || !Array.isArray(device.c8y_SupportedOperations)) {\n return false;\n }\n const supportedOperations: string[] = device.c8y_SupportedOperations;\n if (!supportedOperations.includes('c8y_RemoteAccessConnect')) {\n return false;\n }\n return remoteAccessService.isAvailable$();\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RemoteAccessService {\n private cachedIsAvailable$: Observable<boolean>;\n readonly baseUrl = '/service/remoteaccess';\n constructor(\n private fetchClient: FetchClient,\n private serviceRegistry: ServiceRegistry\n ) {}\n\n /**\n * Verifies if the remote access service is available by sending a HEAD request to is's health endpoint.\n * @returns cached Observable that emits true if the service is available, false otherwise.\n */\n isAvailable$(): Observable<boolean> {\n if (!this.cachedIsAvailable$) {\n this.cachedIsAvailable$ = defer(() => this.healthEndpointAvailable()).pipe(shareReplay(1));\n }\n\n return this.cachedIsAvailable$;\n }\n\n /**\n * misses the leading ? for the query params\n */\n getAuthQueryParamsForWebsocketConnection() {\n const { headers } = this.fetchClient.getFetchOptions();\n const params = new URLSearchParams();\n\n if (headers) {\n const xsrfToken = headers['X-XSRF-TOKEN'];\n const auth = headers['Authorization'];\n\n if (xsrfToken) {\n params.append('XSRF-TOKEN', xsrfToken);\n }\n if (auth) {\n params.append('token', auth.replace('Bearer ', '').replace('Basic ', ''));\n }\n }\n\n const paramsString = params.toString();\n return paramsString;\n }\n\n /**\n * Returns the URI for the websocket connection to the remote access service.\n */\n getWebSocketUri<K extends string, I extends string>(deviceId: K, configurationId: I) {\n const authQueryParams = this.getAuthQueryParamsForWebsocketConnection();\n const protocol = window.location.protocol === 'http:' ? 'ws' : 'wss';\n const pathName =\n `${protocol}://${window.location.host}${this.baseUrl}/client/${deviceId}/configurations/${configurationId}` as const;\n return authQueryParams ? (`${pathName}?${authQueryParams}` as const) : pathName;\n }\n\n /**\n * Retrieves all configurations for a given device.\n */\n async listConfigurations(deviceId: string): Promise<RemoteAccessConfiguration[]> {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations`\n );\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to fetch configurations for device ${deviceId}`);\n }\n\n /**\n * Deletes a configuration for a given device.\n */\n async deleteConfiguration(deviceId: string, configurationId: string) {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations/${configurationId}`,\n { method: 'DELETE' }\n );\n\n if (response.ok) {\n return;\n }\n\n throw new Error(`Failed to delete configuration for device ${deviceId}`);\n }\n\n /**\n * Retrieves all available remote access protocol providers.\n */\n getProtocolProviders() {\n return this.serviceRegistry.get('remoteAccessProtocolHook');\n }\n\n /**\n * Retrieves all supported protocol providers for a given device.\n * Based on the declarations in the fragment c8y_RemoteAccessSupportedProtocols of the device managed object.\n */\n getSupportedProtocolProvidersFor(device: IManagedObject): RemoteAccessProtocolProvider[] {\n const { c8y_RemoteAccessSupportedProtocols = [] } = device;\n const uniqueInput = uniqWith(\n c8y_RemoteAccessSupportedProtocols.map(p => p.toUpperCase()),\n isEqual\n );\n const supportedProviders = intersectionWith(\n this.getProtocolProviders(),\n uniqueInput,\n ({ protocolName }, protocol) => protocolName?.toUpperCase() === protocol\n );\n return supportedProviders?.length > 0 ? supportedProviders : this.getProtocolProviders();\n }\n\n /**\n * Creates a new configuration for a given device.\n */\n async addConfiguration(\n deviceId: string,\n configuration: Omit<RemoteAccessConfiguration, 'id'>\n ): Promise<RemoteAccessConfiguration> {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(configuration)\n }\n );\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to add configuration for device ${configuration.attrs.deviceId}`);\n }\n\n /**\n * Updates a configuration for a given device.\n */\n async updateConfiguration(\n deviceId: string,\n configuration: RemoteAccessConfiguration\n ): Promise<RemoteAccessConfiguration> {\n const response = await this.fetchClient.fetch(\n `${this.baseUrl}/devices/${deviceId}/configurations/${configuration.id}`,\n {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(configuration)\n }\n );\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to update configuration for device ${configuration.attrs.deviceId}`);\n }\n\n /**\n * Generates a SSH key pair for a given hostname.\n */\n async generateKeyPair(hostname: string): Promise<{ publicKey: string; privateKey: string }> {\n const response = await this.fetchClient.fetch(`${this.baseUrl}/keypair/generate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ hostname })\n });\n\n if (response.ok) {\n return response.json();\n }\n\n throw new Error(`Failed to generate key pair for ${hostname}`);\n }\n\n private async healthEndpointAvailable(): Promise<boolean> {\n try {\n const response = await this.fetchClient.fetch(`${this.baseUrl}/health`, {\n method: 'HEAD',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n if (response.ok) {\n return !!response.ok;\n }\n } catch (e) {\n return false;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/locales/ko.po
CHANGED
|
@@ -16299,7 +16299,8 @@ msgstr "설정이 플랫폼 수준에서 실행됩니다."
|
|
|
16299
16299
|
|
|
16300
16300
|
msgid "The successfully enrolled devices can now request signed certificates and use them to\n"
|
|
16301
16301
|
" connect and authenticate to the platform via certificate-based authentication."
|
|
16302
|
-
msgstr ""
|
|
16302
|
+
msgstr "성공적으로 등록된 디바이스는 이제 서명된 인증서를 요청하고, 이를 사용하여 인증서 기반 인증을 통해 플랫폼에 연결하고 인증할 수 있습니다\n"
|
|
16303
|
+
" ."
|
|
16303
16304
|
|
|
16304
16305
|
msgid "The target URL did not accept the connection yet."
|
|
16305
16306
|
msgstr "대상 URL에서 아직 연결을 수락하지 않았습니다."
|