Skip to content

Commit 572a7ed

Browse files
sarkapalkovicovaxflord
authored andcommitted
fix(profile): authentication management
Authentication management is separated into its own section. DEPLOYMENT NOTE: In defaultConfig.json for user-profile, 'authentication', 'mfa', 'anti_phishing', and 'accountActivation' values were added into displayed_tabs.
1 parent 4fdf6cf commit 572a7ed

File tree

32 files changed

+296
-170
lines changed

32 files changed

+296
-170
lines changed

apps/user-profile/src/app/app-routing.module.ts

Lines changed: 47 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,24 @@ import { SettingsAlternativePasswordsComponent } from './pages/settings-page/set
1010
import { SettingsOverviewComponent } from './pages/settings-page/settings-overview/settings-overview.component';
1111
import { SettingsPreferredShellsComponent } from './pages/settings-page/settings-preferred-shells/settings-preferred-shells.component';
1212
import { SettingsPreferredUnixGroupNamesComponent } from './pages/settings-page/settings-preferred-unix-group-names/settings-preferred-unix-group-names.component';
13-
import { SettingsSambaPasswordComponent } from './pages/settings-page/settings-samba-password/settings-samba-password.component';
14-
import { SettingsSSHKeysComponent } from '@perun-web-apps/perun/components';
1513
import { PrivacyPageComponent } from './pages/privacy-page/privacy-page.component';
1614
import { HomePageComponent } from './components/home-page/home-page.component';
17-
import { PasswordResetComponent } from '@perun-web-apps/perun/components';
18-
import { SettingsAuthenticationComponent } from './pages/settings-page/settings-authorization/settings-authentication.component';
1915
import {
2016
LoginScreenComponent,
2117
LoginScreenServiceAccessComponent,
2218
} from '@perun-web-apps/perun/login';
2319
import { ConsentsPageComponent } from './pages/consents-page/consents-page.component';
2420
import { ConsentRequestComponent } from './pages/consents-page/consent-request/consent-request.component';
2521
import { ConsentsPreviewComponent } from './pages/consents-page/consents-preview/consents-preview.component';
26-
import { SettingsLocalAccountComponent } from './pages/settings-page/settings-local-account/settings-local-account.component';
2722
import { SettingsMailingListsComponent } from './pages/settings-page/settings-mailing-lists/settings-mailing-lists.component';
2823
import { SettingsDataQuotasComponent } from './pages/settings-page/settings-data-quotas/settings-data-quotas.component';
2924
import { LogoutLoaderComponent } from '@perun-web-apps/ui/loaders';
25+
import { AuthenticationPageComponent } from './pages/authentication-page/authentication-page.component';
26+
import { AuthenticationOverviewComponent } from './pages/authentication-page/authentication-overview/authentication-overview.component';
27+
import { AuthenticationMfaSettingsComponent } from './pages/authentication-page/authentication-mfa-settings/authentication-mfa-settings.component';
28+
import { AuthenticationAntiPhishingSecurityComponent } from './pages/authentication-page/authentication-anti-phishing-security/authentication-anti-phishing-security.component';
29+
import { AuthenticationAccountActivationComponent } from './pages/authentication-page/authentication-account-activation/authentication-account-activation.component';
30+
import { PasswordResetComponent, SettingsSSHKeysComponent } from '@perun-web-apps/perun/components';
3031

3132
const routes: Routes = [
3233
{
@@ -99,35 +100,62 @@ const routes: Routes = [
99100
],
100101
},
101102
{
102-
path: 'settings',
103-
component: SettingsPageComponent,
104-
data: { breadcrumb: 'MENU_ITEMS.SETTINGS' },
103+
path: 'auth',
104+
component: AuthenticationPageComponent,
105+
data: { breadcrumb: 'MENU_ITEMS.AUTHENTICATION' },
105106
children: [
106107
{
107108
path: '',
108-
component: SettingsOverviewComponent,
109-
data: { breadcrumb: 'MENU_ITEMS.SETTINGS' },
109+
component: AuthenticationOverviewComponent,
110+
data: { breadcrumb: 'MENU_ITEMS.AUTHENTICATION' },
111+
},
112+
{
113+
path: 'accountActivation',
114+
component: AuthenticationAccountActivationComponent,
115+
data: { breadcrumb: 'AUTHENTICATION.ACCOUNT_ACTIVATION' },
116+
},
117+
{
118+
path: 'mfa',
119+
component: AuthenticationMfaSettingsComponent,
120+
data: { breadcrumb: 'AUTHENTICATION.MFA' },
121+
},
122+
{
123+
path: 'antiPhishingSecurity',
124+
component: AuthenticationAntiPhishingSecurityComponent,
125+
data: { breadcrumb: 'AUTHENTICATION.ANTI_PHISHING' },
126+
},
127+
{
128+
path: 'sshKeys',
129+
component: SettingsSSHKeysComponent,
130+
data: { breadcrumb: 'AUTHENTICATION.SSH_KEYS' },
131+
},
132+
{
133+
path: 'passwordReset',
134+
component: PasswordResetComponent,
135+
data: { breadcrumb: 'AUTHENTICATION.PASSWORD_RESET' },
110136
},
111137
{
112138
path: 'altPasswords',
113139
component: SettingsAlternativePasswordsComponent,
114-
data: { breadcrumb: 'SETTINGS.ALTERNATIVE_PASSWORDS' },
140+
data: { breadcrumb: 'AUTHENTICATION.ALTERNATIVE_PASSWORDS' },
115141
},
142+
],
143+
},
144+
{
145+
path: 'settings',
146+
component: SettingsPageComponent,
147+
data: { breadcrumb: 'MENU_ITEMS.SETTINGS' },
148+
children: [
116149
{
117-
path: 'auth',
118-
component: SettingsAuthenticationComponent,
119-
data: { breadcrumb: 'SETTINGS.AUTHENTICATION' },
150+
path: '',
151+
component: SettingsOverviewComponent,
152+
data: { breadcrumb: 'MENU_ITEMS.SETTINGS' },
120153
},
121154
{
122155
path: 'dataQuotas',
123156
component: SettingsDataQuotasComponent,
124157
data: { breadcrumb: 'SETTINGS.DATA_QUOTAS' },
125158
},
126-
{
127-
path: 'localAccount',
128-
component: SettingsLocalAccountComponent,
129-
data: { breadcrumb: 'SETTINGS.LOCAL_ACCOUNT' },
130-
},
131159
{
132160
path: 'mailingLists',
133161
component: SettingsMailingListsComponent,
@@ -143,21 +171,6 @@ const routes: Routes = [
143171
component: SettingsPreferredUnixGroupNamesComponent,
144172
data: { breadcrumb: 'SETTINGS.PREFERRED_UNIX_GROUP_NAMES' },
145173
},
146-
{
147-
path: 'sambaPassword',
148-
component: SettingsSambaPasswordComponent,
149-
data: { breadcrumb: 'SETTINGS.SAMBA_PASSWORD' },
150-
},
151-
{
152-
path: 'sshKeys',
153-
component: SettingsSSHKeysComponent,
154-
data: { breadcrumb: 'SETTINGS.SSH_KEYS' },
155-
},
156-
{
157-
path: 'passwordReset',
158-
component: PasswordResetComponent,
159-
data: { breadcrumb: 'SETTINGS.PASSWORD_RESET' },
160-
},
161174
],
162175
},
163176
],

apps/user-profile/src/app/app.module.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { SettingsOverviewComponent } from './pages/settings-page/settings-overvi
1818
import { SettingsPreferredUnixGroupNamesComponent } from './pages/settings-page/settings-preferred-unix-group-names/settings-preferred-unix-group-names.component';
1919
import { SettingsPreferredShellsComponent } from './pages/settings-page/settings-preferred-shells/settings-preferred-shells.component';
2020
import { SettingsAlternativePasswordsComponent } from './pages/settings-page/settings-alternative-passwords/settings-alternative-passwords.component';
21-
import { SettingsSambaPasswordComponent } from './pages/settings-page/settings-samba-password/settings-samba-password.component';
21+
import { AuthenticationSambaPasswordComponent } from './pages/authentication-page/authentication-samba-password/authentication-samba-password.component';
2222
import { SideMenuComponent } from './components/side-menu/side-menu.component';
2323
import { CustomIconService, StoreService } from '@perun-web-apps/perun/services';
2424
import { MatIconModule } from '@angular/material/icon';
@@ -59,7 +59,6 @@ import { PERUN_API_SERVICE } from '@perun-web-apps/perun/tokens';
5959
import { ApiService } from '@perun-web-apps/perun/services';
6060
import { MatTooltipModule } from '@angular/material/tooltip';
6161
import { BreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';
62-
import { SettingsAuthenticationComponent } from './pages/settings-page/settings-authorization/settings-authentication.component';
6362
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
6463
import { AddAuthImgDialogComponent } from './components/dialogs/add-auth-img-dialog/add-auth-img-dialog.component';
6564
import { MatRadioModule } from '@angular/material/radio';
@@ -70,14 +69,18 @@ import { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';
7069
import { ConsentsPageComponent } from './pages/consents-page/consents-page.component';
7170
import { ConsentRequestComponent } from './pages/consents-page/consent-request/consent-request.component';
7271
import { ConsentsPreviewComponent } from './pages/consents-page/consents-preview/consents-preview.component';
73-
import { SettingsLocalAccountComponent } from './pages/settings-page/settings-local-account/settings-local-account.component';
72+
import { AuthenticationLocalAccountComponent } from './pages/authentication-page/authentication-local-account/authentication-local-account.component';
7473
import { ActivateLocalAccountDialogComponent } from './components/dialogs/activate-local-account-dialog/activate-local-account-dialog.component';
7574
import { PerunNamespacePasswordFormModule } from '@perun-web-apps/perun/namespace-password-form';
76-
import { MfaSettingsComponent } from './pages/settings-page/settings-authorization/mfa-settings/mfa-settings.component';
75+
import { AuthenticationMfaSettingsComponent } from './pages/authentication-page/authentication-mfa-settings/authentication-mfa-settings.component';
7776
import { CategoryLabelPipe } from './pipes/category-label.pipe';
7877
import { SettingsMailingListsComponent } from './pages/settings-page/settings-mailing-lists/settings-mailing-lists.component';
7978
import { SettingsDataQuotasComponent } from './pages/settings-page/settings-data-quotas/settings-data-quotas.component';
8079
import { AddAuthTextDialogComponent } from './components/dialogs/add-auth-text-dialog/add-auth-text-dialog.component';
80+
import { AuthenticationPageComponent } from './pages/authentication-page/authentication-page.component';
81+
import { AuthenticationOverviewComponent } from './pages/authentication-page/authentication-overview/authentication-overview.component';
82+
import { AuthenticationAntiPhishingSecurityComponent } from './pages/authentication-page/authentication-anti-phishing-security/authentication-anti-phishing-security.component';
83+
import { AuthenticationAccountActivationComponent } from './pages/authentication-page/authentication-account-activation/authentication-account-activation.component';
8184

8285
export const API_INTERCEPTOR_PROVIDER: Provider = {
8386
provide: HTTP_INTERCEPTORS,
@@ -110,11 +113,13 @@ const loadConfigs: (appConfig: UserProfileConfigService) => () => Promise<void>
110113
VosPageComponent,
111114
ServicesPageComponent,
112115
SettingsPageComponent,
116+
AuthenticationPageComponent,
117+
AuthenticationOverviewComponent,
113118
SettingsOverviewComponent,
114119
SettingsPreferredUnixGroupNamesComponent,
115120
SettingsPreferredShellsComponent,
116121
SettingsAlternativePasswordsComponent,
117-
SettingsSambaPasswordComponent,
122+
AuthenticationSambaPasswordComponent,
118123
SettingsMailingListsComponent,
119124
SettingsDataQuotasComponent,
120125
SideMenuComponent,
@@ -128,15 +133,16 @@ const loadConfigs: (appConfig: UserProfileConfigService) => () => Promise<void>
128133
ValidateExpirationPipe,
129134
CategoryLabelPipe,
130135
BreadcrumbsComponent,
131-
SettingsAuthenticationComponent,
132136
AddAuthImgDialogComponent,
133137
ConsentsPageComponent,
134138
ConsentRequestComponent,
135139
ConsentsPreviewComponent,
136-
SettingsLocalAccountComponent,
140+
AuthenticationLocalAccountComponent,
141+
AuthenticationAntiPhishingSecurityComponent,
137142
ActivateLocalAccountDialogComponent,
138-
MfaSettingsComponent,
143+
AuthenticationMfaSettingsComponent,
139144
AddAuthTextDialogComponent,
145+
AuthenticationAccountActivationComponent,
140146
],
141147
imports: [
142148
BrowserModule,

apps/user-profile/src/app/components/dialogs/activate-local-account-dialog/activate-local-account-dialog.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export interface ActivateLocalAccountData {
1414
}
1515

1616
@Component({
17-
selector: 'perun-web-apps-activate-local-account-dialog',
17+
selector: 'perun-web-apps-activate-authentication-local-account-dialog',
1818
templateUrl: './activate-local-account-dialog.component.html',
1919
styleUrls: ['./activate-local-account-dialog.component.scss'],
2020
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<h1 class="page-title">{{'AUTHENTICATION.ACCOUNT_ACTIVATION' | customTranslate | translate}}</h1>
2+
3+
<div *ngIf="displayLocalAccount" class="mb-5">
4+
<perun-web-apps-authentication-local-account></perun-web-apps-authentication-local-account>
5+
</div>
6+
7+
<div *ngIf="displaySambaPassword">
8+
<perun-web-apps-authentication-samba-password></perun-web-apps-authentication-samba-password>
9+
</div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Component, OnInit } from '@angular/core';
2+
import { StoreService } from '@perun-web-apps/perun/services';
3+
4+
@Component({
5+
selector: 'perun-web-apps-authentication-account-activation',
6+
templateUrl: './authentication-account-activation.component.html',
7+
styleUrls: ['./authentication-account-activation.component.scss'],
8+
})
9+
export class AuthenticationAccountActivationComponent implements OnInit {
10+
displayLocalAccount: boolean;
11+
displaySambaPassword: boolean;
12+
13+
constructor(private storeService: StoreService) {}
14+
15+
ngOnInit(): void {
16+
const displayedTabs = this.storeService.getProperty('displayed_tabs');
17+
this.displayLocalAccount = displayedTabs.includes('local_acc');
18+
this.displaySambaPassword = displayedTabs.includes('samba');
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<h1 class="page-title">{{'AUTHENTICATION.ANTI_PHISHING' | customTranslate | translate}}</h1>
2+
<div class="mb-5" *ngIf="displayImageBlock">
3+
<h1 class="page-subtitle">{{'AUTHENTICATION.TITLE' | customTranslate | translate}}</h1>
4+
<p>{{'AUTHENTICATION.ANTI_PHISHING_INFO' | customTranslate | translate}}</p>
5+
<div *ngIf="imageSrc && imageSrc.length">
6+
<img [src]="imageSrc" alt="" />
7+
</div>
8+
<button
9+
(click)="onAddAttribute(this.imgAtt, this.imgAttrName, 'AddAuthImgDialogComponent', 'IMG')"
10+
class="me-2 action-button"
11+
color="accent"
12+
mat-flat-button>
13+
{{'AUTHENTICATION.NEW_IMG' | customTranslate | translate}}
14+
</button>
15+
<button
16+
(click)="onDeleteAttribute(this.imgAtt, this.imgAttrName, 'IMG')"
17+
color="warn"
18+
[disabled]="!imgAtt || !imgAtt.value"
19+
mat-flat-button>
20+
{{'AUTHENTICATION.DELETE_IMG' | customTranslate | translate}}
21+
</button>
22+
</div>
23+
24+
<div class="mb-5" *ngIf="displayTextBlock">
25+
<h1 class="page-subtitle">{{'AUTHENTICATION.TITLE_TEXT' | customTranslate | translate}}</h1>
26+
<p>{{'AUTHENTICATION.ANTI_PHISHING_INFO_TEXT' | customTranslate | translate}}</p>
27+
<h4 *ngIf="textAtt" class="security-text">{{textAtt.value}}</h4>
28+
<button
29+
(click)="onAddAttribute(this.textAtt, this.textAttrName, 'AddAuthTextDialogComponent', 'TEXT')"
30+
class="me-2 action-button"
31+
color="accent"
32+
mat-flat-button>
33+
{{'AUTHENTICATION.NEW_TEXT' | customTranslate | translate}}
34+
</button>
35+
<button
36+
(click)="onDeleteAttribute(this.textAtt, this.textAttrName, 'TEXT')"
37+
color="warn"
38+
[disabled]="!textAtt || !textAtt.value"
39+
mat-flat-button>
40+
{{'AUTHENTICATION.DELETE_TEXT' | customTranslate | translate}}
41+
</button>
42+
</div>

apps/user-profile/src/app/pages/authentication-page/authentication-anti-phishing-security/authentication-anti-phishing-security.component.scss

Whitespace-only changes.

apps/user-profile/src/app/pages/settings-page/settings-authorization/settings-authentication.component.ts renamed to apps/user-profile/src/app/pages/authentication-page/authentication-anti-phishing-security/authentication-anti-phishing-security.component.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
1-
import { Component, OnInit, ViewChild } from '@angular/core';
2-
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
1+
import { Component, OnInit } from '@angular/core';
2+
import { Attribute, AttributesManagerService } from '@perun-web-apps/perun/openapi';
33
import { getDefaultDialogConfig } from '@perun-web-apps/perun/utils';
4+
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
45
import { AddAuthImgDialogComponent } from '../../../components/dialogs/add-auth-img-dialog/add-auth-img-dialog.component';
5-
import { Attribute, AttributesManagerService } from '@perun-web-apps/perun/openapi';
6+
import { AddAuthTextDialogComponent } from '../../../components/dialogs/add-auth-text-dialog/add-auth-text-dialog.component';
7+
import { RemoveStringValueDialogComponent } from '@perun-web-apps/perun/dialogs';
68
import {
79
NotificatorService,
810
PerunTranslateService,
911
StoreService,
1012
} from '@perun-web-apps/perun/services';
11-
import { RemoveStringValueDialogComponent } from '@perun-web-apps/perun/dialogs';
12-
import { MatSlideToggle } from '@angular/material/slide-toggle';
13-
import { AddAuthTextDialogComponent } from '../../../components/dialogs/add-auth-text-dialog/add-auth-text-dialog.component';
14-
import { ComponentType } from '@angular/cdk/overlay';
1513
import { Observable, Subject } from 'rxjs';
14+
import { ComponentType } from '@angular/cdk/overlay';
1615

1716
@Component({
18-
selector: 'perun-web-apps-settings-authentication',
19-
templateUrl: './settings-authentication.component.html',
20-
styleUrls: ['./settings-authentication.component.scss'],
17+
selector: 'perun-web-apps-authentication-anti-phishing-security',
18+
templateUrl: './authentication-anti-phishing-security.component.html',
19+
styleUrls: ['./authentication-anti-phishing-security.component.scss'],
2120
})
22-
export class SettingsAuthenticationComponent implements OnInit {
23-
@ViewChild('toggle') toggle: MatSlideToggle;
24-
21+
export class AuthenticationAntiPhishingSecurityComponent implements OnInit {
2522
imgAtt: Attribute;
2623
imgAttrName: string;
2724
imageSrc = '';
@@ -30,9 +27,11 @@ export class SettingsAuthenticationComponent implements OnInit {
3027
componentMapper: {
3128
[key: string]: ComponentType<AddAuthImgDialogComponent | AddAuthTextDialogComponent>;
3229
};
30+
31+
loading = false;
32+
3333
displayImageBlock: boolean;
3434
displayTextBlock: boolean;
35-
loading = false;
3635

3736
constructor(
3837
private dialog: MatDialog,
@@ -50,6 +49,7 @@ export class SettingsAuthenticationComponent implements OnInit {
5049
AddAuthImgDialogComponent: AddAuthImgDialogComponent,
5150
AddAuthTextDialogComponent: AddAuthTextDialogComponent,
5251
};
52+
5353
this.displayImageBlock = this.store.getProperty('mfa').enable_security_image;
5454
if (this.displayImageBlock) {
5555
this.loadSecurityAttribute(this.imgAttrName, true).subscribe((attr) => {

apps/user-profile/src/app/pages/settings-page/settings-local-account/settings-local-account.component.html renamed to apps/user-profile/src/app/pages/authentication-page/authentication-local-account/authentication-local-account.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<h1 class="page-title">{{'LOCAL_ACCOUNT.TITLE' | customTranslate | translate}}</h1>
1+
<h1 class="page-subtitle">{{'LOCAL_ACCOUNT.TITLE' | customTranslate | translate}}</h1>
22
<div class="page-subtitle">
33
{{'LOCAL_ACCOUNT.DESC' | customTranslate | translate}}
44
</div>

apps/user-profile/src/app/pages/authentication-page/authentication-local-account/authentication-local-account.component.scss

Whitespace-only changes.

apps/user-profile/src/app/pages/settings-page/settings-local-account/settings-local-account.component.ts renamed to apps/user-profile/src/app/pages/authentication-page/authentication-local-account/authentication-local-account.component.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ import { Router } from '@angular/router';
99
import { AppType } from '@perun-web-apps/perun/models';
1010

1111
@Component({
12-
selector: 'perun-web-apps-settings-local-account',
13-
templateUrl: './settings-local-account.component.html',
14-
styleUrls: ['./settings-local-account.component.scss'],
12+
selector: 'perun-web-apps-authentication-local-account',
13+
templateUrl: './authentication-local-account.component.html',
14+
styleUrls: ['./authentication-local-account.component.scss'],
1515
})
16-
export class SettingsLocalAccountComponent {
16+
export class AuthenticationLocalAccountComponent {
1717
userId: number = this.store.getPerunPrincipal().userId;
1818
namespace: string = this.store.getProperty('local_account_namespace');
1919
loginExists$: Observable<boolean> = this.userService.loginExist(this.userId, this.namespace);

apps/user-profile/src/app/pages/settings-page/settings-authorization/mfa-settings/mfa-settings.component.html renamed to apps/user-profile/src/app/pages/authentication-page/authentication-mfa-settings/authentication-mfa-settings.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<h1 class="page-subtitle">{{'AUTHENTICATION.MFA' | customTranslate | translate}}</h1>
1+
<h1 class="page-title">{{'AUTHENTICATION.MFA' | customTranslate | translate}}</h1>
22
<div class="mb-2">
33
<button
44
mat-flat-button

apps/user-profile/src/app/pages/settings-page/settings-authorization/mfa-settings/mfa-settings.component.ts renamed to apps/user-profile/src/app/pages/authentication-page/authentication-mfa-settings/authentication-mfa-settings.component.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ import { MfaSettings } from '@perun-web-apps/perun/models';
1515
import { MatCheckbox } from '@angular/material/checkbox';
1616

1717
@Component({
18-
selector: 'perun-web-apps-mfa-settings',
19-
templateUrl: './mfa-settings.component.html',
20-
styleUrls: ['./mfa-settings.component.scss'],
18+
selector: 'perun-web-apps-authentication-mfa-settings',
19+
templateUrl: './authentication-mfa-settings.component.html',
20+
styleUrls: ['./authentication-mfa-settings.component.scss'],
2121
})
22-
export class MfaSettingsComponent implements OnInit {
22+
export class AuthenticationMfaSettingsComponent implements OnInit {
2323
@ViewChild('master') checkbox: MatCheckbox;
2424

2525
mfaAvailable = false;

0 commit comments

Comments
 (0)