Browse Source

cleanup

pull/14362/head
Maksym Tsymbarov 9 months ago
parent
commit
7921162d33
  1. 2
      ui-ngx/src/app/modules/login/pages/login/create-password.component.html
  2. 37
      ui-ngx/src/app/modules/login/pages/login/create-password.component.ts
  3. 2
      ui-ngx/src/app/modules/login/pages/login/reset-password.component.html
  4. 35
      ui-ngx/src/app/modules/login/pages/login/reset-password.component.ts
  5. 24
      ui-ngx/src/app/shared/models/password.models.ts
  6. 6
      ui-ngx/src/assets/locale/locale.constant-en_US.json

2
ui-ngx/src/app/modules/login/pages/login/create-password.component.html

@ -42,7 +42,7 @@
formControlName="newPassword"/>
<mat-icon class="material-icons" matPrefix>lock</mat-icon>
<tb-toggle-password matSuffix></tb-toggle-password>
<mat-error *ngIf="passwordErrorsLength > 0">
<mat-error *ngIf="this.createPassword.get('newPassword').errors">
{{ 'security.password-requirement.password-not-meet-requirements' | translate }}
</mat-error>
</mat-form-field>

37
ui-ngx/src/app/modules/login/pages/login/create-password.component.ts

@ -16,15 +16,11 @@
import { Component } from '@angular/core';
import { AuthService } from '@core/auth/auth.service';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { PageComponent } from '@shared/components/page.component';
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ActivatedRoute } from '@angular/router';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { UserPasswordPolicy } from '@shared/models/settings.models';
import { combineLatest } from 'rxjs';
import {
passwordsMatchValidator,
passwordStrengthValidator
@ -37,26 +33,21 @@ import {
})
export class CreatePasswordComponent extends PageComponent {
activateToken = '';
createPassword: UntypedFormGroup;
passwordPolicy: UserPasswordPolicy;
createPassword: FormGroup;
constructor(protected store: Store<AppState>,
private route: ActivatedRoute,
private activateToken: string;
constructor(private route: ActivatedRoute,
private authService: AuthService,
private translate: TranslateService,
private fb: UntypedFormBuilder) {
super(store);
private fb: FormBuilder) {
super();
this.activateToken = this.route.snapshot.queryParams['activateToken'] || '';
combineLatest([
this.route.queryParams,
this.route.data
])
this.route.data
.pipe(takeUntilDestroyed())
.subscribe(([params, data]) => {
this.activateToken = params['activateToken'] || '';
this.passwordPolicy = data['passwordPolicy'];
});
.subscribe((data) => this.passwordPolicy = data['passwordPolicy']);
this.buildCreatePasswordForm();
}
@ -72,17 +63,13 @@ export class CreatePasswordComponent extends PageComponent {
});
}
get passwordErrorsLength(): number {
return Object.keys(this.createPassword.get('newPassword')?.errors ?? {}).length;
}
onCreatePassword() {
if (this.createPassword.invalid) {
this.createPassword.markAllAsTouched();
} else {
this.authService.activate(
this.activateToken,
this.createPassword.get('password').value, true).subscribe();
this.createPassword.get('newPassword').value, true).subscribe();
}
}
}

2
ui-ngx/src/app/modules/login/pages/login/reset-password.component.html

@ -45,7 +45,7 @@
formControlName="newPassword"/>
<mat-icon class="material-icons" matPrefix>lock</mat-icon>
<tb-toggle-password matSuffix></tb-toggle-password>
<mat-error *ngIf="passwordErrorsLength > 0">
<mat-error *ngIf="this.resetPassword.get('newPassword').errors">
{{ 'security.password-requirement.password-not-meet-requirements' | translate }}
</mat-error>
</mat-form-field>

35
ui-ngx/src/app/modules/login/pages/login/reset-password.component.ts

@ -16,13 +16,9 @@
import { Component } from '@angular/core';
import { AuthService } from '@core/auth/auth.service';
import { Store } from '@ngrx/store';
import { AppState } from '@core/core.state';
import { PageComponent } from '@shared/components/page.component';
import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { combineLatest } from 'rxjs';
import { UserPasswordPolicy } from '@shared/models/settings.models';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import {
@ -39,25 +35,22 @@ export class ResetPasswordComponent extends PageComponent {
isExpiredPassword: boolean;
resetToken = '';
resetPassword: UntypedFormGroup;
resetPassword: FormGroup;
passwordPolicy: UserPasswordPolicy;
constructor(protected store: Store<AppState>,
private route: ActivatedRoute,
private resetToken: string;
constructor(private route: ActivatedRoute,
private router: Router,
private authService: AuthService,
private translate: TranslateService,
private fb: UntypedFormBuilder) {
super(store);
combineLatest([
this.route.queryParams,
this.route.data
])
private fb: FormBuilder) {
super();
this.resetToken = this.route.snapshot.queryParams['resetToken'] || '';
this.route.data
.pipe(takeUntilDestroyed())
.subscribe(([params, data]) => {
this.resetToken = params['resetToken'] || '';
.subscribe((data) => {
this.passwordPolicy = data['passwordPolicy'];
this.isExpiredPassword = data['expiredPassword'] ?? false;
});
@ -76,10 +69,6 @@ export class ResetPasswordComponent extends PageComponent {
});
}
get passwordErrorsLength(): number {
return Object.keys(this.resetPassword.get('newPassword')?.errors ?? {}).length;
}
onResetPassword() {
if (this.resetPassword.invalid) {
this.resetPassword.markAllAsTouched();

24
ui-ngx/src/app/shared/models/password.models.ts

@ -18,24 +18,14 @@ import { UserPasswordPolicy } from '@shared/models/settings.models';
import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';
import { isEqual } from '@core/utils';
export enum PasswordErrorMessageKey {
minLength = 'security.password-requirement.password-min-length',
maxLength = 'security.password-requirement.password-max-length',
notUpperCase = 'security.password-requirement.password-uppercase',
notLowerCase = 'security.password-requirement.password-lowercase',
notNumeric = 'security.password-requirement.password-digit',
notSpecial = 'security.password-requirement.password-special-characters',
hasWhitespaces = 'security.password-requirement.password-should-not-contain-spaces',
default = 'security.password-requirement.password-not-meet-requirements'
}
export enum TooltipPasswordErrorMessageKey {
minLength = 'security.password-requirement.password-tooltip-min-length',
maxLength = 'security.password-requirement.password-tooltip-max-length',
notUpperCase = 'security.password-requirement.password-tooltip-uppercase',
notLowerCase = 'security.password-requirement.password-tooltip-lowercase',
notNumeric = 'security.password-requirement.password-tooltip-digit',
notSpecial = 'security.password-requirement.password-tooltip-special-characters'
notSpecial = 'security.password-requirement.password-tooltip-special-characters',
hasWhitespaces = 'security.password-requirement.password-should-not-contain-spaces'
}
export const passwordErrorRules = [
@ -45,6 +35,7 @@ export const passwordErrorRules = [
{ key: 'notNumeric', policyProp: 'minimumDigits', translation: TooltipPasswordErrorMessageKey.notNumeric },
{ key: 'notSpecial', policyProp: 'minimumSpecialCharacters', translation: TooltipPasswordErrorMessageKey.notSpecial },
{ key: 'maxLength', policyProp: 'maximumLength', translation: TooltipPasswordErrorMessageKey.maxLength },
{ key: 'hasWhitespaces', policyProp: 'hasWhitespaces', translation: TooltipPasswordErrorMessageKey.hasWhitespaces },
];
export const passwordsMatchValidator = (firstControlName: string, secondControlName: string): ValidatorFn =>{
@ -59,14 +50,7 @@ export const passwordsMatchValidator = (firstControlName: string, secondControlN
const newPass = newPassControl.value ?? '';
const confirm = confirmControl.value ?? '';
const userInteracted =
confirmControl.touched || confirmControl.dirty || group.touched;
if (!userInteracted) {
return null;
}
if (newPass && confirm !== newPass) {
if ((newPass || confirm) && confirm !== newPass) {
confirmControl.setErrors({ passwordsNotMatch: true });
return { passwordsNotMatch: true };
} else {

6
ui-ngx/src/assets/locale/locale.constant-en_US.json

@ -4418,12 +4418,6 @@
"password-tooltip-lowercase": "{{minimumLowercaseLetters}} lowercase character",
"password-tooltip-digit": "{{minimumDigits}} number",
"password-tooltip-special-characters": "{{minimumSpecialCharacters}} special character",
"password-min-length": "Password must be {{minimumLength}} or more characters in length",
"password-max-length": "Password should be less than {{maximumLength}}",
"password-uppercase": "Password must contain {{minimumUppercaseLetters}} or more uppercase characters",
"password-lowercase": "Password must contain {{minimumLowercaseLetters}} or more lowercase characters",
"password-digit": "Password must contain {{minimumDigits}} or more digit characters",
"password-special-characters": "Password must contain {{minimumSpecialCharacters}} or more special characters",
"incorrect-password-try-again": "Incorrect password. Try again",
"lowercase-letter": "{ count, plural, =1 {1 lowercase letter} other {# lowercase letters} }",
"new-passwords-not-match": "New password didn't match",

Loading…
Cancel
Save