@firestitch/2fa 12.0.3 → 12.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/2fa-verification/2fa-verification.component.d.ts +17 -8
- package/app/components/2fa-verification-methods/2fa-verification-methods.component.d.ts +7 -8
- package/app/fs-2fa.module.d.ts +17 -17
- package/bundles/firestitch-2fa.umd.js +159 -187
- package/bundles/firestitch-2fa.umd.js.map +1 -1
- package/esm2015/app/components/2fa-verification/2fa-verification.component.js +63 -20
- package/esm2015/app/components/2fa-verification-code/2fa-verification-code.component.js +2 -2
- package/esm2015/app/components/2fa-verification-methods/2fa-verification-methods.component.js +27 -28
- package/esm2015/app/fs-2fa.module.js +9 -8
- package/fesm2015/firestitch-2fa.js +115 -137
- package/fesm2015/firestitch-2fa.js.map +1 -1
- package/package.json +5 -1
- package/app/components/2fa-verification-form/2fa-verification-form.component.d.ts +0 -21
- package/esm2015/app/components/2fa-verification-form/2fa-verification-form.component.js +0 -69
|
@@ -11,18 +11,17 @@ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
|
11
11
|
import { FsFormModule } from '@firestitch/form';
|
|
12
12
|
import { FsSkeletonModule } from '@firestitch/skeleton';
|
|
13
13
|
import { FsRadioGroupModule } from '@firestitch/radiogroup';
|
|
14
|
+
import { FsDialogModule } from '@firestitch/dialog';
|
|
14
15
|
// import { CodeInputModule } from 'angular-code-input';
|
|
15
16
|
import { Fs2FAVerificationComponent } from './components/2fa-verification/2fa-verification.component';
|
|
16
17
|
import { Fs2FAVerificationSMSComponent } from './components/2fa-verification-code/2fa-verification-code.component';
|
|
17
18
|
import { Fs2FAVerificationOTPComponent } from './components/2fa-verification-otp/2fa-verification-otp.component';
|
|
18
|
-
import { Fs2FAVerificationFormComponent } from './components/2fa-verification-form/2fa-verification-form.component';
|
|
19
19
|
import { Fs2FaVerificationMethodsComponent } from './components/2fa-verification-methods/2fa-verification-methods.component';
|
|
20
20
|
import * as i0 from "@angular/core";
|
|
21
21
|
export class Fs2FaModule {
|
|
22
22
|
}
|
|
23
23
|
Fs2FaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
24
24
|
Fs2FaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, declarations: [Fs2FAVerificationComponent,
|
|
25
|
-
Fs2FAVerificationFormComponent,
|
|
26
25
|
Fs2FAVerificationSMSComponent,
|
|
27
26
|
Fs2FAVerificationOTPComponent,
|
|
28
27
|
Fs2FaVerificationMethodsComponent], imports: [CommonModule,
|
|
@@ -31,14 +30,15 @@ Fs2FaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
31
30
|
MatInputModule,
|
|
32
31
|
MatButtonModule,
|
|
33
32
|
FsFormModule,
|
|
33
|
+
FsRadioGroupModule,
|
|
34
|
+
FsDialogModule,
|
|
34
35
|
// CodeInputModule,
|
|
35
36
|
MatCheckboxModule,
|
|
36
37
|
MatProgressSpinnerModule,
|
|
37
38
|
FsSkeletonModule,
|
|
38
39
|
FsSkeletonModule,
|
|
39
40
|
MatIconModule,
|
|
40
|
-
MatRadioModule,
|
|
41
|
-
FsRadioGroupModule], exports: [Fs2FAVerificationComponent] });
|
|
41
|
+
MatRadioModule], exports: [Fs2FAVerificationComponent] });
|
|
42
42
|
Fs2FaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, providers: [], imports: [[
|
|
43
43
|
CommonModule,
|
|
44
44
|
FormsModule,
|
|
@@ -46,6 +46,8 @@ Fs2FaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
46
46
|
MatInputModule,
|
|
47
47
|
MatButtonModule,
|
|
48
48
|
FsFormModule,
|
|
49
|
+
FsRadioGroupModule,
|
|
50
|
+
FsDialogModule,
|
|
49
51
|
// CodeInputModule,
|
|
50
52
|
MatCheckboxModule,
|
|
51
53
|
MatProgressSpinnerModule,
|
|
@@ -53,7 +55,6 @@ Fs2FaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
53
55
|
FsSkeletonModule,
|
|
54
56
|
MatIconModule,
|
|
55
57
|
MatRadioModule,
|
|
56
|
-
FsRadioGroupModule,
|
|
57
58
|
]] });
|
|
58
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, decorators: [{
|
|
59
60
|
type: NgModule,
|
|
@@ -65,6 +66,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
65
66
|
MatInputModule,
|
|
66
67
|
MatButtonModule,
|
|
67
68
|
FsFormModule,
|
|
69
|
+
FsRadioGroupModule,
|
|
70
|
+
FsDialogModule,
|
|
68
71
|
// CodeInputModule,
|
|
69
72
|
MatCheckboxModule,
|
|
70
73
|
MatProgressSpinnerModule,
|
|
@@ -72,11 +75,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
72
75
|
FsSkeletonModule,
|
|
73
76
|
MatIconModule,
|
|
74
77
|
MatRadioModule,
|
|
75
|
-
FsRadioGroupModule,
|
|
76
78
|
],
|
|
77
79
|
declarations: [
|
|
78
80
|
Fs2FAVerificationComponent,
|
|
79
|
-
Fs2FAVerificationFormComponent,
|
|
80
81
|
Fs2FAVerificationSMSComponent,
|
|
81
82
|
Fs2FAVerificationOTPComponent,
|
|
82
83
|
Fs2FaVerificationMethodsComponent,
|
|
@@ -87,4 +88,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
87
88
|
providers: [],
|
|
88
89
|
}]
|
|
89
90
|
}] });
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtMmZhLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZnMtMmZhLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsd0RBQXdEO0FBRXhELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDBFQUEwRSxDQUFDOztBQW9DN0gsTUFBTSxPQUFPLFdBQVc7O3lHQUFYLFdBQVc7MEdBQVgsV0FBVyxpQkFYcEIsMEJBQTBCO1FBRTFCLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0IsaUNBQWlDLGFBeEJqQyxZQUFZO1FBQ1osV0FBVztRQUVYLGtCQUFrQjtRQUNsQixjQUFjO1FBQ2QsZUFBZTtRQUVmLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsY0FBYztRQUVkLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsYUFBYTtRQUNiLGNBQWMsYUFVZCwwQkFBMEI7MEdBSWpCLFdBQVcsYUFGWCxFQUFFLFlBOUJKO1lBQ1AsWUFBWTtZQUNaLFdBQVc7WUFFWCxrQkFBa0I7WUFDbEIsY0FBYztZQUNkLGVBQWU7WUFFZixZQUFZO1lBQ1osa0JBQWtCO1lBQ2xCLGNBQWM7WUFFZCxtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLHdCQUF3QjtZQUN4QixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixjQUFjO1NBQ2Y7NEZBYVUsV0FBVztrQkFqQ3ZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFFWCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsZUFBZTt3QkFFZixZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFFZCxtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4QixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixjQUFjO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDWiwwQkFBMEI7d0JBRTFCLDZCQUE2Qjt3QkFDN0IsNkJBQTZCO3dCQUM3QixpQ0FBaUM7cUJBQ2xDO29CQUNELE9BQU8sRUFBRTt3QkFDUCwwQkFBMEI7cUJBQzNCO29CQUNELFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5cbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcbmltcG9ydCB7IEZzUmFkaW9Hcm91cE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3JhZGlvZ3JvdXAnO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuXG4vLyBpbXBvcnQgeyBDb2RlSW5wdXRNb2R1bGUgfSBmcm9tICdhbmd1bGFyLWNvZGUtaW5wdXQnO1xuXG5pbXBvcnQgeyBGczJGQVZlcmlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy8yZmEtdmVyaWZpY2F0aW9uLzJmYS12ZXJpZmljYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEZzMkZBVmVyaWZpY2F0aW9uU01TQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzLzJmYS12ZXJpZmljYXRpb24tY29kZS8yZmEtdmVyaWZpY2F0aW9uLWNvZGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZzMkZBVmVyaWZpY2F0aW9uT1RQQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzLzJmYS12ZXJpZmljYXRpb24tb3RwLzJmYS12ZXJpZmljYXRpb24tb3RwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGczJGYVZlcmlmaWNhdGlvbk1ldGhvZHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvMmZhLXZlcmlmaWNhdGlvbi1tZXRob2RzLzJmYS12ZXJpZmljYXRpb24tbWV0aG9kcy5jb21wb25lbnQnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG5cbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzUmFkaW9Hcm91cE1vZHVsZSxcbiAgICBGc0RpYWxvZ01vZHVsZSxcblxuICAgIC8vIENvZGVJbnB1dE1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICBGc1NrZWxldG9uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0UmFkaW9Nb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZzMkZBVmVyaWZpY2F0aW9uQ29tcG9uZW50LFxuXG4gICAgRnMyRkFWZXJpZmljYXRpb25TTVNDb21wb25lbnQsXG4gICAgRnMyRkFWZXJpZmljYXRpb25PVFBDb21wb25lbnQsXG4gICAgRnMyRmFWZXJpZmljYXRpb25NZXRob2RzQ29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRnMyRkFWZXJpZmljYXRpb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEZzMkZhTW9kdWxlIHt9XG4iXX0=
|
|
@@ -1,34 +1,103 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken,
|
|
3
|
-
import * as
|
|
2
|
+
import { InjectionToken, Component, ChangeDetectionStrategy, Inject, EventEmitter, Output, Input, NgModule } from '@angular/core';
|
|
3
|
+
import * as i7 from '@angular/forms';
|
|
4
4
|
import { ControlContainer, NgForm, FormsModule } from '@angular/forms';
|
|
5
|
-
import * as
|
|
5
|
+
import * as i10 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
|
-
import * as
|
|
7
|
+
import * as i4 from '@angular/material/icon';
|
|
8
8
|
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
import * as
|
|
9
|
+
import * as i5 from '@angular/material/radio';
|
|
10
10
|
import { MatRadioModule } from '@angular/material/radio';
|
|
11
|
-
import * as
|
|
11
|
+
import * as i5$1 from '@angular/material/button';
|
|
12
12
|
import { MatButtonModule } from '@angular/material/button';
|
|
13
|
-
import * as i1$
|
|
13
|
+
import * as i1$2 from '@angular/material/form-field';
|
|
14
14
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
15
|
-
import * as i3 from '@angular/material/input';
|
|
15
|
+
import * as i3$1 from '@angular/material/input';
|
|
16
16
|
import { MatInputModule } from '@angular/material/input';
|
|
17
|
-
import * as
|
|
17
|
+
import * as i4$1 from '@angular/material/checkbox';
|
|
18
18
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
19
|
-
import * as
|
|
19
|
+
import * as i6 from '@angular/material/progress-spinner';
|
|
20
20
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
21
|
-
import * as
|
|
21
|
+
import * as i8 from '@firestitch/form';
|
|
22
22
|
import { FsFormModule } from '@firestitch/form';
|
|
23
|
-
import * as
|
|
23
|
+
import * as i9 from '@firestitch/skeleton';
|
|
24
24
|
import { FsSkeletonModule } from '@firestitch/skeleton';
|
|
25
|
-
import * as
|
|
25
|
+
import * as i3 from '@firestitch/radiogroup';
|
|
26
26
|
import { FsRadioGroupModule } from '@firestitch/radiogroup';
|
|
27
|
+
import * as i1$1 from '@firestitch/dialog';
|
|
28
|
+
import { FsDialogModule } from '@firestitch/dialog';
|
|
29
|
+
import { tap, map, shareReplay, takeUntil, filter } from 'rxjs/operators';
|
|
30
|
+
import * as i1 from '@angular/material/dialog';
|
|
31
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
27
32
|
import { Subject } from 'rxjs';
|
|
28
|
-
import { tap, takeUntil, map, shareReplay } from 'rxjs/operators';
|
|
29
33
|
|
|
30
34
|
const FS_2FA_VERIFICATION_PROVIDER = new InjectionToken('Provider for Verification service');
|
|
31
35
|
|
|
36
|
+
var FsVerificationMethodType;
|
|
37
|
+
(function (FsVerificationMethodType) {
|
|
38
|
+
FsVerificationMethodType["Sms"] = "sms";
|
|
39
|
+
FsVerificationMethodType["Email"] = "email";
|
|
40
|
+
FsVerificationMethodType["Authenticator"] = "authenticator";
|
|
41
|
+
FsVerificationMethodType["Code"] = "code";
|
|
42
|
+
})(FsVerificationMethodType || (FsVerificationMethodType = {}));
|
|
43
|
+
|
|
44
|
+
class Fs2FaVerificationMethodsComponent {
|
|
45
|
+
constructor(_verificationProvider, _dialogData, _dialogRef) {
|
|
46
|
+
this._verificationProvider = _verificationProvider;
|
|
47
|
+
this._dialogData = _dialogData;
|
|
48
|
+
this._dialogRef = _dialogRef;
|
|
49
|
+
this.verificationMethodType = FsVerificationMethodType;
|
|
50
|
+
this.setVerificationMethod = () => {
|
|
51
|
+
return this._verificationProvider
|
|
52
|
+
.updateVerificationMethod(this.method.id)
|
|
53
|
+
.pipe(tap((method) => {
|
|
54
|
+
this._dialogRef.close(method);
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
57
|
+
this._setActiveMethod();
|
|
58
|
+
this._initMethods();
|
|
59
|
+
}
|
|
60
|
+
compareWith(o1, o2) {
|
|
61
|
+
return o1 && o2 && o1.id === o2.id;
|
|
62
|
+
}
|
|
63
|
+
_setActiveMethod() {
|
|
64
|
+
var _a;
|
|
65
|
+
this.method = (_a = this._dialogData) === null || _a === void 0 ? void 0 : _a.method;
|
|
66
|
+
}
|
|
67
|
+
_initMethods() {
|
|
68
|
+
this.methods$ = this._verificationProvider
|
|
69
|
+
.methods()
|
|
70
|
+
.pipe(map((methods) => {
|
|
71
|
+
return methods
|
|
72
|
+
.reduce((acc, method) => {
|
|
73
|
+
if (!acc[method.type]) {
|
|
74
|
+
acc[method.type] = [];
|
|
75
|
+
}
|
|
76
|
+
acc[method.type].push(method);
|
|
77
|
+
return acc;
|
|
78
|
+
}, {});
|
|
79
|
+
}), shareReplay(1));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
Fs2FaVerificationMethodsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaVerificationMethodsComponent, deps: [{ token: FS_2FA_VERIFICATION_PROVIDER }, { token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
+
Fs2FaVerificationMethodsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FaVerificationMethodsComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Verification Methods\n </h1>\n <form fsForm [submit]=\"setVerificationMethod\">\n <mat-dialog-content>\n <ng-container *fsSkeleton=\"methods$ | async as methods\">\n <fs-radio-group [(ngModel)]=\"method\" name=\"method\" [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of methods | keyvalue\">\n <div class=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n smartphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Text Message</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following mobile number\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Email</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following email\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n {{ method.phoneNumber }}\n </mat-radio-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n {{ method.email }}\n </mat-radio-button>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <ng-container *ngIf=\"methods$ | async\">\n <button mat-button type=\"submit\" color=\"primary\">Next</button>\n </ng-container>\n <button mat-button type=\"button\" [mat-dialog-close]=\"null\">Cancel</button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>\n", styles: [".method{display:block;margin-bottom:20px}.method .method-header{display:flex;align-items:flex-start}.method .method-header .method-name{margin-left:10px}.method .method-header .method-name .method-title{font-size:14px;font-weight:400}.method .method-header .method-name .method-subtitle{font-size:12px;color:#a3a3a3}.method .method-item{display:block;margin:10px 0 0 35px}\n"], components: [{ type: i1$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i3.FsRadioGroupComponent, selector: "fs-radio-group", inputs: ["orientation", "radioPosition", "compareWith", "required", "disabled", "label", "name"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i5$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.ɵa, selector: "[fsSkeleton]", inputs: ["fsSkeletonPattern", "fsSkeleton"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "async": i10.AsyncPipe, "keyvalue": i10.KeyValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaVerificationMethodsComponent, decorators: [{
|
|
85
|
+
type: Component,
|
|
86
|
+
args: [{
|
|
87
|
+
templateUrl: './2fa-verification-methods.component.html',
|
|
88
|
+
styleUrls: [
|
|
89
|
+
'./2fa-verification-methods.component.scss',
|
|
90
|
+
],
|
|
91
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
92
|
+
}]
|
|
93
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
94
|
+
type: Inject,
|
|
95
|
+
args: [FS_2FA_VERIFICATION_PROVIDER]
|
|
96
|
+
}] }, { type: undefined, decorators: [{
|
|
97
|
+
type: Inject,
|
|
98
|
+
args: [MAT_DIALOG_DATA]
|
|
99
|
+
}] }, { type: i1.MatDialogRef }]; } });
|
|
100
|
+
|
|
32
101
|
class Fs2FAVerificationOTPComponent {
|
|
33
102
|
constructor(form) {
|
|
34
103
|
this.form = form;
|
|
@@ -42,7 +111,7 @@ class Fs2FAVerificationOTPComponent {
|
|
|
42
111
|
this.form.triggerSubmit();
|
|
43
112
|
}
|
|
44
113
|
}
|
|
45
|
-
Fs2FAVerificationOTPComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationOTPComponent, deps: [{ token:
|
|
114
|
+
Fs2FAVerificationOTPComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationOTPComponent, deps: [{ token: i8.FsFormDirective }], target: i0.ɵɵFactoryTarget.Component });
|
|
46
115
|
Fs2FAVerificationOTPComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationOTPComponent, selector: "fs-2fa-verification-otp", outputs: { codeChange: "codeChange" }, ngImport: i0, template: "<p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator\n app to verify it's you\n</p>\n\n<!--\n<code-input [initialFocusField]=\"0\"\n [codeLength]=\"6\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">>\n</code-input>\n-->\n", styles: [":host{display:block}code-input{--item-spacing: 10px;--item-height: 20px;--item-border: none;--item-border-bottom: 2px solid #949494;--item-border-has-value: none;--item-border-bottom-has-value: 2px solid #949494;--item-border-focused: none;--item-border-bottom-focused: 2px solid #0061AF;--item-shadow-focused: none;--item-border-radius: 0px}code-input ::ng-deep span:first-child{padding-left:0!important}code-input ::ng-deep span:last-child{padding-right:0!important}code-input ::ng-deep input{font-size:20px!important;height:40px!important;padding:0!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47
116
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationOTPComponent, decorators: [{
|
|
48
117
|
type: Component,
|
|
@@ -54,7 +123,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
54
123
|
],
|
|
55
124
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
56
125
|
}]
|
|
57
|
-
}], ctorParameters: function () { return [{ type:
|
|
126
|
+
}], ctorParameters: function () { return [{ type: i8.FsFormDirective }]; }, propDecorators: { codeChange: [{
|
|
58
127
|
type: Output
|
|
59
128
|
}] } });
|
|
60
129
|
|
|
@@ -67,7 +136,7 @@ class Fs2FAVerificationSMSComponent {
|
|
|
67
136
|
}
|
|
68
137
|
}
|
|
69
138
|
Fs2FAVerificationSMSComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationSMSComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
-
Fs2FAVerificationSMSComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationSMSComponent, selector: "fs-2fa-verification-code", inputs: { method: "method" }, outputs: { codeChange: "codeChange" }, ngImport: i0, template: "<p class=\"description\">\n <ng-container *ngIf=\"method.
|
|
139
|
+
Fs2FAVerificationSMSComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationSMSComponent, selector: "fs-2fa-verification-code", inputs: { method: "method" }, outputs: { codeChange: "codeChange" }, ngImport: i0, template: "<p class=\"description\">\n <ng-container *ngIf=\"method.phoneNumber && method.type === 'sms'\">\n A text message with a verification code was just\n sent to <span style=\"white-space: nowrap;\">{{ method.phoneNumber }}</span> to verify it's you.\n </ng-container>\n\n <ng-container *ngIf=\"method.type === 'email'\">\n A email with a verification code was just sent to {{ method.email }} to verify it's you.\n </ng-container>\n\n <ng-container *ngIf=\"false\">\n Enter the one time code generated by the app administrator to verify it's you.\n </ng-container>\n</p>\n\n<mat-form-field>\n <mat-label>Code</mat-label>\n <input type=\"text\"\n matInput\n name=\"code\"\n autocomplete=\"one-time-code\"\n [(ngModel)]=\"code\"\n (ngModelChange)=\"codeChanged()\"\n required\n placeholder=\"Enter the code\"\n inputmode=\"numeric\">\n</mat-form-field>\n", styles: [":host{display:block}mat-form-field{width:100%}\n"], components: [{ type: i1$2.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$2.MatLabel, selector: "mat-label" }, { type: i3$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.ɵf, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }], viewProviders: [
|
|
71
140
|
{
|
|
72
141
|
provide: ControlContainer,
|
|
73
142
|
useExisting: NgForm,
|
|
@@ -95,11 +164,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
95
164
|
type: Output
|
|
96
165
|
}] } });
|
|
97
166
|
|
|
98
|
-
class
|
|
99
|
-
constructor(verificationProvider, _cdRef) {
|
|
167
|
+
class Fs2FAVerificationComponent {
|
|
168
|
+
constructor(verificationProvider, _cdRef, _dialog) {
|
|
100
169
|
this.verificationProvider = verificationProvider;
|
|
101
170
|
this._cdRef = _cdRef;
|
|
171
|
+
this._dialog = _dialog;
|
|
102
172
|
this.verified = new EventEmitter();
|
|
173
|
+
this.backToSignIn = new EventEmitter();
|
|
103
174
|
this.resendInProgress = false;
|
|
104
175
|
this.trustedDevice = false;
|
|
105
176
|
this._destroy$ = new Subject();
|
|
@@ -128,122 +199,25 @@ class Fs2FAVerificationFormComponent {
|
|
|
128
199
|
this._cdRef.markForCheck();
|
|
129
200
|
});
|
|
130
201
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}]
|
|
144
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
145
|
-
type: Inject,
|
|
146
|
-
args: [FS_2FA_VERIFICATION_PROVIDER]
|
|
147
|
-
}] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { method: [{
|
|
148
|
-
type: Input
|
|
149
|
-
}], verified: [{
|
|
150
|
-
type: Output
|
|
151
|
-
}] } });
|
|
152
|
-
|
|
153
|
-
var FsVerificationMethodType;
|
|
154
|
-
(function (FsVerificationMethodType) {
|
|
155
|
-
FsVerificationMethodType["Sms"] = "sms";
|
|
156
|
-
FsVerificationMethodType["Email"] = "email";
|
|
157
|
-
FsVerificationMethodType["Authenticator"] = "authenticator";
|
|
158
|
-
FsVerificationMethodType["Code"] = "code";
|
|
159
|
-
})(FsVerificationMethodType || (FsVerificationMethodType = {}));
|
|
160
|
-
|
|
161
|
-
class Fs2FaVerificationMethodsComponent {
|
|
162
|
-
constructor(_verificationProvider) {
|
|
163
|
-
this._verificationProvider = _verificationProvider;
|
|
164
|
-
this.methodChange = new EventEmitter();
|
|
165
|
-
this.cancelled = new EventEmitter();
|
|
166
|
-
this.verificationMethodType = FsVerificationMethodType;
|
|
167
|
-
this.setVerificationMethod = () => {
|
|
168
|
-
return this._verificationProvider
|
|
169
|
-
.updateVerificationMethod(this.method.id)
|
|
170
|
-
.pipe(tap((method) => {
|
|
171
|
-
this.methodChange.emit(method);
|
|
172
|
-
}));
|
|
173
|
-
};
|
|
174
|
-
this._initMethods();
|
|
175
|
-
}
|
|
176
|
-
ngOnInit() {
|
|
177
|
-
}
|
|
178
|
-
compareWith(o1, o2) {
|
|
179
|
-
return o1 && o2 && o1.id === o2.id;
|
|
180
|
-
}
|
|
181
|
-
cancel() {
|
|
182
|
-
this.cancelled.emit();
|
|
183
|
-
}
|
|
184
|
-
_initMethods() {
|
|
185
|
-
this.methods$ = this._verificationProvider
|
|
186
|
-
.methods()
|
|
187
|
-
.pipe(map((methods) => {
|
|
188
|
-
return methods
|
|
189
|
-
.reduce((acc, method) => {
|
|
190
|
-
if (!acc[method.type]) {
|
|
191
|
-
acc[method.type] = [];
|
|
192
|
-
}
|
|
193
|
-
acc[method.type].push(method);
|
|
194
|
-
return acc;
|
|
195
|
-
}, {});
|
|
196
|
-
}), shareReplay(1));
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
Fs2FaVerificationMethodsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaVerificationMethodsComponent, deps: [{ token: FS_2FA_VERIFICATION_PROVIDER }], target: i0.ɵɵFactoryTarget.Component });
|
|
200
|
-
Fs2FaVerificationMethodsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FaVerificationMethodsComponent, selector: "fs-2fa-verification-methods", inputs: { method: "method" }, outputs: { methodChange: "methodChange", cancelled: "cancelled" }, ngImport: i0, template: "<h2>\n Verification Methods\n</h2>\n<form fsForm [submit]=\"setVerificationMethod\">\n <ng-container *fsSkeleton=\"methods$ | async as methods\">\n <fs-radio-group [(ngModel)]=\"method\" name=\"method\" [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of methods | keyvalue\">\n <div class=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n smartphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Text Message</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following mobile number\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Email</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following email\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n + {{ method.phoneCode }} {{ method.phoneNumber }}\n </mat-radio-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n {{ method.email }}\n </mat-radio-button>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </fs-radio-group>\n </ng-container>\n\n <div class=\"actions\">\n <ng-container *ngIf=\"methods$ | async\">\n <button mat-button type=\"submit\" color=\"primary\">Next</button>\n </ng-container>\n <button mat-button type=\"button\" (click)=\"cancel()\">Cancel</button>\n </div>\n</form>\n", styles: [".method{display:block;margin-bottom:20px}.method .method-header{display:flex;align-items:flex-start}.method .method-header .method-name{margin-left:10px}.method .method-header .method-name .method-title{font-size:14px;font-weight:400}.method .method-header .method-name .method-subtitle{font-size:12px;color:#a3a3a3}.method .method-item{display:block;margin:10px 0 0 35px}\n"], components: [{ type: i1$2.FsRadioGroupComponent, selector: "fs-radio-group", inputs: ["orientation", "radioPosition", "compareWith", "required", "disabled", "label", "name"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3$2.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i7.ɵa, selector: "[fsSkeleton]", inputs: ["fsSkeletonPattern", "fsSkeleton"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }], pipes: { "async": i8.AsyncPipe, "keyvalue": i8.KeyValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaVerificationMethodsComponent, decorators: [{
|
|
202
|
-
type: Component,
|
|
203
|
-
args: [{
|
|
204
|
-
selector: 'fs-2fa-verification-methods',
|
|
205
|
-
templateUrl: './2fa-verification-methods.component.html',
|
|
206
|
-
styleUrls: [
|
|
207
|
-
'./2fa-verification-methods.component.scss',
|
|
208
|
-
],
|
|
209
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
210
|
-
}]
|
|
211
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
212
|
-
type: Inject,
|
|
213
|
-
args: [FS_2FA_VERIFICATION_PROVIDER]
|
|
214
|
-
}] }]; }, propDecorators: { method: [{
|
|
215
|
-
type: Input
|
|
216
|
-
}], methodChange: [{
|
|
217
|
-
type: Output
|
|
218
|
-
}], cancelled: [{
|
|
219
|
-
type: Output
|
|
220
|
-
}] } });
|
|
221
|
-
|
|
222
|
-
class Fs2FAVerificationComponent {
|
|
223
|
-
constructor() {
|
|
224
|
-
this.verified = new EventEmitter();
|
|
225
|
-
this.backToSignIn = new EventEmitter();
|
|
226
|
-
this._view = 'code';
|
|
227
|
-
}
|
|
228
|
-
get view() {
|
|
229
|
-
return this._view;
|
|
230
|
-
}
|
|
231
|
-
switchVerificationMethod(method) {
|
|
232
|
-
this._view = method;
|
|
233
|
-
}
|
|
234
|
-
setActiveMethod(method) {
|
|
235
|
-
this.method = method;
|
|
236
|
-
this.switchVerificationMethod('code');
|
|
237
|
-
}
|
|
238
|
-
cancel() {
|
|
239
|
-
this.switchVerificationMethod('code');
|
|
202
|
+
showVerificationMethods() {
|
|
203
|
+
this._dialog.open(Fs2FaVerificationMethodsComponent, {
|
|
204
|
+
data: {
|
|
205
|
+
method: this.method,
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
.afterClosed()
|
|
209
|
+
.pipe(filter((method) => !!method))
|
|
210
|
+
.subscribe((method) => {
|
|
211
|
+
this.method = method;
|
|
212
|
+
this._cdRef.markForCheck();
|
|
213
|
+
});
|
|
240
214
|
}
|
|
241
215
|
toSignIn() {
|
|
242
216
|
this.backToSignIn.emit();
|
|
243
217
|
}
|
|
244
218
|
}
|
|
245
|
-
Fs2FAVerificationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
-
Fs2FAVerificationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationComponent, selector: "fs-2fa-verification", inputs: { method: "method" }, outputs: { verified: "verified", backToSignIn: "backToSignIn" }, ngImport: i0, template: "<
|
|
219
|
+
Fs2FAVerificationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationComponent, deps: [{ token: FS_2FA_VERIFICATION_PROVIDER }, { token: i0.ChangeDetectorRef }, { token: i1$1.FsDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
220
|
+
Fs2FAVerificationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationComponent, selector: "fs-2fa-verification", inputs: { method: "method" }, outputs: { verified: "verified", backToSignIn: "backToSignIn" }, ngImport: i0, template: "<form fsForm [submit]=\"verify\" [dirtySubmitButton]=\"false\">\n <h2>2-Step Verification</h2>\n\n <div class=\"code-container\">\n <ng-container *ngIf=\"method.type === 'authenticator' else code\">\n <fs-2fa-verification-otp class=\"otp\"></fs-2fa-verification-otp>\n </ng-container>\n\n <ng-template #code>\n <fs-2fa-verification-code\n [method]=\"method\"\n (codeChange)=\"codeChanged($event)\">\n </fs-2fa-verification-code>\n </ng-template>\n </div>\n\n <div class=\"additional\">\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustedDevice\">\n Trust this device\n </mat-checkbox>\n\n <span matSuffix>\n <a mat-button\n type=\"button\"\n color=\"primary\"\n (click)=\"resend()\"\n [disabled]=\"resendInProgress\"\n class=\"resend-code-btn\">\n <ng-container *ngIf=\"!resendInProgress else sending\">\n Resend Code\n </ng-container>\n <ng-template #sending>\n <mat-spinner [diameter]=\"12\"></mat-spinner> Sending\n </ng-template>\n </a>\n </span>\n </div>\n\n <div class=\"actions\">\n <button mat-raised-button\n color=\"primary\"\n type=\"submit\">\n Verify\n </button>\n\n <button mat-button type=\"button\" (click)=\"showVerificationMethods()\">\n Try other ways to verify\n </button>\n\n <button mat-button type=\"button\" (click)=\"toSignIn()\">\n Back to signin\n </button>\n </div>\n</form>\n", styles: [":host{display:block}h2,.code-container{text-align:center}.code-container .otp{margin-bottom:15px}:host ::ng-deep .actions{margin:10px 0}:host ::ng-deep .actions a{width:100%;font-weight:400}:host ::ng-deep .actions button{width:100%;margin-bottom:5px}:host ::ng-deep .actions button[type=button]{font-weight:400}.additional{display:flex;justify-content:space-between;align-items:baseline;margin-top:-5px}.additional .resend-code-btn{text-transform:none}.additional .resend-code-btn mat-spinner{display:inline-block;vertical-align:middle}\n"], components: [{ type: Fs2FAVerificationOTPComponent, selector: "fs-2fa-verification-otp", outputs: ["codeChange"] }, { type: Fs2FAVerificationSMSComponent, selector: "fs-2fa-verification-code", inputs: ["method"], outputs: ["codeChange"] }, { type: i4$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5$1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i6.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i5$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1$2.MatSuffix, selector: "[matSuffix]" }, { type: i8.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
247
221
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FAVerificationComponent, decorators: [{
|
|
248
222
|
type: Component,
|
|
249
223
|
args: [{
|
|
@@ -254,7 +228,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
254
228
|
],
|
|
255
229
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
256
230
|
}]
|
|
257
|
-
}], ctorParameters: function () { return [
|
|
231
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
232
|
+
type: Inject,
|
|
233
|
+
args: [FS_2FA_VERIFICATION_PROVIDER]
|
|
234
|
+
}] }, { type: i0.ChangeDetectorRef }, { type: i1$1.FsDialog }]; }, propDecorators: { method: [{
|
|
258
235
|
type: Input
|
|
259
236
|
}], verified: [{
|
|
260
237
|
type: Output
|
|
@@ -266,7 +243,6 @@ class Fs2FaModule {
|
|
|
266
243
|
}
|
|
267
244
|
Fs2FaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
268
245
|
Fs2FaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, declarations: [Fs2FAVerificationComponent,
|
|
269
|
-
Fs2FAVerificationFormComponent,
|
|
270
246
|
Fs2FAVerificationSMSComponent,
|
|
271
247
|
Fs2FAVerificationOTPComponent,
|
|
272
248
|
Fs2FaVerificationMethodsComponent], imports: [CommonModule,
|
|
@@ -275,14 +251,15 @@ Fs2FaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
275
251
|
MatInputModule,
|
|
276
252
|
MatButtonModule,
|
|
277
253
|
FsFormModule,
|
|
254
|
+
FsRadioGroupModule,
|
|
255
|
+
FsDialogModule,
|
|
278
256
|
// CodeInputModule,
|
|
279
257
|
MatCheckboxModule,
|
|
280
258
|
MatProgressSpinnerModule,
|
|
281
259
|
FsSkeletonModule,
|
|
282
260
|
FsSkeletonModule,
|
|
283
261
|
MatIconModule,
|
|
284
|
-
MatRadioModule,
|
|
285
|
-
FsRadioGroupModule], exports: [Fs2FAVerificationComponent] });
|
|
262
|
+
MatRadioModule], exports: [Fs2FAVerificationComponent] });
|
|
286
263
|
Fs2FaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, providers: [], imports: [[
|
|
287
264
|
CommonModule,
|
|
288
265
|
FormsModule,
|
|
@@ -290,6 +267,8 @@ Fs2FaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
290
267
|
MatInputModule,
|
|
291
268
|
MatButtonModule,
|
|
292
269
|
FsFormModule,
|
|
270
|
+
FsRadioGroupModule,
|
|
271
|
+
FsDialogModule,
|
|
293
272
|
// CodeInputModule,
|
|
294
273
|
MatCheckboxModule,
|
|
295
274
|
MatProgressSpinnerModule,
|
|
@@ -297,7 +276,6 @@ Fs2FaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
297
276
|
FsSkeletonModule,
|
|
298
277
|
MatIconModule,
|
|
299
278
|
MatRadioModule,
|
|
300
|
-
FsRadioGroupModule,
|
|
301
279
|
]] });
|
|
302
280
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: Fs2FaModule, decorators: [{
|
|
303
281
|
type: NgModule,
|
|
@@ -309,6 +287,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
309
287
|
MatInputModule,
|
|
310
288
|
MatButtonModule,
|
|
311
289
|
FsFormModule,
|
|
290
|
+
FsRadioGroupModule,
|
|
291
|
+
FsDialogModule,
|
|
312
292
|
// CodeInputModule,
|
|
313
293
|
MatCheckboxModule,
|
|
314
294
|
MatProgressSpinnerModule,
|
|
@@ -316,11 +296,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
316
296
|
FsSkeletonModule,
|
|
317
297
|
MatIconModule,
|
|
318
298
|
MatRadioModule,
|
|
319
|
-
FsRadioGroupModule,
|
|
320
299
|
],
|
|
321
300
|
declarations: [
|
|
322
301
|
Fs2FAVerificationComponent,
|
|
323
|
-
Fs2FAVerificationFormComponent,
|
|
324
302
|
Fs2FAVerificationSMSComponent,
|
|
325
303
|
Fs2FAVerificationOTPComponent,
|
|
326
304
|
Fs2FaVerificationMethodsComponent,
|