{"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 {{ icon }}\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 SEND RECOVERY LINK\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 LOG IN\n CONTINUE\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 VERIFY\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 CHANGE\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 CONTINUE\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:///"}
\n You will receive an email with a recovery link. Use that link to create a new password.\n
\n \n Enter your email address\n \n \n Enter a valid email address\n \n \n
\n {{ errorMessage }}\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 Enter your password\n \n \n Enter a password\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
Please enter one of your generated backup codes to login to your account.
\n \n Enter a backup code\n \n \n Invalid Code\n \n \n Try Again!\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 I agree to the\n terms of service\n \n
\n Unfortunately, your invite link has expired, please contact the person who invited you to receive a new one.\n
For your security, the invite link expires after 7 days.