From baaca200171b7da65342b7c9245f2330d3e977c5 Mon Sep 17 00:00:00 2001 From: mpetrov Date: Thu, 27 Jun 2024 17:16:13 +0300 Subject: [PATCH] fixed security --- .../security-config.component.ts | 58 ++++++++++++++----- .../server-config/server-config.component.ts | 1 + .../lib/gateway/gateway-widget.models.ts | 10 ++-- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/security-config/security-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/security-config/security-config.component.ts index 94f1eb8395..dccd9a6e32 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/security-config/security-config.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/security-config/security-config.component.ts @@ -26,13 +26,15 @@ import { Subject } from 'rxjs'; import { ControlValueAccessor, FormBuilder, + NG_VALIDATORS, NG_VALUE_ACCESSOR, UntypedFormGroup, + ValidationErrors, Validators } from '@angular/forms'; import { - BrokerSecurityType, - BrokerSecurityTypeTranslationsMap, + SecurityType, + SecurityTypeTranslationsMap, ModeType, noLeadTrailSpacesRegex } from '@home/components/widget/lib/gateway/gateway-widget.models'; @@ -52,6 +54,11 @@ import { CommonModule } from '@angular/common'; useExisting: forwardRef(() => SecurityConfigComponent), multi: true }, + { + provide: NG_VALIDATORS, + useExisting: forwardRef(() => SecurityConfigComponent), + multi: true + } ], standalone: true, imports:[ @@ -67,23 +74,25 @@ export class SecurityConfigComponent implements ControlValueAccessor, OnInit, On @coerceBoolean() extendCertificatesModel = false; - BrokerSecurityType = BrokerSecurityType; + BrokerSecurityType = SecurityType; - securityTypes = Object.values(BrokerSecurityType); + securityTypes = Object.values(SecurityType); modeTypes = Object.values(ModeType); - SecurityTypeTranslationsMap = BrokerSecurityTypeTranslationsMap; + SecurityTypeTranslationsMap = SecurityTypeTranslationsMap; securityFormGroup: UntypedFormGroup; private destroy$ = new Subject(); + private propagateChange = (v: any) => {}; + constructor(private fb: FormBuilder) {} ngOnInit(): void { this.securityFormGroup = this.fb.group({ - type: [BrokerSecurityType.ANONYMOUS, []], + type: [SecurityType.ANONYMOUS, []], username: ['', [Validators.required, Validators.pattern(noLeadTrailSpacesRegex)]], password: ['', [Validators.pattern(noLeadTrailSpacesRegex)]], pathToCACert: ['', [Validators.pattern(noLeadTrailSpacesRegex)]], @@ -93,11 +102,12 @@ export class SecurityConfigComponent implements ControlValueAccessor, OnInit, On if (this.extendCertificatesModel) { this.securityFormGroup.addControl('mode', this.fb.control(ModeType.NONE, [])); } + this.securityFormGroup.valueChanges.pipe( + takeUntil(this.destroy$) + ).subscribe((value) => this.updateView(value)); this.securityFormGroup.get('type').valueChanges.pipe( takeUntil(this.destroy$) - ).subscribe((type) => { - this.updateValidators(type); - }); + ).subscribe((type) => this.updateValidators(type)); } ngOnDestroy(): void { @@ -105,13 +115,31 @@ export class SecurityConfigComponent implements ControlValueAccessor, OnInit, On this.destroy$.complete(); } - registerOnChange(fn: any): void {} + writeValue(deviceInfo: any) { + if (!deviceInfo.type) { + deviceInfo.type = SecurityType.ANONYMOUS; + } + this.securityFormGroup.reset(deviceInfo); + this.updateView(deviceInfo); + } + + validate(): ValidationErrors | null { + return this.securityFormGroup.valid ? null : { + securityForm: { valid: false } + }; + } + + updateView(value: any) { + this.propagateChange(value); + } + + registerOnChange(fn: any): void { + this.propagateChange = fn; + } registerOnTouched(fn: any): void {} - writeValue(obj: any): void {} - - private updateValidators(type): void { + private updateValidators(type: SecurityType): void { if (type) { this.securityFormGroup.get('username').disable({emitEvent: false}); this.securityFormGroup.get('password').disable({emitEvent: false}); @@ -119,10 +147,10 @@ export class SecurityConfigComponent implements ControlValueAccessor, OnInit, On this.securityFormGroup.get('pathToPrivateKey').disable({emitEvent: false}); this.securityFormGroup.get('pathToClientCert').disable({emitEvent: false}); this.securityFormGroup.get('mode')?.disable({emitEvent: false}); - if (type === BrokerSecurityType.BASIC) { + if (type === SecurityType.BASIC) { this.securityFormGroup.get('username').enable({emitEvent: false}); this.securityFormGroup.get('password').enable({emitEvent: false}); - } else if (type === BrokerSecurityType.CERTIFICATES) { + } else if (type === SecurityType.CERTIFICATES) { this.securityFormGroup.get('pathToCACert').enable({emitEvent: false}); this.securityFormGroup.get('pathToPrivateKey').enable({emitEvent: false}); this.securityFormGroup.get('pathToClientCert').enable({emitEvent: false}); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/server-config/server-config.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/server-config/server-config.component.ts index 3466387f3c..ffbac95b9f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/server-config/server-config.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/connectors-configuration/server-config/server-config.component.ts @@ -84,6 +84,7 @@ export class ServerConfigComponent implements OnInit, ControlValueAccessor, OnDe ngOnInit(): void { this.addSelfControl(); + } ngOnDestroy(): void { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts index c32baf8d66..ae5e9a2309 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-widget.models.ts @@ -474,7 +474,7 @@ export enum ConnectorConfigurationModes { ADVANCED = 'advanced' } -export enum BrokerSecurityType { +export enum SecurityType { ANONYMOUS = 'anonymous', BASIC = 'basic', CERTIFICATES = 'certificates' @@ -486,11 +486,11 @@ export enum ModeType { SIGNANDENCRYPT = 'SignAndEncrypt' } -export const BrokerSecurityTypeTranslationsMap = new Map( +export const SecurityTypeTranslationsMap = new Map( [ - [BrokerSecurityType.ANONYMOUS, 'gateway.broker.security-types.anonymous'], - [BrokerSecurityType.BASIC, 'gateway.broker.security-types.basic'], - [BrokerSecurityType.CERTIFICATES, 'gateway.broker.security-types.certificates'] + [SecurityType.ANONYMOUS, 'gateway.broker.security-types.anonymous'], + [SecurityType.BASIC, 'gateway.broker.security-types.basic'], + [SecurityType.CERTIFICATES, 'gateway.broker.security-types.certificates'] ] );