{"version":3,"file":"90101.dd4011a633e28681.js","mappings":"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","names":["ForgotPasswordService","baseService","constructor","this","sendForgotPasswordCode","forgotPasswordSendCodeModel","apiUrl","complexApiURL","post","JSON","stringify","validateUser","forgotPasswordUserValidation","saveForgotPasswordChange","forgotPasswordChangeModel","i0","i1","factory","ɵfac","ForgotPasswordSendCodeModel","Email","FingerPrint","ForgotPasswordUserInfoModel","UserId","SecurityQuestion","Message","ForgotPasswordUserValidationModel","SecurityAnswer","ValidationCode","ForgotPasswordChangeModel","NewPassword","ConfirmPassword","ctx_r0","form","controlList","EmailControl","SecurityAnswerControl","ForgotPasswordModalComponent_Conditional_1_Conditional_3_Conditional_4_Template","forgotPasswordUserInfoModel","ValidationCodeControl","newPasswordControl","confirmPasswordControl","ForgotPasswordModalComponent_Conditional_1_Conditional_2_Template","ForgotPasswordModalComponent_Conditional_1_Conditional_3_Template","ForgotPasswordModalComponent_Conditional_1_Conditional_4_Template","showEmail","showValidation","showChangePassword","_r2","onSendCode","isDisabled","_r3","onValidateUser","_r4","onChangePasswordSave","ForgotPasswordModalComponent","ComponentBase","forgotPasswordService","formBuilder","modalRef","browserFingerprint","isReady","isLoading","forgotPasswordValidationModel","key","label","data","type","maxLength","validators","Validators","CustomValidators","super","valid","ngOnInit","group","Object","assign","getRawValue","addSubscription","subscribe","fpUserInfo","error","passwordComplexity","setControlValidators","hide","PasswordMinimumLength","validationMessages","minlength","PasswordRequiresNumber","push","hasDigitValidator","PasswordRequiresSymbol","hasSymbolValidator","PasswordRequiresMixedCase","mixedCaseValidator","concat","controls","equalToValidator","i2","i3","selectors","inputs","standalone","features","decls","vars","consts","template","rf","ctx","ForgotPasswordModalComponent_Conditional_1_Template","ForgotPasswordModalComponent_Conditional_2_Template","ForgotPasswordModalComponent_Conditional_3_Template","ForgotPasswordModalComponent_Conditional_4_Template","ModalBodyComponent","ReactiveFormsModule","SharedModule","InputRComponent","encapsulation","ctx_r1","loginForm","passwordControl","tokenControl","processText","userMessage","loginButtonIsDisabled","loginButtonText","onForgotClick","LoginState","ApiVersionCheckFailed","Authenticating","CheckingApiVersion","CheckingAuthenticationMode","ReadyForEmail","ReadyForLogin","Start","BaseLoginComponent","applicationSecurityService","authService","homepageService","notificationService","router","sectionListPreferenceService","openStatusLink","window","open","AppSettings","postLoginRedirectAsync","authenticatedInfo","_this","_asyncToGenerator","sessionStorage","setItem","User","IsChangeIdentityEnabled","toString","DefaultSection","removeItem","nxg","samlResponse","undefined","storeUser","storeUserPermissions","UserPermissions","storeSectionListPreferences","UserSectionListPreference","EnableOverrideNextGenApiUri","OverrideNextGenApiUri","AppFunctions","ChangePasswordMessage","homepageUrl","getClientDefaultHomePage","find","x","DefaultHomePage","url","IsEnableExchangeLoginScreen","IsUserExchangeEnable","IsAppExchangeEnabled","navigateByUrl","IsSkippedExchangeLoginScreen","i4","i5","i6","LoginComponent","fingerprintService","activatedRoute","titleService","modalService","emailRef","loginState","isToken","isSamlLogin","enableForgotPasswordLink","samlToken","releaseVersionDescription","model","LoginModel","authServiceSubscription","apiVersionSubscription","fiTheme","showEmailControl","showPasswordControl","showProcessText","spinner","showLoginButton","buttonText","emailControl","emailValidator","rows","setTitle","isSamlAccess","snapshot","queryParams","samlaccess","appaccess","getItem","clearAllStorage","buildForm","document","documentElement","getAttribute","getAppSettings","next","settings","uiBuildVersion","ApiBuildVersion","storeAppSettings","onSubmit","_","ngAfterViewInit","fromEvent","input","nativeElement","pipe","debounceTime","distinctUntilChanged","checkEmail","ngOnDestroy","unsubscribe","_this2","fingerprint","generateBrowserFingerprint","login","getAuthenticatedInfo","_this3","show","initialState","loginWithToken","token","i","length","localStorage","startsWith","email","status","setTimeout","determineAuthenticationMode","getAuthenticationSettings","result","AuthenticationMode","EnableForgotPasswordLink","location","href","SamlIdpUrl","i7","i8","i9","i10","viewQuery","SectionListPreferenceService","LoginComponent_Conditional_1_Template","LoginComponent_Conditional_2_Template","_r1","LoginComponent_Conditional_8_Template","LoginComponent_Conditional_9_Template","LoginComponent_Conditional_11_Template","LoginComponent_Conditional_12_Template","LoginComponent_Conditional_13_Template","LoginComponent_Conditional_15_Template","FormsModule","TextareaRComponent","userSectionListPreferenceName","columnPreferences","value","saveColumnPreference","columnPreferenceList","body","getColumnPreference","get"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/app/shared/common/admin/users/forgot-password/forgot-password.api.service.ts","./src/app/shared/common/admin/users/forgot-password/forgot-password-modal.component.html","./src/app/shared/common/admin/users/forgot-password/forgot-password-modal.component.ts","./src/app/login.component.html","./src/app/login.component.ts","./src/app/shared/components/section-list-preference.service.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { UnificationAPIService } from \"@shared/services/unification.api.service\";\r\nimport { PasswordComplexityDto } from \"../password-complexity.model\";\r\n\r\n@Injectable()\r\nexport class ForgotPasswordService {\r\n constructor(\r\n private baseService: UnificationAPIService\r\n ) {\r\n\r\n }\r\n\r\n sendForgotPasswordCode(forgotPasswordSendCodeModel: ForgotPasswordSendCodeModel): Observable {\r\n let apiUrl: string = this.baseService.complexApiURL() + 'User/SendForgotPasswordCode';\r\n\r\n return this.baseService.post(apiUrl, JSON.stringify(forgotPasswordSendCodeModel));\r\n }\r\n\r\n validateUser(forgotPasswordUserValidation: ForgotPasswordUserValidationModel): Observable {\r\n let apiUrl: string = this.baseService.complexApiURL() + 'User/ValidateForgotPasswordCode';\r\n\r\n return this.baseService.post(apiUrl, JSON.stringify(forgotPasswordUserValidation));\r\n }\r\n\r\n saveForgotPasswordChange(forgotPasswordChangeModel: ForgotPasswordChangeModel): Observable {\r\n let apiUrl: string = this.baseService.complexApiURL() + 'User/SaveForgotPasswordChange';\r\n\r\n return this.baseService.post(apiUrl, JSON.stringify(forgotPasswordChangeModel));\r\n }\r\n}\r\n\r\nexport class ForgotPasswordSendCodeModel {\r\n Email: string = null;\r\n FingerPrint: string = null;\r\n}\r\n\r\nexport class ForgotPasswordUserInfoModel {\r\n UserId: string = null;\r\n SecurityQuestion: string = null;\r\n Message: string = null;\r\n}\r\n\r\nexport class ForgotPasswordUserValidationModel {\r\n UserId: string = null;\r\n SecurityAnswer: string = null;\r\n ValidationCode: string = null;\r\n}\r\n\r\nexport class ForgotPasswordChangeModel {\r\n UserId: string = null;\r\n NewPassword: string = '';\r\n ConfirmPassword: string = '';\r\n}\r\n","\r\n @if (isReady) {\r\n
\r\n
\r\n @if (showEmail) {\r\n
\r\n \r\n
\r\n }\r\n @if (showValidation) {\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n @if (forgotPasswordUserInfoModel.SecurityQuestion) {\r\n
\r\n \r\n
\r\n }\r\n }\r\n @if (showChangePassword) {\r\n
\r\n \r\n \r\n
\r\n }\r\n
\r\n
\r\n }\r\n @if (showEmail) {\r\n \r\n }\r\n @if (showValidation) {\r\n \r\n }\r\n @if (showChangePassword) {\r\n \r\n }\r\n
\r\n\r\n","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from \"@angular/forms\";\r\n\r\nimport { ComponentBase } from \"@shared/components/component-base\";\r\nimport { BhControl } from \"@shared/controls/helpers/bh-control.class\";\r\nimport { CustomValidators } from \"@shared/controls/validators/custom.validator\";\r\nimport {\r\n ForgotPasswordSendCodeModel,\r\n ForgotPasswordService,\r\n ForgotPasswordUserInfoModel,\r\n ForgotPasswordUserValidationModel,\r\n ForgotPasswordChangeModel\r\n} from \"./forgot-password.api.service\";\r\nimport { PasswordComplexityDto } from \"../password-complexity.model\";\r\nimport { ModalBodyComponent } from \"shared/modals/modal-body/modal-body.component\";\r\n\r\nimport { SharedModule } from \"shared/shared.module\";\r\nimport { BsModalRef } from \"ngx-bootstrap/modal\";\r\nimport { InputRComponent } from \"shared/controls/reactive/bh-r-input.component\";\r\n\r\n@Component({\r\n selector: 'forgot-password-modal',\r\n standalone: true,\r\n templateUrl: 'forgot-password-modal.component.html',\r\n imports: [\r\n ModalBodyComponent,\r\n ReactiveFormsModule,\r\n SharedModule,\r\n InputRComponent\r\n],\r\n providers: [ForgotPasswordService]\r\n})\r\nexport class ForgotPasswordModalComponent extends ComponentBase implements OnInit {\r\n @Input() browserFingerprint: string = '';\r\n form: FormGroup;\r\n isReady: boolean = false;\r\n isLoading: boolean = false;\r\n private forgotPasswordSendCodeModel: ForgotPasswordSendCodeModel = new ForgotPasswordSendCodeModel();\r\n forgotPasswordUserInfoModel: ForgotPasswordUserInfoModel = new ForgotPasswordUserInfoModel();\r\n private forgotPasswordValidationModel: ForgotPasswordUserValidationModel = new ForgotPasswordUserValidationModel();\r\n private forgotPasswordChangeModel: ForgotPasswordChangeModel = new ForgotPasswordChangeModel();\r\n showEmail: boolean = true;\r\n showValidation: boolean = false;\r\n showChangePassword: boolean = false;\r\n\r\n controlList = {\r\n EmailControl: {\r\n key: 'Email',\r\n label: 'Email',\r\n data: {type: 'email', maxLength: 100},\r\n validators: [Validators.required, CustomValidators.emailValidator]\r\n },\r\n SecurityAnswerControl: {\r\n key: 'SecurityAnswer',\r\n label: '',\r\n data: {maxLength: 255},\r\n validators: [Validators.required]\r\n },\r\n ValidationCodeControl: {\r\n key: 'ValidationCode',\r\n label: 'Code',\r\n data: {maxLength: 6},\r\n validators: [Validators.required]\r\n },\r\n newPasswordControl: {\r\n key: 'NewPassword',\r\n label: 'New Password',\r\n data: {type: 'password', maxLength: 50},\r\n validators: [Validators.required]\r\n },\r\n confirmPasswordControl: {\r\n key: 'ConfirmPassword',\r\n label: 'Confirm Password',\r\n data: {type: 'password', maxLength: 50},\r\n validators: [Validators.required]\r\n }\r\n };\r\n\r\n constructor(\r\n private readonly forgotPasswordService: ForgotPasswordService,\r\n private readonly formBuilder: FormBuilder,\r\n private readonly modalRef: BsModalRef\r\n ) {\r\n super()\r\n }\r\n\r\n get isDisabled() {\r\n return !this.form.valid || this.isLoading;\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.form = this.formBuilder.group(this.forgotPasswordSendCodeModel);\r\n this.isReady = true;\r\n }\r\n\r\n public onSendCode(): void {\r\n this.isLoading = true;\r\n Object.assign(this.forgotPasswordSendCodeModel, this.form.getRawValue() as ForgotPasswordSendCodeModel)\r\n this.forgotPasswordSendCodeModel.FingerPrint = this.browserFingerprint;\r\n this.addSubscription =\r\n this.forgotPasswordService.sendForgotPasswordCode(this.forgotPasswordSendCodeModel)\r\n .subscribe(\r\n (fpUserInfo: ForgotPasswordUserInfoModel) => {\r\n this.isReady = false;\r\n this.showEmail = false;\r\n Object.assign(this.forgotPasswordUserInfoModel, fpUserInfo);\r\n this.controlList.SecurityAnswerControl.label = fpUserInfo.SecurityQuestion;\r\n this.forgotPasswordValidationModel.UserId = this.forgotPasswordChangeModel.UserId = fpUserInfo.UserId;\r\n this.form = this.formBuilder.group(this.forgotPasswordValidationModel);\r\n this.showValidation = true;\r\n this.isReady = true;\r\n this.isLoading = false;\r\n },\r\n error => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n public onValidateUser(): void {\r\n this.isLoading = true;\r\n Object.assign(this.forgotPasswordValidationModel, this.form.getRawValue() as ForgotPasswordUserValidationModel);\r\n this.addSubscription =\r\n this.forgotPasswordService.validateUser(this.forgotPasswordValidationModel)\r\n .subscribe(\r\n (passwordComplexity: PasswordComplexityDto) => {\r\n this.isReady = false;\r\n this.showValidation = false;\r\n this.form = this.formBuilder.group(this.forgotPasswordChangeModel);\r\n this.setControlValidators(passwordComplexity);\r\n this.showChangePassword = true;\r\n this.isReady = true;\r\n this.isLoading = false;\r\n },\r\n error => {\r\n this.isLoading = false;\r\n if (error.error && error.error.error === 'An unexpected error occured. Please refresh the screen and try again. If this issue persists, please contact a system administrator for help.') {\r\n this.modalRef.hide();\r\n }\r\n });\r\n }\r\n\r\n public onChangePasswordSave(): void {\r\n this.isLoading = true;\r\n Object.assign(this.forgotPasswordChangeModel, this.form.getRawValue() as ForgotPasswordChangeModel)\r\n this.addSubscription =\r\n this.forgotPasswordService.saveForgotPasswordChange(this.forgotPasswordChangeModel)\r\n .subscribe(\r\n () => {\r\n this.isLoading = false;\r\n this.modalRef.hide();\r\n },\r\n error => {\r\n this.isLoading = false;\r\n if (error.error && error.error.error === 'An unexpected error occured. Please refresh the screen and try again. If this issue persists, please contact a system administrator for help.') {\r\n this.modalRef.hide();\r\n }\r\n });\r\n }\r\n\r\n private setControlValidators(passwordComplexity: PasswordComplexityDto): void {\r\n let validators = [Validators.minLength(passwordComplexity.PasswordMinimumLength)];\r\n let validationMessages = {\r\n minlength: `The password must be at least ${passwordComplexity.PasswordMinimumLength} characters long.`\r\n };\r\n\r\n if (passwordComplexity.PasswordRequiresNumber) {\r\n validators.push(CustomValidators.hasDigitValidator);\r\n validationMessages['hasDigitValidator'] = 'The password must contain a number.';\r\n }\r\n\r\n if (passwordComplexity.PasswordRequiresSymbol) {\r\n validators.push(CustomValidators.hasSymbolValidator);\r\n validationMessages['hasSymbolValidator'] = 'The password must contain a symbol.';\r\n }\r\n\r\n if (passwordComplexity.PasswordRequiresMixedCase) {\r\n validators.push(CustomValidators.mixedCaseValidator);\r\n validationMessages['mixedCaseValidator'] = 'The password must be mixed case.';\r\n }\r\n\r\n this.controlList.newPasswordControl.validators = this.controlList.newPasswordControl.validators.concat(validators);\r\n this.controlList.newPasswordControl.validationMessages = validationMessages;\r\n\r\n let passwordControl = this.form.controls[this.controlList.newPasswordControl.key];\r\n\r\n this.controlList.confirmPasswordControl.validators = this.controlList.confirmPasswordControl.validators.concat(CustomValidators.equalToValidator(passwordControl));\r\n this.controlList.confirmPasswordControl.validationMessages = {\r\n equalToValidator: 'Password and Confirm Password do not match.'\r\n };\r\n }\r\n}\r\n","
\r\n @if (fiTheme!=='fiserv') {\r\n
\r\n }\r\n @if (fiTheme!=='fiserv') {\r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n @if (showPasswordControl) {\r\n \r\n }\r\n @if (isToken) {\r\n \r\n }\r\n
\r\n @if (showProcessText) {\r\n

\r\n }\r\n @if (userMessage) {\r\n
{{userMessage}}
\r\n }\r\n @if (showLoginButton) {\r\n \r\n }\r\n
\r\n
\r\n @if (enableForgotPasswordLink && showPasswordControl && !isSamlLogin) {\r\n Forgot Password?\r\n }\r\n
\r\n
\r\n
\r\n
\r\n {{releaseVersionDescription}}\r\n \r\n
\r\n
\r\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Observable, Subscription, debounceTime, distinctUntilChanged, fromEvent } from 'rxjs';\r\nimport { AppFunctions } from 'shared/app.functions';\r\nimport { AuthenticatedInfoModel, AuthorizationService, LoginModel } from 'shared/authorization.service';\r\nimport { SectionListPreferenceService } from 'shared/components/section-list-preference.service';\r\nimport { BhControl } from 'shared/controls/helpers/bh-control.class';\r\nimport { CustomValidators } from 'shared/controls/validators/custom.validator';\r\nimport { AppSettingsModel } from 'shared/models/app-settings.model';\r\nimport { ApplicationSecurityService } from 'shared/services/application-security.service';\r\nimport { DefaultHomePageService } from 'shared/services/default-homepage.service';\r\nimport { NotificationService } from 'shared/services/notification.service';\r\nimport { DeviceFingerprintService } from './device-fingerprint.service';\r\nimport { AppSettings } from './app.globals';\r\nimport { ModalService } from \"shared/modals/modal.service\";\r\nimport {\r\n ForgotPasswordModalComponent\r\n} from \"shared/common/admin/users/forgot-password/forgot-password-modal.component\";\nimport { TextareaRComponent } from './shared/controls/reactive/bh-r-textarea.component';\nimport { InputRComponent } from './shared/controls/reactive/bh-r-input.component';\n\r\n\r\nexport enum LoginState {\r\n ApiVersionCheckFailed,\r\n Authenticating,\r\n CheckingApiVersion,\r\n CheckingAuthenticationMode,\r\n ReadyForEmail,\r\n ReadyForLogin,\r\n Start\r\n}\r\n\r\n@Component({\r\n template: '',\r\n standalone: true\r\n})\r\nexport class BaseLoginComponent {\r\n\r\n constructor(\r\n protected readonly applicationSecurityService: ApplicationSecurityService,\r\n protected readonly authService: AuthorizationService,\r\n protected readonly homepageService: DefaultHomePageService,\r\n protected readonly notificationService: NotificationService,\r\n protected readonly router: Router,\r\n protected readonly sectionListPreferenceService: SectionListPreferenceService\r\n ) {\r\n\r\n }\r\n\r\n openStatusLink() {\r\n window.open(AppSettings.STATUS_URL, \"_blank\");\r\n }\r\n\r\n async postLoginRedirectAsync(authenticatedInfo: AuthenticatedInfoModel): Promise {\r\n sessionStorage.setItem(\"show_change_identity\", authenticatedInfo.User.IsChangeIdentityEnabled.toString());\r\n sessionStorage.setItem(\"user_preferred_default_opportunity_section\", authenticatedInfo.DefaultSection);\r\n\r\n // Removing email and SAMLResponse from session storage\r\n sessionStorage.removeItem('SAMLResponse');\r\n if (window['nxg'] && window['nxg']['samlResponse'])\r\n window['nxg']['samlResponse'] = undefined;\r\n sessionStorage.removeItem('email');\r\n\r\n this.authService.storeUser(authenticatedInfo.User);\r\n this.applicationSecurityService.storeUserPermissions(authenticatedInfo.UserPermissions);\r\n this.sectionListPreferenceService.storeSectionListPreferences(authenticatedInfo.UserSectionListPreference);\r\n\r\n if (authenticatedInfo.EnableOverrideNextGenApiUri) {\r\n sessionStorage.setItem(\"apiurl\", authenticatedInfo.OverrideNextGenApiUri);\r\n }\r\n\r\n if (!AppFunctions.IsNullOrWhiteSpace(authenticatedInfo.User.ChangePasswordMessage)) {\r\n await this.notificationService.error(authenticatedInfo.User.ChangePasswordMessage);\r\n }\r\n\r\n const data = this.homepageService.getClientDefaultHomePage();\r\n const homepageUrl = data.find(x => x.key === authenticatedInfo.DefaultHomePage).url;\r\n\r\n if (authenticatedInfo.User.IsEnableExchangeLoginScreen && authenticatedInfo.User.IsUserExchangeEnable && !authenticatedInfo.User.IsAppExchangeEnabled) {\r\n await this.router.navigateByUrl('/exchangelogin');\r\n return;\r\n }\r\n\r\n if (!authenticatedInfo.User.IsEnableExchangeLoginScreen && authenticatedInfo.User.IsUserExchangeEnable) {\r\n authenticatedInfo.User.IsSkippedExchangeLoginScreen = true;\r\n this.authService.storeUser(authenticatedInfo.User);\r\n }\r\n\r\n await this.router.navigateByUrl(homepageUrl);\r\n }\r\n}\r\n\r\n@Component({\r\n templateUrl: 'login.component.html',\r\n providers: [SectionListPreferenceService],\r\n standalone: true,\r\n imports: [FormsModule, ReactiveFormsModule, InputRComponent, TextareaRComponent]\r\n})\r\nexport class LoginComponent extends BaseLoginComponent implements OnInit, OnDestroy {\r\n @ViewChild('emailRef', {static: false}) emailRef: any;\r\n private loginState: LoginState = LoginState.Start;\r\n loginForm: FormGroup;\r\n isToken: boolean = false;\r\n isSamlLogin: boolean = false;\r\n enableForgotPasswordLink: boolean = false;\r\n private samlToken: any = null;\r\n userMessage: string = '';\r\n releaseVersionDescription: string = null;\r\n private model: LoginModel = new LoginModel();\r\n private authServiceSubscription: Subscription;\r\n private apiVersionSubscription: Subscription;\r\n browserFingerprint: string = null;\r\n fiTheme: string = null;\r\n\r\n get showEmailControl() {\r\n return this.isToken === false && this.isSamlLogin === false && this.loginState !== LoginState.CheckingApiVersion;\r\n }\r\n\r\n get showPasswordControl() {\r\n let validState = this.loginState === LoginState.ReadyForLogin ||\r\n this.loginState === LoginState.Authenticating;\r\n\r\n return this.showEmailControl && validState;\r\n }\r\n\r\n get showProcessText() {\r\n return this.loginState == LoginState.CheckingApiVersion ||\r\n this.loginState === LoginState.CheckingAuthenticationMode\r\n }\r\n\r\n get processText(): string {\r\n let processText = '';\r\n let spinner = ' '\r\n\r\n if (this.loginState === LoginState.CheckingApiVersion) {\r\n processText = spinner + 'Checking API Version';\r\n } else if (this.loginState === LoginState.CheckingAuthenticationMode) {\r\n processText = spinner + 'Checking Authentication Mode';\r\n }\r\n\r\n return processText;\r\n }\r\n\r\n get showLoginButton() {\r\n return this.loginState === LoginState.ReadyForLogin ||\r\n this.loginState === LoginState.Authenticating;\r\n }\r\n\r\n get loginButtonIsDisabled() {\r\n return (!this.loginForm.valid || this.loginState === LoginState.Authenticating);\r\n }\r\n\r\n get loginButtonText(): string {\r\n let buttonText = '';\r\n let spinner = ' '\r\n\r\n if (this.loginState === LoginState.ReadyForLogin) {\r\n buttonText = 'LOGIN';\r\n } else if (this.loginState === LoginState.Authenticating) {\r\n buttonText = spinner + 'Authenticating';\r\n }\r\n\r\n return buttonText;\r\n }\r\n\r\n // Max length is set to 291 because the user can enter a max of 40 characters to the left of @, 250 characters to the right of @ and then +1 for the @ symbol\r\n emailControl: BhControl = {\r\n key: 'email',\r\n label: 'Email',\r\n data: {type: 'email', maxLength: 291},\r\n validationMessages: {\r\n 'emailValidator': 'Must be a valid email.'\r\n }\r\n };\r\n passwordControl: BhControl = {\r\n key: 'password',\r\n label: 'Password',\r\n data: {type: 'password', maxLength: 50}\r\n };\r\n tokenControl: BhControl = {\r\n key: 'token',\r\n label: 'Token',\r\n data: {rows: 6}\r\n };\r\n\r\n constructor(\r\n applicationSecurityService: ApplicationSecurityService,\r\n authService: AuthorizationService,\r\n private fingerprintService: DeviceFingerprintService,\r\n private formBuilder: FormBuilder,\r\n homepageService: DefaultHomePageService,\r\n notificationService: NotificationService,\r\n private activatedRoute: ActivatedRoute,\r\n router: Router,\r\n sectionListPreferenceService: SectionListPreferenceService,\r\n private titleService: Title,\r\n private readonly modalService: ModalService\r\n ) {\r\n super(applicationSecurityService,\r\n authService,\r\n homepageService,\r\n notificationService,\r\n router,\r\n sectionListPreferenceService);\r\n this.titleService.setTitle(\"NextGen\");\r\n\r\n let isAppAccess = this.activatedRoute.snapshot.queryParams['appaccess'];\r\n let isSamlAccess = this.activatedRoute.snapshot.queryParams['samlaccess'];\r\n\r\n if (isAppAccess) {\r\n this.isToken = true;\r\n }\r\n\r\n if (isSamlAccess) {\r\n this.isSamlLogin = true;\r\n this.samlToken = sessionStorage.getItem('SAMLResponse');\r\n\r\n if (AppFunctions.IsNullOrWhiteSpace(this.samlToken) && window['nxg'] && window['nxg']['samlResponse'])\r\n this.samlToken = window['nxg']['samlResponse'];\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.clearAllStorage();\r\n this.buildForm();\r\n this.loginState = LoginState.CheckingApiVersion;\r\n this.fiTheme = document.documentElement.getAttribute('data-theme');\r\n this.releaseVersionDescription = AppSettings.UI_RELEASE_VERSION;\r\n this.apiVersionSubscription = this.authService.getAppSettings()\r\n .subscribe({\r\n next: (settings: AppSettingsModel) => {\r\n let uiBuildVersion = AppSettings.UI_BUILD_VERSION;\r\n\r\n sessionStorage.setItem(\"apiBuildVersion\", settings.ApiBuildVersion);\r\n this.authService.storeAppSettings(settings);\r\n\r\n if (settings.ApiBuildVersion !== uiBuildVersion) {\r\n this.userMessage = `The UI version and API versions do not match, the UI is build ${uiBuildVersion} and the API is build ${settings.ApiBuildVersion}.`;\r\n this.notificationService.error(this.userMessage);\r\n this.loginState = LoginState.ApiVersionCheckFailed;\r\n return;\r\n }\r\n\r\n if (this.isSamlLogin && !AppFunctions.IsNullOrWhiteSpace(this.samlToken)) {\r\n this.onSubmit();\r\n }\r\n\r\n this.loginState = this.isToken ? LoginState.ReadyForLogin : LoginState.ReadyForEmail;\r\n },\r\n error: _ => {\r\n this.userMessage = `Unable to connect to the API.`;\r\n this.loginState = LoginState.ApiVersionCheckFailed;\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n fromEvent(this.emailRef.input.nativeElement, 'input')\r\n .pipe(\r\n debounceTime(1000),\r\n distinctUntilChanged()\r\n )\r\n .subscribe(() => this.checkEmail());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.authServiceSubscription.unsubscribe();\r\n this.apiVersionSubscription.unsubscribe();\r\n }\r\n\r\n async onSubmit(): Promise {\r\n this.loginState = LoginState.Authenticating;\r\n this.model = this.loginForm.getRawValue();\r\n this.model.fingerprint = this.browserFingerprint;\r\n if (AppFunctions.IsNullOrWhiteSpace(this.model.fingerprint))\r\n this.browserFingerprint = this.model.fingerprint = await this.fingerprintService.generateBrowserFingerprint();\r\n this.authServiceSubscription = this.login()\r\n .subscribe({\r\n next: () => {\r\n this.authServiceSubscription = this.authService.getAuthenticatedInfo()\r\n .subscribe({\r\n next: (authenticatedInfo: AuthenticatedInfoModel) => {\r\n this.userMessage = null;\r\n this.postLoginRedirectAsync(authenticatedInfo);\r\n },\r\n error: _ => {\r\n this.loginState = LoginState.ReadyForLogin;\r\n }\r\n });\r\n },\r\n error: _ => {\r\n this.loginState = LoginState.ReadyForLogin;\r\n }\r\n });\r\n }\r\n\r\n async onForgotClick(): Promise {\r\n this.browserFingerprint = await this.fingerprintService.generateBrowserFingerprint();\r\n if (this.browserFingerprint != null) {\r\n this.modalService\r\n .show(ForgotPasswordModalComponent, {\r\n initialState: {\r\n browserFingerprint: this.browserFingerprint\r\n }\r\n });\r\n }\r\n }\r\n\r\n private login(): Observable {\r\n if (this.isToken) {\r\n return this.authService.loginWithToken(this.model.token);\r\n }\r\n\r\n if (this.isSamlLogin) {\r\n // This will need to be reviewed as I am currently unsure of exactly what the samlRequestBody will look like\r\n // to know for sure how to pull the token out of it or if this is fine as is.\r\n return this.authService.loginWithToken(this.samlToken, 'samlaccess', this.browserFingerprint);\r\n }\r\n\r\n return this.authService.login(this.model);\r\n }\r\n\r\n private buildForm(): void {\r\n if (this.isToken) {\r\n this.tokenControl.validators = [Validators.required];\r\n } else {\r\n this.emailControl.validators = [Validators.required, CustomValidators.emailValidator];\r\n this.passwordControl.validators = [Validators.required];\r\n }\r\n\r\n this.loginForm = this.formBuilder.group(this.model);\r\n }\r\n\r\n private clearAllStorage(): void {\r\n for (let i = sessionStorage.length - 1; i >= 0; i--) {\r\n let key = sessionStorage.key(i);\r\n switch (key) {\r\n case 'apiurl':\r\n case 'apireportingurl':\r\n case 'docprepapiurl':\r\n case 'uiBuildVersion':\r\n case 'uiReleaseVersionDescription':\r\n case 'featureEnableConfigurableClientPortalApplications':\r\n case 'helpurl':\r\n case 'statusurl':\r\n case 'SAMLResponse':\r\n case 'email':\r\n // skip keys added before login (in _Layout.cshtml)\r\n break;\r\n default:\r\n sessionStorage.removeItem(key); // remove all other keys\r\n }\r\n }\r\n for (let i = localStorage.length - 1; i >= 0; i--) {\r\n const key = localStorage.key(i);\r\n // don't nuke client portal storage\r\n if (key.startsWith('client-portal.')) {\r\n continue;\r\n }\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n private checkEmail(): void {\r\n //for now we assume a regular username/password login flow.\r\n //Will implement authentication mode check later to support SAML and other authentication.\r\n if (this.loginForm.controls.email.status == \"VALID\") {\r\n this.loginState = LoginState.CheckingAuthenticationMode;\r\n this.userMessage = \"\"\r\n\r\n setTimeout(() => {\r\n this.determineAuthenticationMode();\r\n }, 1000);\r\n }\r\n }\r\n\r\n private determineAuthenticationMode(): void {\r\n let formData = this.loginForm.getRawValue();\r\n let email = formData['email'];\r\n\r\n this.authService.getAuthenticationSettings(email)\r\n .subscribe({\r\n next: result => {\r\n // Adding solely for the MFA screen to be able to obtain the user's email address\r\n sessionStorage.setItem('email', email);\r\n\r\n if (result.AuthenticationMode === 0) { //need a way to use symbol instead magic number\r\n this.loginState = LoginState.ReadyForLogin;\r\n this.enableForgotPasswordLink = result.EnableForgotPasswordLink;\r\n } else {\r\n window.document.location.href = result.SamlIdpUrl;\r\n }\r\n },\r\n error: _ => {\r\n this.loginState = LoginState.ReadyForEmail;\r\n this.userMessage = \"Failed to retrieve authentication settings.\"\r\n }\r\n });\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { UnificationAPIService } from \"../services/unification.api.service\";\r\nimport { Observable } from \"rxjs\";\r\nimport { SectionListPreference } from \"./section-list-preference.modal\";\r\n\r\n@Injectable()\r\nexport class SectionListPreferenceService {\r\n private url: string;\r\n private userSectionListPreferenceName: string = 'UserSectionListPreferenceName';\r\n constructor(protected baseService: UnificationAPIService) {\r\n }\r\n\r\n columnPreferences(): string {\r\n let columnPreference = sessionStorage.getItem(this.userSectionListPreferenceName);\r\n return columnPreference;\r\n }\r\n\r\n storeSectionListPreferences(value: string) {\r\n sessionStorage.setItem(this.userSectionListPreferenceName, value);\r\n }\r\n\r\n public saveColumnPreference(columnPreferenceList: Array): Observable {\r\n let body = JSON.stringify(columnPreferenceList);\r\n sessionStorage.setItem(this.userSectionListPreferenceName, body);\r\n let url: string = this.baseService.complexApiURL() + `SectionListPreference/SaveColumnPreference/${this.userSectionListPreferenceName}`;\r\n return this.baseService.post(url, body)\r\n }\r\n\r\n public getColumnPreference(): Observable {\r\n let url: string = this.baseService.complexApiURL() + `SectionListPreference/GetColumnPreference/${this.userSectionListPreferenceName}`;\r\n return this.baseService.get(url);\r\n }\r\n}"],"x_google_ignoreList":[]}