{"version":3,"file":"125.371838b2eaf783c8.js","mappings":"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","sources":["./src/app/auth/private/components/password-field/password-field.component.html","./src/app/auth/private/components/password-field/password-field.component.ts","./src/app/auth/private/auth-private.module.ts","./src/app/auth/routes/forgot/state/forgot.actions.ts","./src/app/auth/routes/forgot/state/forgot.reducer.ts","./src/app/auth/routes/forgot/state/index.ts","./src/app/auth/routes/forgot/components/forgot-form.component.html","./src/app/auth/routes/forgot/components/forgot-form.component.ts","./src/app/auth/routes/forgot/containers/forgot-page.component.ts","./src/app/auth/routes/forgot/containers/forgot-page.component.html","./src/app/auth/routes/forgot/services/forgot.service.ts","./src/app/auth/routes/forgot/state/forgot.effects.ts","./src/app/auth/routes/forgot/auth-forgot.module.ts","./src/app/auth/routes/login/state/login.actions.ts","./src/app/auth/routes/login/state/login.reducer.ts","./src/app/auth/routes/login/state/index.ts","./src/app/auth/routes/login/state/new.login.actions.ts","./src/app/auth/routes/login/components/login-form/login-form.component.html","./src/app/auth/routes/login/components/login-form/login-form.component.ts","./src/app/auth/routes/login/components/verify-via-recovery-code/verify-via-recovery-code.component.html","./src/app/auth/routes/login/components/verify-via-recovery-code/verify-via-recovery-code.component.ts","./src/app/auth/routes/login/components/login/login.component.html","./src/app/auth/routes/login/components/login/login.component.ts","./src/app/auth/routes/login/containers/login-page.component.ts","./src/app/auth/routes/login/containers/login-page.component.html","./src/app/auth/routes/login/services/login.service.ts","./src/app/auth/routes/login/state/login.effects.ts","./src/app/auth/routes/login/auth-login.module.ts","./src/app/auth/routes/reset/state/reset.actions.ts","./src/app/auth/routes/reset/state/reset.reducer.ts","./src/app/auth/routes/reset/state/index.ts","./src/app/auth/routes/reset/components/reset-form.component.html","./src/app/auth/routes/reset/components/reset-form.component.ts","./src/app/auth/routes/reset/containers/reset-page.component.ts","./src/app/auth/routes/reset/containers/reset-page.component.html","./src/app/auth/routes/reset/services/reset.service.ts","./src/app/auth/routes/reset/state/reset.effects.ts","./src/app/auth/routes/reset/auth-reset.module.ts","./src/app/auth/routes/validate/state/validate.actions.ts","./src/app/auth/routes/validate/state/validate.reducer.ts","./src/app/auth/routes/validate/state/index.ts","./src/app/auth/routes/validate/components/validate-email-form/validate-email-form.component.html","./src/app/auth/routes/validate/components/validate-email-form/validate-email-form.component.ts","./src/app/auth/routes/validate/components/validate-email/validate-email.component.html","./src/app/auth/routes/validate/components/validate-email/validate-email.component.ts","./src/app/auth/routes/validate/containers/validate-page.component.ts","./src/app/auth/routes/validate/containers/validate-page.component.html","./src/app/auth/routes/validate/services/validate.service.ts","./src/app/auth/routes/validate/state/validate.effects.ts","./src/app/auth/routes/validate/auth-validate.module.ts","./src/app/auth/routes/auth-routes.module.ts"],"sourcesContent":["\n Create your password\n \n \n \n {{ length }} / {{ maxLength }}\n \n \n \n Enter a password\n \n \n Use at least {{ minLength }} characters\n \n \n Use a maximum of {{ maxLength }} characters\n \n \n Use at least one uppercase letter, one lowercase letter and one digit\n \n \n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { UntypedFormControl, Validators } from '@angular/forms';\nimport { FormControlComponent, getFormControlProviders } from '@app/shared/abstracts/form-control.component';\n\n// 10-20 characters, at least one uppercase letter, one lowercase letter and one number:\nconst MIN_LENGTH = 10;\nconst MAX_LENGTH = 20;\nconst VALIDATION_PATTERN = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[\\w\\S]{10,20}$/;\n\n@Component({\n selector: 'tc-password-field',\n templateUrl: './password-field.component.html',\n styleUrls: ['./password-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: getFormControlProviders(PasswordFieldComponent),\n})\nexport class PasswordFieldComponent extends FormControlComponent {\n @Input()\n autofocus = false;\n\n public control = new UntypedFormControl(\n '',\n Validators.compose([\n Validators.required,\n Validators.minLength(MIN_LENGTH),\n Validators.maxLength(MAX_LENGTH),\n Validators.pattern(VALIDATION_PATTERN),\n ]),\n );\n\n private obfuscated = true;\n\n public get type(): string {\n return this.obfuscated ? 'password' : 'text';\n }\n\n public get icon(): string {\n return this.obfuscated ? 'visibility_off' : 'visibility';\n }\n\n public get length(): number {\n return this.control.value.length;\n }\n\n public get minLength(): number {\n return MIN_LENGTH;\n }\n\n public get maxLength(): number {\n return MAX_LENGTH;\n }\n\n public get error(): string | null {\n return this.control.errors && Object.keys(this.control.errors)[0];\n }\n\n public toggleObfuscated(): void {\n this.obfuscated = !this.obfuscated;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SharedModule } from '@app/shared/shared.module';\nimport { PasswordFieldComponent } from './components/password-field/password-field.component';\n\nconst components = [PasswordFieldComponent];\n\n@NgModule({\n imports: [SharedModule],\n declarations: [components],\n exports: [components],\n})\nexport class AuthPrivateModule {}\n","/* eslint-disable max-classes-per-file */\nimport { Action } from '@ngrx/store';\nimport { RequestPasswordReset } from './forgot.model';\n\nexport enum ActionTypes {\n REQUEST_RESET = '[Auth] Request Reset',\n REQUEST_RESET_SUCCESS = '[Auth] Request Reset Success',\n REQUEST_RESET_FAILURE = '[Auth] Request Reset Failure',\n}\n\nexport class RequestReset implements Action {\n public readonly type = ActionTypes.REQUEST_RESET;\n\n constructor(public payload: RequestPasswordReset) {}\n}\n\nexport class RequestResetSuccess implements Action {\n public readonly type = ActionTypes.REQUEST_RESET_SUCCESS;\n}\n\nexport class RequestResetFailure implements Action {\n public readonly type = ActionTypes.REQUEST_RESET_FAILURE;\n\n constructor(public payload: string) {}\n}\n\nexport type Actions = RequestReset | RequestResetSuccess | RequestResetFailure;\n","import { Actions, ActionTypes } from './forgot.actions';\n\nexport interface State {\n readonly error: string | null;\n readonly pending: boolean;\n readonly success: boolean;\n}\n\nexport const initialState: State = {\n error: null,\n pending: false,\n success: false,\n};\n\nexport function reducer(state = initialState, action: Actions): State {\n switch (action.type) {\n case ActionTypes.REQUEST_RESET: {\n return {\n ...state,\n error: null,\n pending: true,\n success: false,\n };\n }\n\n case ActionTypes.REQUEST_RESET_SUCCESS: {\n return {\n ...state,\n error: null,\n pending: false,\n success: true,\n };\n }\n\n case ActionTypes.REQUEST_RESET_FAILURE: {\n return {\n ...state,\n error: action.payload,\n pending: false,\n success: false,\n };\n }\n\n default: {\n return state;\n }\n }\n}\n\nexport const getError = (state: State) => {\n return state.error;\n};\nexport const getPending = (state: State) => {\n return state.pending;\n};\nexport const getSuccess = (state: State) => {\n return state.success;\n};\n","import { ActionReducerMap, createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as forgot from './forgot.actions';\nimport * as fromForgot from './forgot.reducer';\n\nexport const actions = forgot;\nexport * from './forgot.model';\n\nexport interface State {\n readonly authForgot: fromForgot.State;\n}\n\nexport const reducers: ActionReducerMap = {\n authForgot: fromForgot.reducer,\n};\n\nconst selectState = createFeatureSelector('authForgot');\n\nexport const select = {\n error: createSelector(selectState, fromForgot.getError),\n pending: createSelector(selectState, fromForgot.getPending),\n success: createSelector(selectState, fromForgot.getSuccess),\n};\n","
\n\n \n \n Forgot password?\n \n\n \n

\n You will receive an email with a recovery link. Use that link to create a new password.\n

\n\n

\n \n Enter your email address\n \n \n Enter a valid email address\n \n \n

\n\n

\n {{ errorMessage }}\n

\n
\n\n \n Cancel\n \n \n
\n\n \n \n Recovery link sent!\n \n \n

\n If an active account exists in Tradecloud One with this email address, a recovery link has been sent to your mailbox.\n

\n
\n
\n\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormComponent } from '@app/shared/abstracts/form.component';\nimport * as forgot from '../state';\n\n@Component({\n selector: 'tc-forgot-form',\n templateUrl: './forgot-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ForgotFormComponent extends FormComponent {\n @Input()\n success!: boolean;\n\n public form = new UntypedFormGroup({\n email: new UntypedFormControl('', Validators.compose([Validators.required, Validators.email])),\n });\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { select, Store } from '@ngrx/store';\nimport * as forgot from '../state';\n\n@Component({\n selector: 'tc-forgot-page',\n templateUrl: './forgot-page.component.html',\n styleUrls: ['./forgot-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ForgotPageComponent implements OnInit {\n public pending$ = this.store$.pipe(select(forgot.select.pending));\n public error$ = this.store$.pipe(select(forgot.select.error));\n public success$ = this.store$.pipe(select(forgot.select.success));\n public value: forgot.RequestPasswordReset | undefined;\n\n constructor(private route: ActivatedRoute, private store$: Store) {}\n\n ngOnInit(): void {\n if (this.route.snapshot.queryParamMap.has('email')) {\n const email = this.route.snapshot.queryParamMap.get('email')!;\n this.value = { email };\n this.onSubmit({ email });\n }\n }\n\n public onSubmit($event: forgot.RequestPasswordReset): void {\n this.store$.dispatch(new forgot.actions.RequestReset($event));\n }\n}\n","
\n \n \n \n\n \n \n \n
\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { API } from '@app/shared/api/api.service';\nimport * as forgot from '../state';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class ForgotService {\n constructor(private http: HttpClient, private api: API) {}\n\n public requestPasswordReset$(body: forgot.RequestPasswordReset): Observable<{ ok: boolean }> {\n return this.http.post<{ ok: boolean }>(this.api.PASSWORD_RESET_REQUEST(), body);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, mapTo } from 'rxjs/operators';\nimport { ForgotService } from '../services/forgot.service';\nimport * as actions from './forgot.actions';\n\n@Injectable()\nexport class ForgotEffects {\n requestReset$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.REQUEST_RESET),\n map(action => {\n return action.payload;\n }),\n exhaustMap(payload => {\n return this.forgotService.requestPasswordReset$(payload).pipe(\n mapTo(new actions.RequestResetSuccess()),\n catchError(({ error }: HttpErrorResponse) => {\n return of(new actions.RequestResetFailure(error.message || error));\n }),\n );\n }),\n );\n });\n\n constructor(private actions$: Actions, private forgotService: ForgotService) {}\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { SharedModule } from '@app/shared/shared.module';\nimport { AuthPrivateModule } from '@app/auth/private/auth-private.module';\nimport { ForgotFormComponent } from './components/forgot-form.component';\nimport { ForgotPageComponent } from './containers/forgot-page.component';\nimport { ForgotService } from './services/forgot.service';\nimport { ForgotEffects } from './state/forgot.effects';\nimport { reducer } from './state/forgot.reducer';\n\nconst routes: Routes = [\n {\n path: 'forgot',\n component: ForgotPageComponent,\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forChild(routes),\n SharedModule,\n AuthPrivateModule,\n StoreModule.forFeature('authForgot', reducer),\n EffectsModule.forFeature([ForgotEffects]),\n ],\n declarations: [ForgotPageComponent, ForgotFormComponent],\n providers: [ForgotService],\n})\nexport class AuthForgotModule {}\n","/* eslint-disable max-classes-per-file */\nimport { Action } from '@ngrx/store';\nimport { Credentials } from './login.model';\nimport { TwoFACode } from '@app/auth/core/state/auth.model';\n\nexport enum ActionTypes {\n LOGIN = '[Auth] Login',\n LOGIN_SUCCESS = '[Auth] Login Success',\n LOGIN_FAILURE = '[Auth] Login Failure',\n LOGIN_CHECK_EMAIL_DOMAIN = '[Auth] Login check SSO',\n LOGIN_SHOW_PASSWORD = '[Auth] Login show password',\n LOGIN_TO_AZURE_AD_SUCCESS = '[Auth] Login to azure ad success',\n\n VERIFY_2FA_CODE = '[Auth] Verify 2FA Code',\n VERIFY_2FA_VIA_RECOVERY_CODE = '[Auth] Verify 2FA Via Recovery Code',\n VERIFY_2FA_CODE_FAILURE = '[Auth] Verify 2FA Code or Backup Failure',\n}\n\n// todo: rewrite to new Actions approach and back code from new.login.actions.ts\nexport class Login implements Action {\n public readonly type = ActionTypes.LOGIN;\n\n constructor(public payload: Credentials) {}\n}\n\nexport class LoginSuccess implements Action {\n public readonly type = ActionTypes.LOGIN_SUCCESS;\n}\n\nexport class LoginFailure implements Action {\n public readonly type = ActionTypes.LOGIN_FAILURE;\n\n constructor(\n public payload: {\n error: string;\n attemptsLeft?: number;\n bannedTime?: number;\n },\n ) {}\n}\n\nexport class LoginVerify2FACode implements Action {\n public readonly type = ActionTypes.VERIFY_2FA_CODE;\n\n constructor(public payload: TwoFACode) {}\n}\n\nexport class LoginVerify2FACodeFailure implements Action {\n public readonly type = ActionTypes.VERIFY_2FA_CODE_FAILURE;\n\n constructor(\n public payload:\n | { code: string }\n | {\n attemptsLeft: number;\n banned: number;\n message: string;\n },\n ) {}\n}\n\nexport class LoginShowPassword implements Action {\n public readonly type = ActionTypes.LOGIN_SHOW_PASSWORD;\n}\n\nexport class LoginToAzureADSuccess implements Action {\n public readonly type = ActionTypes.LOGIN_TO_AZURE_AD_SUCCESS;\n}\n\nexport class LoginCheckEmailDomain implements Action {\n public readonly type = ActionTypes.LOGIN_CHECK_EMAIL_DOMAIN;\n\n constructor(public payload: string) {}\n}\n\nexport type Actions =\n | Login\n | LoginSuccess\n | LoginFailure\n | LoginVerify2FACode\n | LoginVerify2FACodeFailure\n | LoginCheckEmailDomain\n | LoginShowPassword\n | LoginToAzureADSuccess;\n","import { Actions, ActionTypes } from './login.actions';\nimport { Verify2FAError } from '@app/auth/routes/login/state/login.model';\n\nexport interface State {\n readonly loginError?: string;\n readonly verify2FAError?: Verify2FAError;\n readonly pending: boolean;\n readonly showPasswordField: boolean;\n readonly attemptsLeft?: number;\n readonly bannedTime?: number;\n}\n\nexport const initialState: State = {\n pending: false,\n showPasswordField: false,\n};\n\nexport function reducer(state = initialState, action: Actions): State {\n switch (action.type) {\n case ActionTypes.LOGIN: {\n return {\n ...state,\n loginError: undefined,\n pending: true,\n };\n }\n\n case ActionTypes.LOGIN_SUCCESS: {\n return {\n ...state,\n loginError: undefined,\n attemptsLeft: undefined,\n bannedTime: undefined,\n pending: false,\n };\n }\n\n case ActionTypes.LOGIN_FAILURE: {\n return {\n ...state,\n loginError: action.payload.error,\n attemptsLeft: action.payload.attemptsLeft,\n bannedTime: action.payload.bannedTime,\n pending: false,\n };\n }\n\n case ActionTypes.LOGIN_SHOW_PASSWORD: {\n return {\n ...state,\n showPasswordField: true,\n };\n }\n\n case ActionTypes.VERIFY_2FA_CODE_FAILURE: {\n return {\n ...state,\n verify2FAError: action.payload,\n };\n }\n\n default: {\n return state;\n }\n }\n}\n\nexport const getLoginError = (state: State) => {\n return state.loginError;\n};\nexport const getVerify2FAError = (state: State) => {\n return state.verify2FAError;\n};\nexport const getPending = (state: State) => {\n return state.pending;\n};\n","import { ActionReducerMap, createFeatureSelector, createSelector } from '@ngrx/store';\nimport * as login from './login.actions';\nimport * as fromLogin from './login.reducer';\n\nexport const actions = login;\nexport * from './login.model';\n\nexport interface State {\n readonly authLogin: fromLogin.State;\n}\n\nexport const reducers: ActionReducerMap = {\n authLogin: fromLogin.reducer,\n};\n\nexport type LoginState = fromLogin.State;\n\nconst selectState = createFeatureSelector('authLogin');\n\nexport const select = {\n loginError: createSelector(selectState, fromLogin.getLoginError),\n verify2FAError: createSelector(selectState, fromLogin.getVerify2FAError),\n pending: createSelector(selectState, fromLogin.getPending),\n state: selectState,\n};\n","import { createAction, props } from '@ngrx/store';\nimport { BackupCode } from '@app/auth/models';\nimport { ActionTypes } from '@app/auth/routes/login/state/login.actions';\n\nexport const recoveryVerifyCode = createAction(ActionTypes.VERIFY_2FA_VIA_RECOVERY_CODE, props());\n","
\n \n \n Log in\n \n \n

\n \n Enter your email address\n \n \n Enter a valid email address\n \n \n

\n\n

\n \n Enter your password\n \n \n Enter a password\n \n \n

\n\n

\n {{ errorMessage }}\n {{ errorMessage }}, you have {{attempts}} attempts left\n All your attempts failed, you can try again at {{unlockedDate | date:'HH:mm:ss'}}\n

\n
\n \n Forgot password?\n \n \n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormComponent } from '@app/shared/abstracts/form.component';\nimport { Credentials } from '../../state';\n\n@Component({\n selector: 'tc-login-form',\n templateUrl: './login-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoginFormComponent extends FormComponent {\n @Input()\n showPasswordField?: boolean;\n\n @Input()\n attempts?: number;\n\n unlockedDate?: Date;\n\n @Input()\n set bannedTime(n: number) {\n if (n) {\n this.unlockedDate = new Date(Date.now() + n * 1000);\n }\n }\n\n @Output()\n readonly emailAndPasswordSubmitted = new EventEmitter();\n\n @Output()\n readonly emailSubmitted = new EventEmitter();\n\n get showAttempts(): boolean {\n return typeof this.attempts === 'number' && this.attempts > 0;\n }\n\n public form = new UntypedFormGroup({\n email: new UntypedFormControl('', Validators.compose([Validators.required, Validators.email])),\n password: new UntypedFormControl('', Validators.required),\n });\n\n public submit(): void {\n if (this.form.controls.email.valid) {\n if (this.form.valid && this.showPasswordField) {\n this.emailAndPasswordSubmitted.emit(this.normalizedFormValue);\n } else {\n this.emailSubmitted.emit(this.normalizedFormValue.email);\n }\n }\n }\n}\n","
\n \n \n

Please enter one of your generated backup codes to login to your account.

\n

\n \n Enter a backup code\n \n \n Invalid Code\n \n \n Try Again!\n \n \n

\n
\n \n BACK\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { BackupCode, Identity } from '@app/auth/models';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { LENGTH_BACKUP_CODE } from '@app/auth/routes/login/components/verify-2fa-code/verify-2fa-code-form.component';\nimport { FormComponent } from '@app/shared/abstracts/form.component';\n\n@Component({\n selector: 'tc-verify-via-recovery-code',\n templateUrl: './verify-via-recovery-code.component.html',\n styleUrls: ['./verify-via-recovery-code.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VerifyViaRecoveryCodeComponent extends FormComponent implements OnChanges {\n @Input()\n identity?: Identity;\n\n @Input()\n verify2FAError?: { code: string };\n\n public form = new UntypedFormGroup({\n backupCode: new UntypedFormControl(\n '',\n Validators.compose([\n Validators.required,\n Validators.minLength(LENGTH_BACKUP_CODE),\n Validators.maxLength(LENGTH_BACKUP_CODE),\n ]),\n ),\n });\n\n @Output()\n readonly backToVerification = new EventEmitter();\n\n goBackToLogin(): void {\n this.backToVerification.emit();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.verify2FAError && changes.verify2FAError.currentValue !== changes.verify2FAError.previousValue) {\n const errorCode = changes.verify2FAError.currentValue.code;\n if (errorCode) {\n const error =\n errorCode === 'identity.2fa.invalid_code'\n ? { [errorCode]: true }\n : { ['identity.2fa.validation_error']: true };\n this.form.controls.backupCode.setErrors(error);\n }\n }\n }\n}\n","
\n \n \n\n \n \n \n \n \n Setup 2FA\n \n \n \n \n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { TwoFACode } from '@app/auth/core/state/auth.model';\nimport { BackupCode, Identity } from '@app/auth/models';\nimport { Credentials, LoginState } from '@app/auth/routes/login/state';\nimport { Configure2FA } from '@app/auth/core/state/auth.reducer';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { select, Store } from '@ngrx/store';\nimport { selectRecoveryCodes } from '@app/auth/core/state/auth.selectors';\nimport { UserState } from '@app/user/core/state/user.reducer';\nimport { TwoFactorSetupService } from '@app/shared/services/two-factor-setup.service';\nimport { map, takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'tc-login',\n templateUrl: './login.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TwoFactorSetupService],\n})\nexport class LoginComponent implements OnDestroy {\n @Input()\n identity?: Identity;\n\n @Input()\n loginState?: LoginState;\n\n @Input()\n configure2FA!: Configure2FA;\n\n @Output()\n readonly loginUser = new EventEmitter();\n\n @Output()\n readonly checkEmailDomain = new EventEmitter();\n\n @Output()\n readonly verify2FA = new EventEmitter();\n\n @Output()\n readonly verify2FAViaBackup = new EventEmitter();\n\n @Output()\n readonly enable2FA = new EventEmitter();\n\n @Output()\n readonly backToLogin = new EventEmitter();\n\n @Output()\n readonly clearRecovery = new EventEmitter();\n\n public backupCodes$: Observable = this.store$.pipe(select(selectRecoveryCodes));\n\n public readonly shouldVerifyWithBackupCode$ = new BehaviorSubject<'initial' | 'verification' | 'backup'>(\n 'verification',\n );\n private destroyed$ = new Subject();\n\n constructor(private store$: Store, private twoFService: TwoFactorSetupService) {\n this.initTwoFASetup();\n }\n\n onBackToLogin(): void {\n this.backToLogin.emit();\n }\n\n onBackToVerification(): void {\n this.shouldVerifyWithBackupCode$.next('verification');\n }\n\n public onSwitchToFormWithBackup(): void {\n this.shouldVerifyWithBackupCode$.next('backup');\n }\n\n initTwoFASetup(): void {\n this.twoFService.backupCodes$\n .pipe(\n map(codes => {\n return !!codes?.length;\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(value => {\n this.twoFService.emitLastStep(value);\n });\n\n this.twoFService.onReset$.pipe(takeUntil(this.destroyed$)).subscribe(() => {\n this.clearRecovery.emit();\n });\n\n this.twoFService.onEnable$.pipe(takeUntil(this.destroyed$)).subscribe(value => {\n this.enable2FA.emit(value);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport * as login from '../state';\nimport { selectAuthIdentity, selectConfigure2FA } from '@app/auth/core/state/auth.selectors';\nimport { TwoFACode } from '@app/auth/core/state/auth.model';\nimport {\n authBackToLogin,\n authClearConfigure2FAState,\n authRedirectAfterLogin,\n authSetup2FAAndLogin,\n} from '@app/auth/core/state/auth.actions';\nimport { BackupCode } from '@app/auth/models';\nimport { recoveryVerifyCode } from '@app/auth/routes/login/state/new.login.actions';\n\n@Component({\n selector: 'tc-login-page',\n templateUrl: './login-page.component.html',\n styleUrls: ['./login-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoginPageComponent {\n public identity$ = this.store$.pipe(select(selectAuthIdentity));\n public configure2FA$ = this.store$.pipe(select(selectConfigure2FA));\n public loginState$ = this.store$.pipe(select(login.select.state));\n\n constructor(private store$: Store) {}\n\n public onLogin($event: login.Credentials): void {\n this.store$.dispatch(new login.actions.Login($event));\n }\n\n public onCheckEmailDomain($event: string): void {\n this.store$.dispatch(new login.actions.LoginCheckEmailDomain($event));\n }\n\n public onVerify2FA($event: TwoFACode): void {\n this.store$.dispatch(new login.actions.LoginVerify2FACode($event));\n }\n\n public onVerify2FAViaRecoveryCode(event: BackupCode): void {\n this.store$.dispatch(recoveryVerifyCode(event));\n }\n\n onEnable2FA(event: TwoFACode): void {\n this.store$.dispatch(authSetup2FAAndLogin(event));\n }\n\n onBackToLogin(): void {\n this.store$.dispatch(authBackToLogin());\n }\n\n onClearRecoveryAndGoInside(): void {\n this.store$.dispatch(authClearConfigure2FAState());\n this.store$.dispatch(authRedirectAfterLogin({ path: '' }));\n }\n}\n","
\n \n \n \n\n \n \n
\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { API } from '@app/shared/api/api.service';\nimport * as login from '../state';\nimport { Observable } from 'rxjs';\nimport { BackupCode, Identity } from '@app/auth/models';\nimport { TwoFACode } from '@app/auth/core/state/auth.model';\n\n@Injectable()\nexport class LoginService {\n constructor(private http: HttpClient, private api: API) {}\n\n public login$({ email, password }: login.Credentials): Observable {\n const auth = window.btoa(`${email}:${password}`);\n const headers = new HttpHeaders().set('Authorization', `Basic ${auth}`);\n\n return this.http.get(this.api.LOGIN(), {\n headers,\n });\n }\n\n public verify2FACode$(twoFACode: TwoFACode): Observable {\n return this.http.post(this.api.VERIFY_2FA_CODE(), {\n code: parseInt(twoFACode.code, 10),\n });\n }\n\n public verify2FAViaRecoveryCode$(recoveryBackupCode: BackupCode): Observable {\n return this.http.post(this.api.VERIFY_RECOVERY_2FA(), recoveryBackupCode);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, concatMap, exhaustMap, map } from 'rxjs/operators';\nimport { LoginService } from '../services/login.service';\nimport { ssoConnections } from '../state/sso.connections';\nimport * as actions from './login.actions';\nimport {\n authRedirectAfterLogin,\n authSetIdentityAndBootup,\n authSetIdentityWithoutBooting,\n authSetIdentityWithoutBootingAndGenerateSecret,\n} from '@app/auth/core/state/auth.actions';\nimport { Identity } from '@app/auth/models';\nimport { Action } from '@ngrx/store';\nimport { MsalService } from '@app/msal/msal.service';\nimport { StorageKeys, StorageService } from '@app/core/services/storage/storage.service';\nimport { recoveryVerifyCode } from './new.login.actions';\n\n@Injectable()\nexport class LoginEffects {\n login$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.LOGIN),\n map(action => {\n return action.payload;\n }),\n exhaustMap(credentials => {\n return this.loginService.login$(credentials).pipe(\n concatMap((resp: Identity): Action[] => {\n if (resp.status === 'needs_2fa_code_verification') {\n return [authSetIdentityWithoutBooting(resp)];\n }\n\n if (resp.status === 'needs_2fa_setup') {\n return [authSetIdentityWithoutBootingAndGenerateSecret(resp)];\n }\n\n if (resp.status === 'authenticated') {\n return [new actions.LoginSuccess(), authRedirectAfterLogin({ path: '' }), authSetIdentityAndBootup(resp)];\n }\n\n return [new actions.LoginFailure({ error: 'status.invalid' })];\n }),\n catchError((response: HttpErrorResponse) => {\n if (response.status === 401) {\n const { attemptsLeft: attempts = 0, banned = 0 } = response.error;\n\n return of(\n new actions.LoginFailure({\n error: response.error.message || response.error,\n attemptsLeft: Number(attempts),\n bannedTime: Number(banned),\n }),\n );\n }\n\n return of(new actions.LoginFailure({ error: response.error.message || response.error }));\n }),\n );\n }),\n );\n });\n\n checkEmailDomain$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.LOGIN_CHECK_EMAIL_DOMAIN),\n map(action => {\n return action.payload;\n }),\n concatMap(email => {\n this.storage.set(StorageKeys.MSAL_EMAIL, email);\n const connection = ssoConnections.getConnection(email);\n if (connection) {\n this.msalService.clearMSALHistory();\n\n return this.msalService.loginRedirect$().pipe(\n map(() => {\n return new actions.LoginToAzureADSuccess();\n }),\n );\n }\n\n return [new actions.LoginShowPassword()];\n }),\n );\n });\n\n verify2FA$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.VERIFY_2FA_CODE),\n map(action => {\n return action.payload;\n }),\n concatMap(twoFACode => {\n return this.loginService.verify2FACode$({ code: twoFACode.code }).pipe(\n concatMap((identity: Identity) => {\n if (identity.status === 'authenticated') {\n return [authRedirectAfterLogin({ path: '' }), authSetIdentityAndBootup(identity)];\n }\n\n return [];\n }),\n catchError((response: HttpErrorResponse) => {\n if (response.status === 401) {\n const { attemptsLeft: attempts = 0, banned = 0, message } = response.error;\n\n return of(\n new actions.LoginVerify2FACodeFailure({\n attemptsLeft: Number(attempts),\n banned: Number(banned),\n message,\n }),\n );\n }\n\n return of(new actions.LoginVerify2FACodeFailure(response.error));\n }),\n );\n }),\n );\n });\n\n verify2FAViaRecoveryCode$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(recoveryVerifyCode),\n map(action => {\n return action.backupCode;\n }),\n concatMap(backupCode => {\n return this.loginService.verify2FAViaRecoveryCode$({ backupCode }).pipe(\n concatMap((identity: Identity) => {\n if (identity.status === 'authenticated') {\n return [authRedirectAfterLogin({ path: '' }), authSetIdentityAndBootup(identity)];\n }\n\n return [];\n }),\n catchError(({ error }: HttpErrorResponse) => {\n return of(new actions.LoginVerify2FACodeFailure(error));\n }),\n );\n }),\n );\n });\n\n constructor(\n private actions$: Actions,\n private loginService: LoginService,\n private msalService: MsalService,\n private storage: StorageService,\n ) {}\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { SharedModule } from '@app/shared/shared.module';\nimport { PublicGuard } from '@app/auth/core/guards/public.guard';\nimport { AuthPrivateModule } from '@app/auth/private/auth-private.module';\nimport { LoginFormComponent } from './components/login-form/login-form.component';\nimport { LoginPageComponent } from './containers/login-page.component';\nimport { LoginService } from './services/login.service';\nimport { LoginEffects } from './state/login.effects';\nimport { reducer } from './state/login.reducer';\nimport { Verify2faCodeFormComponent } from '@app/auth/routes/login/components/verify-2fa-code/verify-2fa-code-form.component';\nimport { LoginComponent } from '@app/auth/routes/login/components/login/login.component';\nimport { VerifyViaRecoveryCodeComponent } from './components/verify-via-recovery-code/verify-via-recovery-code.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: LoginPageComponent,\n canActivate: [PublicGuard],\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forChild(routes),\n SharedModule,\n AuthPrivateModule,\n StoreModule.forFeature('authLogin', reducer),\n EffectsModule.forFeature([LoginEffects]),\n ],\n declarations: [\n LoginPageComponent,\n LoginComponent,\n LoginFormComponent,\n Verify2faCodeFormComponent,\n VerifyViaRecoveryCodeComponent,\n ],\n providers: [LoginService],\n})\nexport class AuthLoginModule {}\n","/* eslint-disable max-classes-per-file */\nimport { Action } from '@ngrx/store';\nimport { ResetPassword as ResetPasswordPayload } from './reset.model';\n\nexport enum ActionTypes {\n RESET_PASSWORD = '[Auth] Reset Password',\n RESET_PASSWORD_SUCCESS = '[Auth] Reset Password Success',\n RESET_PASSWORD_FAILURE = '[Auth] Reset Password Failure',\n}\n\nexport class ResetPassword implements Action {\n public readonly type = ActionTypes.RESET_PASSWORD;\n\n constructor(public payload: ResetPasswordPayload) {}\n}\n\nexport class ResetPasswordSuccess implements Action {\n public readonly type = ActionTypes.RESET_PASSWORD_SUCCESS;\n}\n\nexport class ResetPasswordFailure implements Action {\n public readonly type = ActionTypes.RESET_PASSWORD_FAILURE;\n\n constructor(public payload: string) {}\n}\n\nexport type Actions = ResetPassword | ResetPasswordSuccess | ResetPasswordFailure;\n","import { Actions, ActionTypes } from './reset.actions';\n\nexport interface State {\n readonly error: string | null;\n readonly pending: boolean;\n}\n\nexport const initialState: State = {\n error: null,\n pending: false,\n};\n\nexport function reducer(state = initialState, action: Actions): State {\n switch (action.type) {\n case ActionTypes.RESET_PASSWORD: {\n return {\n ...state,\n error: null,\n pending: true,\n };\n }\n\n case ActionTypes.RESET_PASSWORD_SUCCESS: {\n return {\n ...state,\n error: null,\n pending: false,\n };\n }\n\n case ActionTypes.RESET_PASSWORD_FAILURE: {\n return {\n ...state,\n error: action.payload,\n pending: false,\n };\n }\n\n default: {\n return state;\n }\n }\n}\n\nexport const getError = (state: State) => {\n return state.error;\n};\nexport const getPending = (state: State) => {\n return state.pending;\n};\n","import { ActionReducerMap, createFeatureSelector, createSelector } from '@ngrx/store';\nimport * as reset from './reset.actions';\nimport * as fromReset from './reset.reducer';\n\nexport const actions = reset;\nexport * from './reset.model';\n\nexport interface State {\n readonly authReset: fromReset.State;\n}\n\nexport const reducers: ActionReducerMap = {\n authReset: fromReset.reducer,\n};\n\nconst selectState = createFeatureSelector('authReset');\n\nexport const select = {\n error: createSelector(selectState, fromReset.getError),\n pending: createSelector(selectState, fromReset.getPending),\n};\n","
\n \n \n Change your password\n \n\n \n

\n Use 10 to 20 characters, at least one lowercase letter, one uppercase letter and\n one digit.\n

\n\n

\n \n

\n\n

\n {{ errorMessage }}\n

\n
\n\n \n \n \n
\n
\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormComponent } from '@app/shared/abstracts/form.component';\nimport { ResetPassword } from '../state';\n\n@Component({\n selector: 'tc-reset-form',\n templateUrl: './reset-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResetFormComponent extends FormComponent {\n public form = new UntypedFormGroup({\n email: new UntypedFormControl('', Validators.required),\n passwordResetToken: new UntypedFormControl('', Validators.required),\n plainPassword: new UntypedFormControl('', Validators.required),\n });\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { select, Store } from '@ngrx/store';\nimport * as reset from '../state';\n\n@Component({\n selector: 'tc-reset-page',\n templateUrl: './reset-page.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResetPageComponent {\n public pending$ = this.store$.pipe(select(reset.select.pending));\n public error$ = this.store$.pipe(select(reset.select.error));\n public value$ = this.route.params;\n\n constructor(private store$: Store, private route: ActivatedRoute) {}\n\n public onSubmit($event: reset.ResetPassword): void {\n this.store$.dispatch(new reset.actions.ResetPassword($event));\n }\n}\n","
\n \n \n \n\n \n \n \n
\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { API } from '@app/shared/api/api.service';\nimport * as reset from '../state';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class ResetService {\n constructor(private http: HttpClient, private api: API) {}\n\n public resetPassword$(body: reset.ResetPassword): Observable {\n return this.http.post(this.api.PASSWORD_RESET(), body, { responseType: 'text' });\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, mapTo, mergeMapTo } from 'rxjs/operators';\nimport { NotificationType } from '@app/core/state/core.model';\nimport { ResetService } from '../services/reset.service';\nimport * as actions from './reset.actions';\nimport { authRedirectAfterLogin } from '@app/auth/core/state/auth.actions';\nimport { notificationSend } from '@app/core/state/core.actions';\n\n@Injectable()\nexport class ResetEffects {\n resetPassword$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.RESET_PASSWORD),\n map(action => {\n return action.payload;\n }),\n exhaustMap(payload => {\n return this.resetService.resetPassword$(payload).pipe(\n mapTo(new actions.ResetPasswordSuccess()),\n catchError(({ error }: HttpErrorResponse) => {\n try {\n const parsedError = JSON.parse(error);\n\n return of(new actions.ResetPasswordFailure(parsedError.message || parsedError));\n } catch (e) {\n return of(new actions.ResetPasswordFailure(error.message || error));\n }\n }),\n );\n }),\n );\n });\n\n resetPasswordSuccess$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.RESET_PASSWORD_SUCCESS),\n mergeMapTo([\n authRedirectAfterLogin({ path: '' }),\n notificationSend({\n message: $localize`:@@ts.reset.success:Password saved`,\n notificationType: NotificationType.SUCCESS,\n }),\n ]),\n );\n });\n\n constructor(private actions$: Actions, private resetService: ResetService) {}\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { SharedModule } from '@app/shared/shared.module';\nimport { AuthPrivateModule } from '@app/auth/private/auth-private.module';\nimport { ResetFormComponent } from './components/reset-form.component';\nimport { ResetPageComponent } from './containers/reset-page.component';\nimport { ResetService } from './services/reset.service';\nimport { ResetEffects } from './state/reset.effects';\nimport { reducer } from './state/reset.reducer';\n\nconst routes: Routes = [\n {\n path: 'reset/:email/:passwordResetToken',\n component: ResetPageComponent,\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forChild(routes),\n SharedModule,\n AuthPrivateModule,\n StoreModule.forFeature('authReset', reducer),\n EffectsModule.forFeature([ResetEffects]),\n ],\n declarations: [ResetPageComponent, ResetFormComponent],\n providers: [ResetService],\n})\nexport class AuthResetModule {}\n","/* eslint-disable max-classes-per-file */\nimport { Action } from '@ngrx/store';\nimport { ValidateIdentity } from './validate.model';\nimport { TwoFACode } from '@app/auth/core/state/auth.model';\n\nexport enum ActionTypes {\n VALIDATE = '[Auth] Validate',\n VALIDATE_SUCCESS = '[Auth] Validate Success',\n VALIDATE_FAILURE = '[Auth] Validate Failure',\n\n VALIDATE_LINK = '[Auth] Validate Link',\n VALIDATE_LINK_SUCCESS = '[Auth] Validate Link Success',\n VALIDATE_LINK_FAILURE = '[Auth] Validate Link Failure',\n\n VERIFY_2FA_CODE = '[Auth] Verify 2FA Code',\n VERIFY_2FA_CODE_FAILURE = '[Auth] Verify 2FA Code Failure',\n}\n\nexport class Validate implements Action {\n public readonly type = ActionTypes.VALIDATE;\n\n constructor(public payload: ValidateIdentity) {}\n}\n\nexport class ValidateSuccess implements Action {\n public readonly type = ActionTypes.VALIDATE_SUCCESS;\n}\n\nexport class ValidateFailure implements Action {\n public readonly type = ActionTypes.VALIDATE_FAILURE;\n\n constructor(public payload: { code?: string; message: string; httpStatus?: number }) {}\n}\n\nexport class ValidateEmailVerify2FACode implements Action {\n public readonly type = ActionTypes.VERIFY_2FA_CODE;\n\n constructor(public payload: TwoFACode) {}\n}\n\nexport class ValidateEmailVerify2FACodeFailure implements Action {\n public readonly type = ActionTypes.VERIFY_2FA_CODE_FAILURE;\n\n constructor(public payload: { code: string }) {}\n}\n\nexport class ValidateLink implements Action {\n public readonly type = ActionTypes.VALIDATE_LINK;\n\n constructor(public payload: Pick) {}\n}\n\nexport class ValidateLinkSuccess implements Action {\n public readonly type = ActionTypes.VALIDATE_LINK_SUCCESS;\n}\n\nexport class ValidateLinkFailure implements Action {\n public readonly type = ActionTypes.VALIDATE_LINK_FAILURE;\n\n constructor(public payload: { code?: string; message: string; httpStatus?: number }) {}\n}\n\nexport type Actions =\n | ValidateLink\n | ValidateLinkFailure\n | ValidateLinkSuccess\n | Validate\n | ValidateSuccess\n | ValidateFailure\n | ValidateEmailVerify2FACode\n | ValidateEmailVerify2FACodeFailure;\n","import { Actions, ActionTypes } from './validate.actions';\n\nexport interface State {\n readonly error: string | null;\n readonly pending: boolean;\n readonly linkValid: boolean;\n}\n\nexport const initialState: State = {\n error: null,\n pending: false,\n linkValid: true,\n};\n\nexport function reducer(state = initialState, action: Actions): State {\n switch (action.type) {\n case ActionTypes.VALIDATE: {\n return {\n ...state,\n error: null,\n pending: true,\n };\n }\n\n case ActionTypes.VALIDATE_SUCCESS: {\n return {\n ...state,\n error: null,\n pending: false,\n };\n }\n\n case ActionTypes.VALIDATE_FAILURE: {\n return {\n ...state,\n error: action.payload.message,\n pending: false,\n };\n }\n\n case ActionTypes.VALIDATE_LINK: {\n return {\n ...state,\n error: null,\n pending: true,\n };\n }\n\n case ActionTypes.VALIDATE_LINK_SUCCESS: {\n return {\n ...state,\n error: null,\n pending: false,\n linkValid: true,\n };\n }\n\n case ActionTypes.VALIDATE_LINK_FAILURE: {\n return {\n ...state,\n error: action.payload.message,\n pending: false,\n linkValid: false,\n };\n }\n\n default: {\n return state;\n }\n }\n}\n\nexport const getError = (state: State) => {\n return state.error;\n};\nexport const getPending = (state: State) => {\n return state.pending;\n};\nexport const getLinkValid = (state: State) => {\n return state.linkValid;\n};\n","import { ActionReducerMap, createFeatureSelector, createSelector } from '@ngrx/store';\nimport * as validate from './validate.actions';\nimport * as fromValidate from './validate.reducer';\n\nexport const actions = validate;\nexport * from './validate.model';\n\nexport interface State {\n readonly authValidate: fromValidate.State;\n}\n\nexport const reducers: ActionReducerMap = {\n authValidate: fromValidate.reducer,\n};\n\nconst selectState = createFeatureSelector('authValidate');\n\nexport const select = {\n error: createSelector(selectState, fromValidate.getError),\n pending: createSelector(selectState, fromValidate.getPending),\n isLinkValid: createSelector(selectState, fromValidate.getLinkValid),\n};\n","
\n \n \n Create your account\n \n\n \n

\n Use 10 to 20 characters, at least one lowercase letter, one uppercase letter and\n one digit.\n

\n\n

\n \n

\n\n

\n \n I agree to the\n terms of service\n \n

\n\n

\n {{ errorMessage }}\n

\n
\n\n \n \n \n
\n
\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormComponent } from '@app/shared/abstracts/form.component';\nimport * as validate from '../../state';\n\n@Component({\n selector: 'tc-validate-email-form',\n templateUrl: './validate-email-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ValidateEmailFormComponent extends FormComponent {\n public form = new UntypedFormGroup({\n email: new UntypedFormControl('', Validators.required),\n identityValidationToken: new UntypedFormControl('', Validators.required),\n plainPassword: new UntypedFormControl('', Validators.required),\n });\n}\n","\n\n\n
\n \n \n Invitation link expired!\n \n \n

\n Unfortunately, your invite link has expired, please contact the person who invited you to receive a new one.\n

\n

For your security, the invite link expires after 7 days.

\n
\n timer\n
\n
\n
\n
\n\n\n Setup 2FA\n \n \n \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport * as validate from '../../state';\nimport { Identity } from '@app/auth/models';\n\n@Component({\n selector: 'tc-validate-email',\n templateUrl: './validate-email.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ValidateEmailComponent {\n @Input()\n identity?: Identity;\n\n @Input()\n verify2FAError?: { code: string };\n\n @Input()\n pending?: boolean;\n\n @Input()\n linkValid?: boolean;\n\n @Input()\n validateError?: string;\n\n @Input()\n validateValue?: string;\n\n @Input()\n backupCodes?: string[];\n\n @Output()\n readonly validateIdentity = new EventEmitter();\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { select, Store } from '@ngrx/store';\nimport * as validate from '../state';\nimport * as login from '@app/auth/routes/login/state';\nimport { selectAuthIdentity, selectRecoveryCodes } from '@app/auth/core/state/auth.selectors';\nimport { TwoFACode } from '@app/auth/core/state/auth.model';\nimport {\n authClearConfigure2FAState,\n authRedirectAfterLogin,\n authSetup2FAAndLogin,\n} from '@app/auth/core/state/auth.actions';\nimport { map, take, takeUntil, tap } from 'rxjs/operators';\nimport { TwoFactorSetupService } from '@app/shared/services/two-factor-setup.service';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'tc-validate-page',\n templateUrl: './validate-page.component.html',\n styleUrls: ['./validate-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TwoFactorSetupService],\n})\nexport class ValidatePageComponent implements OnDestroy {\n public pending$ = this.store$.pipe(select(validate.select.pending));\n public error$ = this.store$.pipe(select(validate.select.error));\n public isLinkValid$ = this.store$.pipe(select(validate.select.isLinkValid));\n public value$ = this.route.params;\n\n public verify2FAError$ = this.store$.pipe(select(login.select.verify2FAError));\n public identity$ = this.store$.pipe(select(selectAuthIdentity));\n public backupCodes$ = this.store$.pipe(select(selectRecoveryCodes));\n private destroyed$ = new Subject();\n\n constructor(\n private store$: Store,\n private route: ActivatedRoute,\n private twoFService: TwoFactorSetupService,\n ) {\n this.route.params\n .pipe(\n take(1),\n tap(({ identityValidationToken, email }) => {\n this.store$.dispatch(new validate.actions.ValidateLink({ identityValidationToken, email }));\n }),\n )\n .subscribe();\n this.initTwoFASetup();\n }\n\n public onValidateIdentity($event: validate.ValidateIdentity): void {\n this.store$.dispatch(new validate.actions.Validate($event));\n }\n\n onEnable2FA($event: TwoFACode): void {\n this.store$.dispatch(authSetup2FAAndLogin($event));\n }\n\n onClearRecoveryAndGoInside(): void {\n this.store$.dispatch(authClearConfigure2FAState());\n this.store$.dispatch(authRedirectAfterLogin({ path: '' }));\n }\n\n initTwoFASetup(): void {\n this.twoFService.backupCodes$\n .pipe(\n map(codes => {\n return !!codes?.length;\n }),\n takeUntil(this.destroyed$),\n )\n .subscribe(value => {\n this.twoFService.emitLastStep(value);\n });\n\n this.twoFService.onReset$.pipe(takeUntil(this.destroyed$)).subscribe(() => {\n this.onClearRecoveryAndGoInside();\n });\n\n this.twoFService.onEnable$.pipe(takeUntil(this.destroyed$)).subscribe(value => {\n this.onEnable2FA(value);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","
\n \n \n \n\n \n \n
\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { API } from '@app/shared/api/api.service';\nimport * as validate from '../state';\nimport { Observable } from 'rxjs';\nimport { Identity } from '@app/auth/models';\n\n@Injectable()\nexport class ValidateService {\n constructor(private http: HttpClient, private api: API) {}\n\n public validate$(body: validate.ValidateIdentity): Observable {\n return this.http.post(this.api.VALIDATE(), body);\n }\n\n public validateLink$(body: Pick): Observable {\n return this.http.post(this.api.VALIDATE_LINK(), body);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, concatMap, exhaustMap, map, mapTo, mergeMap } from 'rxjs/operators';\nimport { NotificationType } from '@app/core/state/core.model';\nimport { ValidateService } from '../services/validate.service';\nimport * as actions from './validate.actions';\nimport {\n authRedirectAfterLogin,\n authRedirectToLogin,\n authSetIdentityAndBootup,\n authSetIdentityWithoutBooting,\n authSetIdentityWithoutBootingAndGenerateSecret,\n} from '@app/auth/core/state/auth.actions';\nimport { notificationSend } from '@app/core/state/core.actions';\nimport { Identity } from '@app/auth/models';\n\n@Injectable()\nexport class ValidateEffects {\n validate$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.VALIDATE),\n map(action => {\n return action.payload;\n }),\n exhaustMap(payload => {\n return this.validateService.validate$(payload).pipe(\n mergeMap((resp: Identity) => {\n if (resp.status === 'needs_2fa_code_verification') {\n return [authSetIdentityWithoutBooting(resp)];\n }\n\n if (resp.status === 'needs_2fa_setup') {\n return [authSetIdentityWithoutBootingAndGenerateSecret(resp)];\n }\n\n if (resp.status === 'authenticated') {\n return [\n new actions.ValidateSuccess(),\n authSetIdentityAndBootup(resp),\n authRedirectAfterLogin({ path: '' }),\n ];\n }\n\n return [new actions.ValidateFailure({ message: 'status.invalid' })];\n }),\n catchError((httpError: HttpErrorResponse) => {\n return of(\n new actions.ValidateFailure({\n code: httpError.error.code,\n message: httpError.error.message || httpError.error,\n httpStatus: httpError.status,\n }),\n );\n }),\n );\n }),\n );\n });\n\n validateSuccess$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.VALIDATE_SUCCESS),\n mapTo(\n notificationSend({\n message: $localize`:@@ts.validate.pass.success:Password saved`,\n notificationType: NotificationType.SUCCESS,\n }),\n ),\n );\n });\n\n validateFailure$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.VALIDATE_FAILURE),\n map(action => {\n return action.payload;\n }),\n concatMap(payload => {\n if (payload.code === 'invalid.operation') {\n return [\n notificationSend({\n message: $localize`:@@ts.validate.email.invalid:Email already verified`,\n notificationType: NotificationType.ERROR,\n }),\n authRedirectToLogin({ path: window.location.pathname }),\n ];\n }\n\n return [];\n }),\n );\n });\n\n validateLink$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(actions.ActionTypes.VALIDATE_LINK),\n map(action => {\n return action.payload;\n }),\n exhaustMap(payload => {\n return this.validateService.validateLink$(payload).pipe(\n map((resp: Identity) => {\n return new actions.ValidateLinkSuccess();\n }),\n catchError((httpError: HttpErrorResponse) => {\n return of(\n new actions.ValidateLinkFailure({\n code: httpError.error.code,\n message: httpError.error.message || httpError.error,\n httpStatus: httpError.status,\n }),\n );\n }),\n );\n }),\n );\n });\n\n constructor(private actions$: Actions, private validateService: ValidateService) {}\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { SharedModule } from '@app/shared/shared.module';\nimport { PublicGuard } from '@app/auth/core/guards/public.guard';\nimport { AuthPrivateModule } from '@app/auth/private/auth-private.module';\nimport { ValidateEmailComponent } from './components/validate-email/validate-email.component';\nimport { ValidateEmailFormComponent } from './components/validate-email-form/validate-email-form.component';\nimport { ValidatePageComponent } from './containers/validate-page.component';\nimport { ValidateService } from './services/validate.service';\nimport { ValidateEffects } from './state/validate.effects';\nimport { reducer } from './state/validate.reducer';\n\nconst routes: Routes = [\n {\n path: 'validate/:email/:identityValidationToken',\n component: ValidatePageComponent,\n canActivate: [PublicGuard],\n },\n];\n\n@NgModule({\n imports: [\n RouterModule.forChild(routes),\n SharedModule,\n AuthPrivateModule,\n StoreModule.forFeature('authValidate', reducer),\n EffectsModule.forFeature([ValidateEffects]),\n ],\n declarations: [ValidatePageComponent, ValidateEmailComponent, ValidateEmailFormComponent],\n providers: [ValidateService],\n})\nexport class AuthValidateModule {}\n","import { NgModule } from '@angular/core';\nimport { AuthForgotModule } from './forgot/auth-forgot.module';\nimport { AuthLoginModule } from './login/auth-login.module';\nimport { AuthResetModule } from './reset/auth-reset.module';\nimport { AuthValidateModule } from './validate/auth-validate.module';\n\n@NgModule({\n imports: [AuthForgotModule, AuthLoginModule, AuthResetModule, AuthValidateModule],\n})\nexport class AuthRoutesModule {}\n"],"names":["i0","VALIDATION_PATTERN","PasswordFieldComponent","FormControlComponent","constructor","this","UntypedFormControl","Validators","type","obfuscated","icon","length","control","value","minLength","maxLength","error","errors","Object","keys","toggleObfuscated","t","selectors","getFormControlProviders","$localize","ctx","AuthPrivateModule","SharedModule","ActionTypes","RequestReset","payload","REQUEST_RESET","RequestResetSuccess","REQUEST_RESET_SUCCESS","RequestResetFailure","REQUEST_RESET_FAILURE","initialState","pending","success","reducer","state","action","actions","forgot","selectState","createFeatureSelector","select","createSelector","ForgotFormComponent","FormComponent","UntypedFormGroup","email","ForgotPageComponent","route","store$","pipe","ngOnInit","snapshot","queryParamMap","has","get","onSubmit","$event","dispatch","ForgotService","http","api","requestPasswordReset$","body","post","PASSWORD_RESET_REQUEST","factory","ForgotEffects","actions$","forgotService","createEffect","ofType","map","exhaustMap","mapTo","catchError","of","message","routes","path","component","AuthForgotModule","imports","RouterModule","StoreModule","EffectsModule","Login","LOGIN","LoginSuccess","LOGIN_SUCCESS","LoginFailure","LOGIN_FAILURE","LoginVerify2FACode","VERIFY_2FA_CODE","LoginVerify2FACodeFailure","VERIFY_2FA_CODE_FAILURE","LoginShowPassword","LOGIN_SHOW_PASSWORD","LoginToAzureADSuccess","LOGIN_TO_AZURE_AD_SUCCESS","LoginCheckEmailDomain","LOGIN_CHECK_EMAIL_DOMAIN","showPasswordField","loginError","undefined","attemptsLeft","bannedTime","verify2FAError","login","recoveryVerifyCode","createAction","props","LoginFormComponent","EventEmitter","password","n","unlockedDate","Date","now","showAttempts","attempts","submit","form","controls","valid","emailAndPasswordSubmitted","emit","normalizedFormValue","emailSubmitted","VerifyViaRecoveryCodeComponent","backupCode","LENGTH_BACKUP_CODE","goBackToLogin","backToVerification","ngOnChanges","changes","currentValue","previousValue","errorCode","code","setErrors","r","LoginComponent","twoFService","selectRecoveryCodes","BehaviorSubject","Subject","initTwoFASetup","onBackToLogin","backToLogin","onBackToVerification","shouldVerifyWithBackupCode$","next","onSwitchToFormWithBackup","backupCodes$","codes","takeUntil","destroyed$","subscribe","emitLastStep","onReset$","clearRecovery","onEnable$","enable2FA","ngOnDestroy","complete","TwoFactorSetupService","decls","LoginPageComponent","selectAuthIdentity","selectConfigure2FA","onLogin","onCheckEmailDomain","onVerify2FA","onVerify2FAViaRecoveryCode","event","onEnable2FA","authSetup2FAAndLogin","authBackToLogin","onClearRecoveryAndGoInside","authClearConfigure2FAState","authRedirectAfterLogin","LoginService","login$","auth","window","btoa","headers","HttpHeaders","set","verify2FACode$","twoFACode","parseInt","verify2FAViaRecoveryCode$","recoveryBackupCode","VERIFY_RECOVERY_2FA","LoginEffects","loginService","msalService","storage","credentials","concatMap","resp","status","authSetIdentityWithoutBooting","authSetIdentityWithoutBootingAndGenerateSecret","authSetIdentityAndBootup","response","banned","Number","StorageKeys","ssoConnections","clearMSALHistory","loginRedirect$","identity","canActivate","PublicGuard","AuthLoginModule","ResetPassword","RESET_PASSWORD","ResetPasswordSuccess","RESET_PASSWORD_SUCCESS","ResetPasswordFailure","RESET_PASSWORD_FAILURE","reset","ResetFormComponent","passwordResetToken","plainPassword","ResetPageComponent","params","ResetService","resetPassword$","PASSWORD_RESET","responseType","ResetEffects","resetService","parsedError","JSON","parse","mergeMapTo","notificationSend","notificationType","NotificationType","AuthResetModule","Validate","VALIDATE","ValidateSuccess","VALIDATE_SUCCESS","ValidateFailure","VALIDATE_FAILURE","ValidateEmailVerify2FACode","ValidateEmailVerify2FACodeFailure","ValidateLink","VALIDATE_LINK","ValidateLinkSuccess","VALIDATE_LINK_SUCCESS","ValidateLinkFailure","VALIDATE_LINK_FAILURE","linkValid","validate","isLinkValid","ValidateEmailFormComponent","identityValidationToken","ValidateEmailComponent","ValidatePageComponent","take","tap","onValidateIdentity","ValidateService","validate$","validateLink$","ValidateEffects","validateService","mergeMap","httpError","httpStatus","authRedirectToLogin","location","pathname","AuthValidateModule","AuthRoutesModule"],"sourceRoot":"webpack:///"}