]>
Commit | Line | Data |
---|---|---|
d12b40fb C |
1 | import { Component, OnInit } from '@angular/core' |
2 | import { FormGroup } from '@angular/forms' | |
3 | import { Router } from '@angular/router' | |
4 | import { AuthService, Notifier, User } from '@app/core' | |
5 | import { USER_EXISTING_PASSWORD_VALIDATOR, USER_OTP_TOKEN_VALIDATOR } from '@app/shared/form-validators/user-validators' | |
6 | import { FormReactiveService } from '@app/shared/shared-forms' | |
2166c058 | 7 | import { TwoFactorService } from '@app/shared/shared-users' |
d12b40fb C |
8 | |
9 | @Component({ | |
10 | selector: 'my-account-two-factor', | |
11 | templateUrl: './my-account-two-factor.component.html', | |
12 | styleUrls: [ './my-account-two-factor.component.scss' ] | |
13 | }) | |
14 | export class MyAccountTwoFactorComponent implements OnInit { | |
15 | twoFactorAlreadyEnabled: boolean | |
16 | ||
17 | step: 'request' | 'confirm' | 'confirmed' = 'request' | |
18 | ||
19 | twoFactorSecret: string | |
20 | twoFactorURI: string | |
21 | ||
22 | inPasswordStep = true | |
23 | ||
24 | formPassword: FormGroup | |
25 | formErrorsPassword: any | |
26 | ||
27 | formOTP: FormGroup | |
28 | formErrorsOTP: any | |
29 | ||
30 | private user: User | |
31 | private requestToken: string | |
32 | ||
33 | constructor ( | |
34 | private notifier: Notifier, | |
35 | private twoFactorService: TwoFactorService, | |
36 | private formReactiveService: FormReactiveService, | |
37 | private auth: AuthService, | |
38 | private router: Router | |
39 | ) { | |
40 | } | |
41 | ||
42 | ngOnInit () { | |
43 | this.buildPasswordForm() | |
44 | this.buildOTPForm() | |
45 | ||
46 | this.auth.userInformationLoaded.subscribe(() => { | |
47 | this.user = this.auth.getUser() | |
48 | ||
49 | this.twoFactorAlreadyEnabled = this.user.twoFactorEnabled | |
50 | }) | |
51 | } | |
52 | ||
53 | requestTwoFactor () { | |
54 | this.twoFactorService.requestTwoFactor({ | |
55 | userId: this.user.id, | |
56 | currentPassword: this.formPassword.value['current-password'] | |
57 | }).subscribe({ | |
58 | next: ({ otpRequest }) => { | |
59 | this.requestToken = otpRequest.requestToken | |
60 | this.twoFactorURI = otpRequest.uri | |
61 | this.twoFactorSecret = otpRequest.secret.replace(/(.{4})/g, '$1 ').trim() | |
62 | ||
63 | this.step = 'confirm' | |
64 | }, | |
65 | ||
66 | error: err => this.notifier.error(err.message) | |
67 | }) | |
68 | } | |
69 | ||
70 | confirmTwoFactor () { | |
71 | this.twoFactorService.confirmTwoFactorRequest({ | |
72 | userId: this.user.id, | |
73 | requestToken: this.requestToken, | |
74 | otpToken: this.formOTP.value['otp-token'] | |
75 | }).subscribe({ | |
76 | next: () => { | |
77 | this.notifier.success($localize`Two factor authentication has been enabled.`) | |
78 | ||
79 | this.auth.refreshUserInformation() | |
80 | ||
81 | this.router.navigateByUrl('/my-account/settings') | |
82 | }, | |
83 | ||
84 | error: err => this.notifier.error(err.message) | |
85 | }) | |
86 | } | |
87 | ||
88 | private buildPasswordForm () { | |
89 | const { form, formErrors } = this.formReactiveService.buildForm({ | |
90 | 'current-password': USER_EXISTING_PASSWORD_VALIDATOR | |
91 | }) | |
92 | ||
93 | this.formPassword = form | |
94 | this.formErrorsPassword = formErrors | |
95 | } | |
96 | ||
97 | private buildOTPForm () { | |
98 | const { form, formErrors } = this.formReactiveService.buildForm({ | |
99 | 'otp-token': USER_OTP_TOKEN_VALIDATOR | |
100 | }) | |
101 | ||
102 | this.formOTP = form | |
103 | this.formErrorsOTP = formErrors | |
104 | } | |
105 | } |