UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

1 lines 9.44 kB
{"version":3,"file":"c8y-ngx-components-device-enrolment.mjs","sources":["../../device-enrolment/modal/device-enrolment.service.ts","../../device-enrolment/doc-link.factory.ts","../../device-enrolment/index.ts","../../device-enrolment/c8y-ngx-components-device-enrolment.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { TrustedCertificateService, DeviceRegistrationService } from '@c8y/client';\nimport { FeatureCacheService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceEnrolmentService {\n private trustedCertificateService = inject(TrustedCertificateService);\n private deviceRegistrationService = inject(DeviceRegistrationService);\n private featureCacheService = inject(FeatureCacheService);\n\n async getRegistrationCode(name: string) {\n const available = await this.caAvailableAndConfigured();\n if (available) {\n const otp = this.generateSecurePassword();\n const host = window.location.hostname;\n\n const newDeviceReq: { id: string; [key: string]: string } = {\n id: name,\n name,\n enrollmentToken: otp,\n type: 'thin-edge.io'\n };\n\n try {\n await this.deviceRegistrationService.create(newDeviceReq);\n } catch (e: any) {\n const statusCode = e?.status || e?.res?.status;\n const errorType = e?.data?.error || e?.res?.error;\n\n if (statusCode === 422) {\n if (errorType === 'devicecontrol/Non Unique Result') {\n return {\n error: gettext('Device ID already exists. Please choose a different name.'),\n statusCode,\n errorType: 'duplicate'\n };\n }\n if (errorType === 'undefined/validationError') {\n return {\n error: gettext(\n 'Device ID cannot contain whitespace, slashes or any of (+$:). Please choose a different name.'\n ),\n statusCode,\n errorType: 'validation'\n };\n }\n }\n throw e;\n }\n\n return {\n script: `curl -fsSL https://thin-edge.io/trial-linux.sh | sh -s -- --device-id \"${name}\" --c8y-url \"${host}\" --one-time-password '${otp}'`,\n docker: `curl -fsSL https://thin-edge.io/trial-linux-docker.sh | sh -s -- --device-id \"${name}\" --c8y-url \"${host}\" --one-time-password '${otp}'`\n };\n }\n return { error: gettext('Certificate authority not available.') };\n }\n\n generateSecurePassword(length = 32): string {\n const charset =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+;:,.<>?';\n let password = '';\n const crypto = window.crypto || (window as any).msCrypto;\n const maxValidByte = 256 - (256 % charset.length);\n\n while (password.length < length) {\n const buffer = new Uint8Array(length - password.length);\n crypto.getRandomValues(buffer);\n for (let i = 0; i < buffer.length && password.length < length; i++) {\n const byte = buffer[i];\n if (byte < maxValidByte) {\n password += charset[byte % charset.length];\n }\n }\n }\n\n return password;\n }\n\n async showQuicklink() {\n return this.featureCacheService.getFeatureStatePromise('certificate-authority');\n }\n\n async caAvailableAndConfigured(): Promise<boolean> {\n try {\n const shouldShow =\n await this.featureCacheService.getFeatureStatePromise('certificate-authority');\n\n if (!shouldShow) {\n return false;\n }\n\n const { data: certs } = await this.trustedCertificateService.list({\n certificateAuthority: true\n });\n\n return (certs || []).some(c => c.status === 'ENABLED');\n } catch (e) {\n // ignore\n return false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DocLink, ExtensionFactory } from '@c8y/ngx-components';\nimport { DeviceEnrolmentService } from './modal/device-enrolment.service';\n\n@Injectable()\nexport class DeviceEnrolmentDocLinkFactory implements ExtensionFactory<DocLink> {\n private docLinks: DocLink[] | null = null;\n constructor(private deviceEnrolmentService: DeviceEnrolmentService) {}\n\n async get(): Promise<DocLink[]> {\n if (this.docLinks === null) {\n const available = await this.deviceEnrolmentService.showQuicklink();\n\n this.docLinks = available\n ? [\n {\n icon: 'c8y-icon-duocolor c8y-icon c8y-icon-icon c8y-icon-device-connect',\n label: 'Try thin-edge.io',\n type: 'quicklink',\n url: '?showConnectDevice=true'\n }\n ]\n : [];\n }\n\n return this.docLinks;\n }\n}\n","import { hookDocs, hookQueryParamModal } from '@c8y/ngx-components';\nimport { DeviceEnrolmentDocLinkFactory } from './doc-link.factory';\n\nexport const deviceEnrolmentProviders = [\n hookQueryParamModal({\n queryParam: 'showConnectDevice',\n loadComponent: () =>\n import('@c8y/ngx-components/device-enrolment/modal').then(\n m => m.DeviceEnrolmentModalComponent\n ),\n modalConfig: {\n class: 'modal-md',\n ignoreBackdropClick: true,\n keyboard: false\n }\n }),\n hookDocs(DeviceEnrolmentDocLinkFactory)\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DeviceEnrolmentService"],"mappings":"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"}