diff --git a/ui-ngx/src/app/core/utils.ts b/ui-ngx/src/app/core/utils.ts index c0a01f3bec..4650caca77 100644 --- a/ui-ngx/src/app/core/utils.ts +++ b/ui-ngx/src/app/core/utils.ts @@ -403,3 +403,15 @@ export function deepTrim(obj: T): T { return acc; }, (Array.isArray(obj) ? [] : {}) as T); } + +export function generateSecret(length?: number): string { + if (isUndefined(length) || length == null) { + length = 1; + } + const l = length > 10 ? 10 : length; + const str = Math.random().toString(36).substr(2, l); + if (str.length >= length) { + return str; + } + return str.concat(generateSecret(length - str.length)); +} diff --git a/ui-ngx/src/app/modules/home/components/profile/device-profile-provision-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device-profile-provision-configuration.component.ts index aaaf81bc04..9793af2748 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device-profile-provision-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device-profile-provision-configuration.component.ts @@ -32,7 +32,7 @@ import { DeviceProvisionType, deviceProvisionTypeTranslationMap } from "@shared/models/device.models"; -import { isDefinedAndNotNull } from "@core/utils"; +import { generateSecret, isDefinedAndNotNull } from '@core/utils'; @Component({ selector: 'tb-device-profile-provision-configuration', @@ -85,10 +85,18 @@ export class DeviceProfileProvisionConfigurationComponent implements ControlValu this.provisionConfigurationFormGroup.get('type').valueChanges.subscribe((type) => { if (type === DeviceProvisionType.DISABLED) { this.provisionConfigurationFormGroup.get('provisionDeviceSecret').disable({emitEvent: false}); - this.provisionConfigurationFormGroup.get('provisionDeviceSecret').patchValue(null,{emitEvent: false}); + this.provisionConfigurationFormGroup.get('provisionDeviceSecret').patchValue(null, {emitEvent: false}); this.provisionConfigurationFormGroup.get('provisionDeviceKey').disable({emitEvent: false}); this.provisionConfigurationFormGroup.get('provisionDeviceKey').patchValue(null); } else { + const provisionDeviceSecret: string = this.provisionConfigurationFormGroup.get('provisionDeviceSecret').value; + if (!provisionDeviceSecret || !provisionDeviceSecret.length) { + this.provisionConfigurationFormGroup.get('provisionDeviceSecret').patchValue(generateSecret(20), {emitEvent: false}); + } + const provisionDeviceKey: string = this.provisionConfigurationFormGroup.get('provisionDeviceKey').value; + if (!provisionDeviceKey || !provisionDeviceKey.length) { + this.provisionConfigurationFormGroup.get('provisionDeviceKey').patchValue(generateSecret(20), {emitEvent: false}); + } this.provisionConfigurationFormGroup.get('provisionDeviceSecret').enable({emitEvent: false}); this.provisionConfigurationFormGroup.get('provisionDeviceKey').enable({emitEvent: false}); }