account-password.component.ts 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { Component, OnInit, ViewChild } from '@angular/core';
  2. import { CommonModule } from '@angular/common';
  3. import { Router } from '@angular/router';
  4. import { FormsModule, FormBuilder, FormControl, FormGroupDirective, FormGroup, NgForm, Validators, ReactiveFormsModule } from '@angular/forms';
  5. import { MenuComponent } from '../menu/menu.component';
  6. import { NewPassword } from '../../interfaces/user';
  7. import { AccountService } from '../../services/account.service'
  8. @Component({ selector: 'app-account-password', imports: [CommonModule, FormsModule, ReactiveFormsModule, MenuComponent], templateUrl: './account-password.component.html', styleUrl: './account-password.component.css' })
  9. export class AccountPasswordComponent
  10. {
  11. newpassword: NewPassword = new NewPassword();
  12. public form!: FormGroup;
  13. public passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,16}$/
  14. constructor(
  15. private accountService : AccountService,
  16. private router: Router,
  17. private menu: MenuComponent,
  18. private formbuilder: FormBuilder
  19. )
  20. {
  21. this.formInit();
  22. }
  23. private formInit()
  24. {
  25. this.form = this.formbuilder.group({
  26. nom: { value: '', disabled: true },
  27. prenom: { value: '', disabled: true },
  28. pseudonyme: { value: '', disabled: true },
  29. oldPassword: ['', [Validators.required]],
  30. newPassword: ['', [Validators.required, Validators.pattern(this.passwordPattern)]],
  31. confirmNewPassword: ['', [Validators.required, Validators.pattern(this.passwordPattern)]],
  32. }, { validator: this.checkingPasswords });
  33. }
  34. public checkingPasswords(formGroup: FormGroup)
  35. {
  36. if (
  37. formGroup.controls['oldPassword'].value && formGroup.controls['newPassword'].value && formGroup.controls['confirmNewPassword'].value
  38. && formGroup.controls['newPassword'].value.length >= 8 && formGroup.controls['newPassword'].value.length <= 16
  39. && formGroup.controls['confirmNewPassword'].value.length >= 8 && formGroup.controls['confirmNewPassword'].value.length <= 16
  40. )
  41. {
  42. return formGroup.controls['newPassword'].value === formGroup.controls['confirmNewPassword'].value ? false : { "notMatched": true }
  43. }
  44. return false;
  45. }
  46. public checkValidations(index: string, type: string) {
  47. switch (type)
  48. {
  49. case 'special-character': return /[#$@!%&*?]/.test(this.form.controls[index].value);;
  50. case 'number': return /\d/.test(this.form.controls[index].value);
  51. case 'lowercase': return /[a-z]/.test(this.form.controls[index].value);
  52. case 'uppercase': return /[A-Z]/.test(this.form.controls[index].value);
  53. case 'length': return this.form.controls[index].value.length >= 8 && this.form.controls[index].value.length <= 16;
  54. default: return false
  55. }
  56. }
  57. ngOnInit()
  58. {
  59. this.accountService.getProfil().subscribe( data => {
  60. this.form.controls['nom'].setValue(data.nom);
  61. this.form.controls['prenom'].setValue(data.prenom);
  62. this.form.controls['pseudonyme'].setValue(data.pseudonyme);
  63. this.newpassword.username = data.pseudonyme;
  64. });
  65. }
  66. updatePasswordConfirmed()
  67. {
  68. this.newpassword.ancien = this.form.controls['oldPassword'].value;
  69. this.newpassword.nouveau = this.form.controls['newPassword'].value;
  70. this.accountService.updatePassword(this.newpassword).subscribe(data => { if (data.erreur !== "") { this.newpassword.erreur = data.erreur; } else if (data.nouveau === "<success@new>") { this.router.navigate(['/']); } });
  71. }
  72. goToAccountDetails() { this.router.navigate(['/account-details'], { queryParams: { 'refresh': this.menu.getRandomInteger(1, 100000) } }); }
  73. }