From 02f75f2fbfb312880c210694ff26f24b0eb0a1a8 Mon Sep 17 00:00:00 2001
From: Hugo SUBTIL <ext.sopra.husubtil@grandlyon.com>
Date: Tue, 8 Dec 2020 12:11:58 +0100
Subject: [PATCH] fix(auth): add regex for password check + add email already
 in use msg

---
 .../signin-modal/signin-modal.component.html          |  6 ++++--
 .../components/signin-modal/signin-modal.component.ts | 11 +++++++++--
 src/app/shared/validator/form.ts                      |  5 -----
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/app/shared/components/signin-modal/signin-modal.component.html b/src/app/shared/components/signin-modal/signin-modal.component.html
index c4e3795c3..4d0b4c3de 100644
--- a/src/app/shared/components/signin-modal/signin-modal.component.html
+++ b/src/app/shared/components/signin-modal/signin-modal.component.html
@@ -30,7 +30,7 @@
           />
           <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
             <div *ngIf="f.password.errors.required">Le mot de passe est obligatoire</div>
-            <div *ngIf="f.password.errors.minlength">
+            <div *ngIf="f.password.errors.pattern">
               Le mot de passe doit avoir au minimun 8 caractères, une majuscule, une minuscule, un chiffre et un
               caractère spécial.
             </div>
@@ -46,10 +46,12 @@
             [ngClass]="{ 'is-invalid': submitted && f.confirmPassword.errors }"
           />
           <div *ngIf="submitted && f.confirmPassword.errors" class="invalid-feedback">
-            <div *ngIf="f.confirmPassword.errors.required">Le mot de passe est obligatoire</div>
+            <div *ngIf="f.confirmPassword.errors.required">La confirmation du mot de passe est obligatoire</div>
             <div *ngIf="f.confirmPassword.errors.mustMatch">Les mot de passe ne sont pas les mêmes</div>
           </div>
         </div>
+
+        <div *ngIf="userAlreadyExist">Cette addresse mail est déjà utilisée</div>
         <div class="form-group">
           <button [disabled]="loading" class="btn btn-primary">
             <span *ngIf="loading" class="spinner-border spinner-border-sm mr-1"></span>
diff --git a/src/app/shared/components/signin-modal/signin-modal.component.ts b/src/app/shared/components/signin-modal/signin-modal.component.ts
index 10acd554c..33996e503 100644
--- a/src/app/shared/components/signin-modal/signin-modal.component.ts
+++ b/src/app/shared/components/signin-modal/signin-modal.component.ts
@@ -14,6 +14,7 @@ export class SignInModalComponent implements OnInit {
   public loading = false;
   public submitted = false;
   public success = false;
+  public userAlreadyExist = false;
 
   constructor(private formBuilder: FormBuilder, private authService: AuthService) {}
 
@@ -24,7 +25,10 @@ export class SignInModalComponent implements OnInit {
     this.form = this.formBuilder.group(
       {
         email: ['', Validators.required],
-        password: ['', [Validators.required, Validators.minLength(8)]],
+        password: [
+          '',
+          [Validators.required, Validators.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})/)],
+        ],
         confirmPassword: ['', [Validators.required, Validators.minLength(8)]],
       },
       { validator: MustMatch('password', 'confirmPassword') }
@@ -53,11 +57,14 @@ export class SignInModalComponent implements OnInit {
       .register(this.form.value)
       .pipe(first())
       .subscribe(
-        (data) => {
+        () => {
           this.success = true;
         },
         (error) => {
           this.loading = false;
+          if (error.error.statusCode === 400) {
+            this.userAlreadyExist = true;
+          }
         }
       );
   }
diff --git a/src/app/shared/validator/form.ts b/src/app/shared/validator/form.ts
index a909bf03f..1a1cc906d 100644
--- a/src/app/shared/validator/form.ts
+++ b/src/app/shared/validator/form.ts
@@ -6,11 +6,6 @@ export function MustMatch(controlName: string, matchingControlName: string): any
     const control = formGroup.controls[controlName];
     const matchingControl = formGroup.controls[matchingControlName];
 
-    if (matchingControl.errors && !matchingControl.errors.mustMatch) {
-      // return if another validator has already found an error on the matchingControl
-      return;
-    }
-
     // set error on matchingControl if validation fails
     if (control.value !== matchingControl.value) {
       matchingControl.setErrors({ mustMatch: true });
-- 
GitLab