@c8y/ngx-components 1021.59.1 → 1021.60.0
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/core/router/scoped-context-route.service.d.ts +2 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts +1 -1
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -1
- package/esm2022/core/router/scoped-context-route.service.mjs +32 -33
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +3 -3
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +2 -2
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +2 -2
- package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +12 -9
- package/esm2022/register-device/general/general-device-registration.component.mjs +3 -3
- package/esm2022/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.mjs +4 -4
- package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +3 -3
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +8 -8
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +2 -2
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +21 -20
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +4 -4
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +29 -30
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +46 -51
- package/locales/es.po +25 -31
- package/locales/fr.po +30 -35
- package/locales/ja_JP.po +24 -32
- package/locales/ko.po +26 -31
- package/locales/locales.pot +3 -3
- package/locales/nl.po +26 -31
- package/locales/pl.po +27 -32
- package/locales/pt_BR.po +25 -30
- package/locales/zh_CN.po +27 -32
- package/locales/zh_TW.po +28 -33
- package/package.json +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts +3 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
|
@@ -28,7 +28,7 @@ class DeviceProvisionedCertificatesService {
|
|
|
28
28
|
const url = `/inventory/managedObjects/${device.id}/user`;
|
|
29
29
|
const res = await this.client.fetch(url, { method });
|
|
30
30
|
const data = await res.json();
|
|
31
|
-
if (res.status
|
|
31
|
+
if (res.status >= 400) {
|
|
32
32
|
throw new Error(data.message);
|
|
33
33
|
}
|
|
34
34
|
return data.userName;
|
|
@@ -51,7 +51,7 @@ class DeviceProvisionedCertificatesGuard {
|
|
|
51
51
|
}
|
|
52
52
|
try {
|
|
53
53
|
const provisionedCertificates = await this.deviceProvisionedCertificatesService.getDeviceProvisionedCertificates(contextData);
|
|
54
|
-
return provisionedCertificates
|
|
54
|
+
return provisionedCertificates?.length > 0;
|
|
55
55
|
}
|
|
56
56
|
catch (error) {
|
|
57
57
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-device-provisioned-certificates.mjs","sources":["../../device-provisioned-certificates/device-provisioned-certificates.service.ts","../../device-provisioned-certificates/device-provisioned-certificates.guard.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.html","../../device-provisioned-certificates/device-provisioned-certificates.module.ts","../../device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.ts"],"sourcesContent":["import { FetchClient, IManagedObject, UserService } from '@c8y/client';\nimport { Injectable } from '@angular/core';\nimport { ProvisionedCertificate } from './device-tab-provisioned-certificates.component';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesService {\n constructor(\n private userService: UserService,\n private client: FetchClient\n ) {}\n\n async getDeviceProvisionedCertificates(\n device: IManagedObject\n ): Promise<ProvisionedCertificate[]> {\n const deviceId = await this.getDeviceUserName(device);\n const { data } = await this.userService.detail(deviceId, { withCertificates: true });\n return data.provisionedCertificates;\n }\n\n private async getDeviceUserName(device): Promise<string> {\n const method = 'GET';\n const url = `/inventory/managedObjects/${device.id}/user`;\n const res = await this.client.fetch(url, { method });\n const data = await res.json();\n if (res.status > 400) {\n throw new Error(data.message);\n }\n return data.userName;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesGuard {\n constructor(private deviceProvisionedCertificatesService: DeviceProvisionedCertificatesService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const contextData = route.data.contextData || route.parent.data.contextData;\n if (!contextData) {\n return false;\n }\n try {\n const provisionedCertificates =\n await this.deviceProvisionedCertificatesService.getDeviceProvisionedCertificates(\n contextData\n );\n return provisionedCertificates && provisionedCertificates.length > 0;\n } catch (error) {\n return false;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AlertService, gettext, ModalService, PX_ACTIONS, Status } from '@c8y/ngx-components';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrlService, IManagedObject } from '@c8y/client';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { switchMap, map, tap, finalize, shareReplay } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport type ProvisionedCertificate = { serialNumber: string; validTill: string };\n\n@Component({\n selector: 'device-tab-serials-component',\n templateUrl: './device-tab-provisioned-certificates.component.html'\n})\nexport class DeviceTabProvisionedCertificatesComponent implements OnInit {\n reloading = false;\n reload: BehaviorSubject<void> = new BehaviorSubject(null);\n provisionedCertificates: Observable<ProvisionedCertificate[]> = this.reload.pipe(\n tap(() => {\n this.reloading = true;\n }),\n map(() => this.route.snapshot.parent.data.contextData as IManagedObject),\n switchMap(device => this.deviceSerialsService.getDeviceProvisionedCertificates(device)),\n tap(() => {\n this.reloading = false;\n }),\n shareReplay(1),\n finalize(() => {\n this.reloading = false;\n })\n );\n\n protected readonly PX_ACTIONS = PX_ACTIONS;\n\n constructor(\n private alertService: AlertService,\n private modalService: ModalService,\n private deviceSerialsService: DeviceProvisionedCertificatesService,\n private crlService: CrlService,\n private route: ActivatedRoute,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n this.reload.next();\n }\n\n highlightDependingOnExpirationStatus(item: ProvisionedCertificate) {\n const warningOffset = 24 * 60 * 60 * 1000 * 90; // 90 days\n const todayTimestamp = new Date().getTime();\n const warningTimestamp = new Date().getTime() + warningOffset;\n const notAfterTimestamp = new Date(item.validTill).getTime();\n const expired = notAfterTimestamp < todayTimestamp;\n const expiresInLessThan90Days = notAfterTimestamp < warningTimestamp;\n if (expired) {\n return 'text-danger';\n }\n if (expiresInLessThan90Days) {\n return 'text-warning';\n }\n return '';\n }\n\n async revokeProvisionedCertificate(provisionedCertificate: ProvisionedCertificate) {\n if (provisionedCertificate) {\n try {\n const serialNumberInHex = provisionedCertificate.serialNumber;\n await this.confirmRevocation(serialNumberInHex);\n await this.crlService.uploadCrls([{ serialNumberInHex }]);\n } catch (error) {\n this.alertService.addServerFailure(error);\n } finally {\n this.reload.next();\n }\n }\n }\n\n private async confirmRevocation(serialNumber: string) {\n return await this.modalService.confirm(\n gettext('Revoke provisioned certificate'),\n this.translateService.instant(\n gettext(\n `You are about to revoke provisioned certificate {{ serialNumber }}. Do you want to proceed?`\n ),\n { serialNumber }\n ),\n Status.DANGER,\n { ok: gettext('Revoke'), cancel: gettext('Cancel') }\n );\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"reload.next()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<!-- TODO: Add link to the mentioned documentation when it's available -->\n<c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No provisioned certificates to display.' | translate\"\n *ngIf=\"(provisionedCertificates | async)?.length === 0\"\n></c8y-ui-empty-state>\n\n<div\n [ngStyle]=\"{ width: '50%' }\"\n *ngIf=\"(provisionedCertificates | async)?.length > 0\"\n>\n <div class=\"bg-level-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Provisioned certificates\n </div>\n </div>\n <div class=\"p-16\">\n <c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item\"\n style=\"display: block !important\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-60\">\n <div class=\"col-5\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Serial No.' | translate }} \"\n >\n {{ 'Serial No.' | translate }}\n </span>\n </div>\n <div class=\"col-6\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}\"\n >\n {{ 'Expiration date' | translate }}\n </span>\n </div>\n <div class=\"col-1\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <c8y-li\n *ngFor=\"let provisionedCertificate of provisionedCertificates | async; let i = index\"\n >\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-5\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Serial No.' | translate }}: {{ provisionedCertificate.serialNumber }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Serial No.\n </span>\n {{ provisionedCertificate.serialNumber }}\n </div>\n </div>\n\n <div class=\"col-6\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}: {{\n provisionedCertificate.validTill | c8yDate\n }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Expiration date\n </span>\n <small\n *ngIf=\"provisionedCertificate.validTill\"\n [ngClass]=\"highlightDependingOnExpirationStatus(provisionedCertificate)\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"calendar\"\n *ngIf=\"!highlightDependingOnExpirationStatus(provisionedCertificate)\"\n ></i>\n <i\n class=\"m-r-4\"\n c8yIcon=\"warning\"\n *ngIf=\"highlightDependingOnExpirationStatus(provisionedCertificate)\"\n ></i>\n <span>{{ provisionedCertificate.validTill | c8yDate }}</span>\n </small>\n </div>\n </div>\n <div class=\"col-1\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n title=\"{{ 'Revoke' | translate }}\"\n type=\"button\"\n (click)=\"revokeProvisionedCertificate(provisionedCertificate)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, hookRoute, gettext, ViewContext } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DeviceProvisionedCertificatesGuard } from './device-provisioned-certificates.guard';\nimport { DeviceTabProvisionedCertificatesComponent } from './device-tab-provisioned-certificates.component';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\n\n@NgModule({\n declarations: [DeviceTabProvisionedCertificatesComponent],\n exports: [],\n imports: [CoreModule, TooltipModule, ReactiveFormsModule, ButtonsModule, PopoverModule],\n providers: [\n hookRoute([\n {\n context: ViewContext.Device,\n path: 'device-provisioned-certificates',\n component: DeviceTabProvisionedCertificatesComponent,\n label: gettext('x509'),\n icon: 'c8y-device-profile',\n canActivate: [DeviceProvisionedCertificatesGuard]\n }\n ]),\n DeviceProvisionedCertificatesService,\n DeviceProvisionedCertificatesGuard\n ]\n})\nexport class DeviceProvisionedCertificatesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DeviceProvisionedCertificatesService","i1","i2.DeviceProvisionedCertificatesService","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-device-provisioned-certificates.mjs","sources":["../../device-provisioned-certificates/device-provisioned-certificates.service.ts","../../device-provisioned-certificates/device-provisioned-certificates.guard.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.ts","../../device-provisioned-certificates/device-tab-provisioned-certificates.component.html","../../device-provisioned-certificates/device-provisioned-certificates.module.ts","../../device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.ts"],"sourcesContent":["import { FetchClient, IManagedObject, UserService } from '@c8y/client';\nimport { Injectable } from '@angular/core';\nimport { ProvisionedCertificate } from './device-tab-provisioned-certificates.component';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesService {\n constructor(\n private userService: UserService,\n private client: FetchClient\n ) {}\n\n async getDeviceProvisionedCertificates(\n device: IManagedObject\n ): Promise<ProvisionedCertificate[] | undefined> {\n const deviceId = await this.getDeviceUserName(device);\n const { data } = await this.userService.detail(deviceId, { withCertificates: true });\n return data.provisionedCertificates;\n }\n\n private async getDeviceUserName(device): Promise<string> {\n const method = 'GET';\n const url = `/inventory/managedObjects/${device.id}/user`;\n const res = await this.client.fetch(url, { method });\n const data = await res.json();\n if (res.status >= 400) {\n throw new Error(data.message);\n }\n return data.userName;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\n@Injectable()\nexport class DeviceProvisionedCertificatesGuard {\n constructor(private deviceProvisionedCertificatesService: DeviceProvisionedCertificatesService) {}\n\n async canActivate(route: ActivatedRouteSnapshot) {\n const contextData = route.data.contextData || route.parent.data.contextData;\n if (!contextData) {\n return false;\n }\n try {\n const provisionedCertificates =\n await this.deviceProvisionedCertificatesService.getDeviceProvisionedCertificates(\n contextData\n );\n return provisionedCertificates?.length > 0;\n } catch (error) {\n return false;\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AlertService, gettext, ModalService, PX_ACTIONS, Status } from '@c8y/ngx-components';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { CrlService, IManagedObject } from '@c8y/client';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { switchMap, map, tap, finalize, shareReplay } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport type ProvisionedCertificate = { serialNumber: string; validTill: string };\n\n@Component({\n selector: 'device-tab-serials-component',\n templateUrl: './device-tab-provisioned-certificates.component.html'\n})\nexport class DeviceTabProvisionedCertificatesComponent implements OnInit {\n reloading = false;\n reload: BehaviorSubject<void> = new BehaviorSubject(null);\n provisionedCertificates: Observable<ProvisionedCertificate[]> = this.reload.pipe(\n tap(() => {\n this.reloading = true;\n }),\n map(() => this.route.snapshot.parent.data.contextData as IManagedObject),\n switchMap(device => this.deviceSerialsService.getDeviceProvisionedCertificates(device)),\n tap(() => {\n this.reloading = false;\n }),\n shareReplay(1),\n finalize(() => {\n this.reloading = false;\n })\n );\n\n protected readonly PX_ACTIONS = PX_ACTIONS;\n\n constructor(\n private alertService: AlertService,\n private modalService: ModalService,\n private deviceSerialsService: DeviceProvisionedCertificatesService,\n private crlService: CrlService,\n private route: ActivatedRoute,\n private translateService: TranslateService\n ) {}\n\n ngOnInit(): void {\n this.reload.next();\n }\n\n highlightDependingOnExpirationStatus(item: ProvisionedCertificate) {\n const warningOffset = 24 * 60 * 60 * 1000 * 90; // 90 days\n const todayTimestamp = new Date().getTime();\n const warningTimestamp = new Date().getTime() + warningOffset;\n const notAfterTimestamp = new Date(item.validTill).getTime();\n const expired = notAfterTimestamp < todayTimestamp;\n const expiresInLessThan90Days = notAfterTimestamp < warningTimestamp;\n if (expired) {\n return 'text-danger';\n }\n if (expiresInLessThan90Days) {\n return 'text-warning';\n }\n return '';\n }\n\n async revokeProvisionedCertificate(provisionedCertificate: ProvisionedCertificate) {\n if (provisionedCertificate) {\n try {\n const serialNumberInHex = provisionedCertificate.serialNumber;\n await this.confirmRevocation(serialNumberInHex);\n await this.crlService.uploadCrls([{ serialNumberInHex }]);\n } catch (error) {\n this.alertService.addServerFailure(error);\n } finally {\n this.reload.next();\n }\n }\n }\n\n private async confirmRevocation(serialNumber: string) {\n return await this.modalService.confirm(\n gettext('Revoke provisioned certificate'),\n this.translateService.instant(\n gettext(\n `You are about to revoke provisioned certificate {{ serialNumber }}. Do you want to proceed?`\n ),\n { serialNumber }\n ),\n Status.DANGER,\n { ok: gettext('Revoke'), cancel: gettext('Cancel') }\n );\n }\n}\n","<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"reload.next()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<!-- TODO: Add link to the mentioned documentation when it's available -->\n<c8y-ui-empty-state\n [icon]=\"'certificate'\"\n [title]=\"'No provisioned certificates to display.' | translate\"\n *ngIf=\"(provisionedCertificates | async)?.length === 0\"\n></c8y-ui-empty-state>\n\n<div\n [ngStyle]=\"{ width: '50%' }\"\n *ngIf=\"(provisionedCertificates | async)?.length > 0\"\n>\n <div class=\"bg-level-0\">\n <div class=\"card-header separator\">\n <div\n class=\"card-title\"\n translate\n >\n Provisioned certificates\n </div>\n </div>\n <div class=\"p-16\">\n <c8y-list-group class=\"m-b-24\">\n <div\n class=\"page-sticky-header hidden-xs c8y-list__item\"\n style=\"display: block !important\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-60\">\n <div class=\"col-5\">\n <span\n class=\"text-truncate\"\n title=\" {{ 'Serial No.' | translate }} \"\n >\n {{ 'Serial No.' | translate }}\n </span>\n </div>\n <div class=\"col-6\">\n <span\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}\"\n >\n {{ 'Expiration date' | translate }}\n </span>\n </div>\n <div class=\"col-1\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <c8y-li\n *ngFor=\"let provisionedCertificate of provisionedCertificates | async; let i = index\"\n >\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-5\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Serial No.' | translate }}: {{ provisionedCertificate.serialNumber }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Serial No.\n </span>\n {{ provisionedCertificate.serialNumber }}\n </div>\n </div>\n\n <div class=\"col-6\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Expiration date' | translate }}: {{\n provisionedCertificate.validTill | c8yDate\n }}\"\n >\n <span\n class=\"text-label-small m-t-8 m-r-8 visible-xs-inline\"\n translate\n >\n Expiration date\n </span>\n <small\n *ngIf=\"provisionedCertificate.validTill\"\n [ngClass]=\"highlightDependingOnExpirationStatus(provisionedCertificate)\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"calendar\"\n *ngIf=\"!highlightDependingOnExpirationStatus(provisionedCertificate)\"\n ></i>\n <i\n class=\"m-r-4\"\n c8yIcon=\"warning\"\n *ngIf=\"highlightDependingOnExpirationStatus(provisionedCertificate)\"\n ></i>\n <span>{{ provisionedCertificate.validTill | c8yDate }}</span>\n </small>\n </div>\n </div>\n <div class=\"col-1\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n title=\"{{ 'Revoke' | translate }}\"\n type=\"button\"\n (click)=\"revokeProvisionedCertificate(provisionedCertificate)\"\n >\n <i c8yIcon=\"delete\"></i>\n </button>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, hookRoute, gettext, ViewContext } from '@c8y/ngx-components';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ButtonsModule } from 'ngx-bootstrap/buttons';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { DeviceProvisionedCertificatesGuard } from './device-provisioned-certificates.guard';\nimport { DeviceTabProvisionedCertificatesComponent } from './device-tab-provisioned-certificates.component';\nimport { DeviceProvisionedCertificatesService } from './device-provisioned-certificates.service';\n\n@NgModule({\n declarations: [DeviceTabProvisionedCertificatesComponent],\n exports: [],\n imports: [CoreModule, TooltipModule, ReactiveFormsModule, ButtonsModule, PopoverModule],\n providers: [\n hookRoute([\n {\n context: ViewContext.Device,\n path: 'device-provisioned-certificates',\n component: DeviceTabProvisionedCertificatesComponent,\n label: gettext('x509'),\n icon: 'c8y-device-profile',\n canActivate: [DeviceProvisionedCertificatesGuard]\n }\n ]),\n DeviceProvisionedCertificatesService,\n DeviceProvisionedCertificatesGuard\n ]\n})\nexport class DeviceProvisionedCertificatesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DeviceProvisionedCertificatesService","i1","i2.DeviceProvisionedCertificatesService","i3"],"mappings":";;;;;;;;;;;;;;;MAKa,oCAAoC,CAAA;IAC/C,WACU,CAAA,WAAwB,EACxB,MAAmB,EAAA;QADnB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAa;KACzB;IAEJ,MAAM,gCAAgC,CACpC,MAAsB,EAAA;QAEtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,uBAAuB,CAAC;KACrC;IAEO,MAAM,iBAAiB,CAAC,MAAM,EAAA;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC;AACrB,QAAA,MAAM,GAAG,GAAG,CAAA,0BAAA,EAA6B,MAAM,CAAC,EAAE,OAAO,CAAC;AAC1D,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;+GAvBU,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAApC,oCAAoC,EAAA,CAAA,CAAA,EAAA;;4FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD,UAAU;;;MCCE,kCAAkC,CAAA;AAC7C,IAAA,WAAA,CAAoB,oCAA0E,EAAA;QAA1E,IAAoC,CAAA,oCAAA,GAApC,oCAAoC,CAAsC;KAAI;IAElG,MAAM,WAAW,CAAC,KAA6B,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC5E,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,IAAI;YACF,MAAM,uBAAuB,GAC3B,MAAM,IAAI,CAAC,oCAAoC,CAAC,gCAAgC,CAC9E,WAAW,CACZ,CAAC;AACJ,YAAA,OAAO,uBAAuB,EAAE,MAAM,GAAG,CAAC,CAAC;SAC5C;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,KAAK,CAAC;SACd;KACF;+GAjBU,kCAAkC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oCAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAlC,kCAAkC,EAAA,CAAA,CAAA,EAAA;;4FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;;;MCWE,yCAAyC,CAAA;IAoBpD,WACU,CAAA,YAA0B,EAC1B,YAA0B,EAC1B,oBAA0D,EAC1D,UAAsB,EACtB,KAAqB,EACrB,gBAAkC,EAAA;QALlC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAsC;QAC1D,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QACrB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAzB5C,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAClB,QAAA,IAAA,CAAA,MAAM,GAA0B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAuB,CAAA,uBAAA,GAAyC,IAAI,CAAC,MAAM,CAAC,IAAI,CAC9E,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,SAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAA6B,CAAC,EACxE,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,EACvF,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,EACd,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB,CAAC,CACH,CAAC;QAEiB,IAAU,CAAA,UAAA,GAAG,UAAU,CAAC;KASvC;IAEJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;AAED,IAAA,oCAAoC,CAAC,IAA4B,EAAA;AAC/D,QAAA,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC;AAC9D,QAAA,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;AAC7D,QAAA,MAAM,OAAO,GAAG,iBAAiB,GAAG,cAAc,CAAC;AACnD,QAAA,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;QACrE,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,aAAa,CAAC;SACtB;QACD,IAAI,uBAAuB,EAAE;AAC3B,YAAA,OAAO,cAAc,CAAC;SACvB;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAED,MAAM,4BAA4B,CAAC,sBAA8C,EAAA;QAC/E,IAAI,sBAAsB,EAAE;AAC1B,YAAA,IAAI;AACF,gBAAA,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,YAAY,CAAC;AAC9D,gBAAA,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAChD,gBAAA,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;aAC3D;YAAC,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aAC3C;oBAAS;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;aACpB;SACF;KACF;IAEO,MAAM,iBAAiB,CAAC,YAAoB,EAAA;QAClD,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CACpC,OAAO,CAAC,gCAAgC,CAAC,EACzC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAC3B,OAAO,CACL,CAA6F,2FAAA,CAAA,CAC9F,EACD,EAAE,YAAY,EAAE,CACjB,EACD,MAAM,CAAC,MAAM,EACb,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CACrD,CAAC;KACH;+GA3EU,yCAAyC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oCAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yCAAyC,oECftD,m2IAoIA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,sBAAA,EAAA,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,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,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,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDrHa,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBAJrD,SAAS;+BACE,8BAA8B,EAAA,QAAA,EAAA,m2IAAA,EAAA,CAAA;;;MEiB7B,mCAAmC,CAAA;+GAAnC,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAAnC,mCAAmC,EAAA,YAAA,EAAA,CAlB/B,yCAAyC,CAAA,EAAA,OAAA,EAAA,CAE9C,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;AAgB3E,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,EAfnC,SAAA,EAAA;AACT,YAAA,SAAS,CAAC;AACR,gBAAA;oBACE,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,oBAAA,IAAI,EAAE,iCAAiC;AACvC,oBAAA,SAAS,EAAE,yCAAyC;AACpD,oBAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;AACtB,oBAAA,IAAI,EAAE,oBAAoB;oBAC1B,WAAW,EAAE,CAAC,kCAAkC,CAAC;AAClD,iBAAA;aACF,CAAC;YACF,oCAAoC;YACpC,kCAAkC;SACnC,EAdS,OAAA,EAAA,CAAA,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAgB3E,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAnB/C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,yCAAyC,CAAC;AACzD,oBAAA,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,CAAC;AACvF,oBAAA,SAAS,EAAE;AACT,wBAAA,SAAS,CAAC;AACR,4BAAA;gCACE,OAAO,EAAE,WAAW,CAAC,MAAM;AAC3B,gCAAA,IAAI,EAAE,iCAAiC;AACvC,gCAAA,SAAS,EAAE,yCAAyC;AACpD,gCAAA,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;AACtB,gCAAA,IAAI,EAAE,oBAAoB;gCAC1B,WAAW,EAAE,CAAC,kCAAkC,CAAC;AAClD,6BAAA;yBACF,CAAC;wBACF,oCAAoC;wBACpC,kCAAkC;AACnC,qBAAA;AACF,iBAAA,CAAA;;;AC5BD;;AAEG;;;;"}
|