{"version":3,"file":"166.c0ee42fc8d345ef2.js","mappings":"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","names":["component","RevealPasswordController","$scope","$element","BdLocalize","vm","this","isShowingPassword","showPasswordText","hidePasswordText","isPasswordManagerIconVisible","isRevealEnabled","togglePassword","input","attr","$postLink","find","getString","observer","MutationObserver","style","backgroundImage","disconnect","$safeApply","observe","attributes","childList","characterData","$on","template","templateHtml","bindings","controllerAs","transclude","$inject","controller","RevealPasswordComponent","twoFactorAuthenticationConfiguration","showRememberDevice","onVerifyCode","onAlternativeOptionSelected","useSingleTextBox","onRedirectWhenTokenExpired","isTwilioServiceEnabled","isSmsServiceEnabled","isVoiceServiceEnabled","isVerifyApiServiceEnabled","isSmsVoiceServiceEnabled","AuthenticationMethod","AuthApp","Voice","SMS","VerifyTwoFactorAuthenticationController","$window","RedirectToLoginService","ALERT_TYPE","AuthenticationMethods","enterCodeDescriptionText","showVerificationModal","showHavingTroubleModal","showHavingTroubleLink","isCodeExpiredOrIncorrect","isCodeExpired","codeNotEntered","isTooManyAttempts","twoFactorAuthenticationOptions","rememberMyDevice","twoFactorUserSettings","AuthAppVerificationCode","isAllPhoneServicesDown","isSmsServiceDown","isVoiceServiceDown","showSmsServiceDown","DefaultAuthorizationMethod","showVoiceServiceDown","showAllPhoneServicesDown","codeExpiredOrIncorrectMsg","codeExpiredMsg","codeNotEnteredMsg","codeTooManyAttemptsMsg","$onInit","getCodeSentDescriptionText","PrimaryPhoneExtension","PrimaryPhone","areAlternativeOptionsForTwoFactorAuthenticationAvailable","SecondaryPhone","onOverlayClick","onCancelClick","redirectToLoginPage","redirect","twoFactorAuthCodeEnterPressed","verifyCode","twoFactorAuthCodeChanged","evalCodeValidity","isCodeValid","isToManyAttempts","verificationCode","rememberDevice","onCodeVerifiedCallback","tryAgain","onHavingTroubleClick","loadAuthenticationOptions","phoneCallText","textMessageText","detailsForVoiceCall","push","title","provider","details","iconClass","phoneNumber","phoneExtension","primaryPhoneNumber","IsAuthAppEnabled","SecondaryPhoneExtension","askForCode","onClickAlternativeOption","option","getCodeSentDescriptionTextForSelectedOption","onSuccessCallback","VerifyTwoFactorAuthenticationComponent","TwoFactorAuthenticationConstants","TwoFactorAuthenticationMethod","NotYetRegistered","module","exports"],"sourceRoot":"webpack:///","sources":["./manager-base/components/reveal-password/reveal-password.js","./public/shared/components/verify-two-factor-authentication/verify-two-factor-authentication.js","./public/shared/constants/two-factor-authentication.js","./manager-base/components/reveal-password/reveal-password.html","./public/shared/components/verify-two-factor-authentication/verify-two-factor-authentication.html"],"sourcesContent":["/**\r\n * @ngdoc directive\r\n * @name bdRevealPassword\r\n * @restrict E\r\n * \r\n */\r\nimport templateHtml from './reveal-password.html';\r\n\r\nimport { $safeApply } from '@buildium/angularjs-core/dist/utilities/angularjs';\r\n\r\nconst component = {};\r\n\r\ncomponent.template = templateHtml;\r\n\r\ncomponent.bindings = {\r\n};\r\n\r\ncomponent.controllerAs = 'vm';\r\ncomponent.transclude = true;\r\n\r\nfunction RevealPasswordController($scope, $element, BdLocalize) {\r\n const vm = this;\r\n \r\n vm.isShowingPassword = false;\r\n vm.showPasswordText = null;\r\n vm.hidePasswordText = null;\r\n vm.isPasswordManagerIconVisible = false;\r\n vm.isRevealEnabled = true;\r\n \r\n vm.togglePassword = function togglePassword() {\r\n vm.isShowingPassword = !vm.isShowingPassword;\r\n vm.input.attr('type', vm.isShowingPassword ? 'text' : 'password');\r\n };\r\n\r\n // $postLink is needed because of the transclusion\r\n vm.$postLink = function postLink() {\r\n vm.input = $element.find('input');\r\n \r\n vm.showPasswordText = BdLocalize.getString(\r\n 'Global.Component.RevealPassword.Tooltip.Show', 'Show'\r\n );\r\n\r\n vm.hidePasswordText = BdLocalize.getString(\r\n 'Global.Component.RevealPassword.Tooltip.Hide', 'Hide'\r\n );\r\n\r\n let observer = new MutationObserver(function onInputMutated() {\r\n //mutations.forEach((mutation) => console.log(mutation));\r\n vm.isPasswordManagerIconVisible = vm.input[0].style.backgroundImage !== '';\r\n if (vm.isPasswordManagerIconVisible) { // Stop watching once this is set to true\r\n observer.disconnect();\r\n observer = null;\r\n $safeApply($scope);\r\n }\r\n });\r\n\r\n observer.observe(vm.input[0], {\r\n attributes: true,\r\n childList: true,\r\n characterData: true\r\n });\r\n };\r\n\r\n // set the input back to a password field when the form is submitted\r\n $scope.$on('form-submit-started', () => {\r\n vm.isShowingPassword = false;\r\n vm.input.attr('type', 'password');\r\n });\r\n}\r\n\r\nRevealPasswordController.$inject = ['$scope', '$element', 'BdLocalize'];\r\ncomponent.controller = RevealPasswordController;\r\nexport const RevealPasswordComponent = component;\r\n","import templateHtml from './verify-two-factor-authentication.html';\r\n\r\nconst component = {};\r\n\r\ncomponent.template = templateHtml;\r\n\r\ncomponent.bindings = {\r\n twoFactorAuthenticationConfiguration: '<',\r\n showRememberDevice: '<',\r\n onVerifyCode: '&',\r\n onAlternativeOptionSelected: '&',\r\n useSingleTextBox: '<',\r\n onRedirectWhenTokenExpired: '&',\r\n isTwilioServiceEnabled: '<',\r\n isSmsServiceEnabled: '<',\r\n isVoiceServiceEnabled: '<',\r\n isVerifyApiServiceEnabled: '<',\r\n isSmsVoiceServiceEnabled: '<',\r\n};\r\n\r\nconst AuthenticationMethod = {\r\n AuthApp: 3,\r\n Voice: 2,\r\n SMS: 1,\r\n};\r\n\r\ncomponent.controllerAs = 'vm';\r\n\r\nfunction VerifyTwoFactorAuthenticationController(\r\n $window,\r\n BdLocalize,\r\n RedirectToLoginService,\r\n ALERT_TYPE\r\n) {\r\n const vm = this;\r\n\r\n vm.AuthenticationMethods = AuthenticationMethod;\r\n vm.enterCodeDescriptionText = '';\r\n vm.showVerificationModal = true;\r\n vm.showHavingTroubleModal = false;\r\n vm.showHavingTroubleLink = true;\r\n vm.isCodeExpiredOrIncorrect = false;\r\n vm.isCodeExpired = false;\r\n vm.codeNotEntered = false;\r\n vm.isTooManyAttempts = false;\r\n vm.twoFactorAuthenticationOptions = [];\r\n vm.rememberMyDevice = false;\r\n vm.twoFactorUserSettings = {\r\n AuthAppVerificationCode: null\r\n };\r\n \r\n vm.isAllPhoneServicesDown = !vm.isSmsServiceEnabled && !vm.isVoiceServiceEnabled && !vm.isVerifyApiServiceEnabled;\r\n vm.isSmsServiceDown = !vm.isSmsServiceEnabled && !vm.isVerifyApiServiceEnabled;\r\n vm.isVoiceServiceDown = !vm.isVoiceServiceEnabled && !vm.isVerifyApiServiceEnabled;\r\n \r\n vm.showSmsServiceDown = vm.isSmsServiceDown && !vm.isVoiceServiceDown && vm.twoFactorAuthenticationConfiguration.DefaultAuthorizationMethod === 1 && !vm.isSmsVoiceServiceEnabled;\r\n vm.showVoiceServiceDown = vm.isVoiceServiceDown && !vm.isSmsServiceDown && vm.twoFactorAuthenticationConfiguration.DefaultAuthorizationMethod === 2 && !vm.isSmsVoiceServiceEnabled;\r\n vm.showAllPhoneServicesDown = vm.isSmsServiceDown && vm.isVoiceServiceDown && vm.twoFactorAuthenticationConfiguration.DefaultAuthorizationMethod !== 3 && !vm.isSmsVoiceServiceEnabled;\r\n\r\n vm.ALERT_TYPE = ALERT_TYPE;\r\n vm.codeExpiredOrIncorrectMsg = BdLocalize.getString('Public.Login.TwoFactorAuthentication.VerificationCodeErrorMessage', 'Your authentication code expired or was incorrect.');\r\n vm.codeExpiredMsg = BdLocalize.getString('Public.Login.TwoFactorAuthentication.ResetLinkHasExpired', 'Oops, two-factor authentication has been interrupted. Please try again.');\r\n vm.codeNotEnteredMsg = BdLocalize.getString('Public.Login.TwoFactorAuthentication.VerificationCodeRequiredErrorMessage', 'You must enter an authentication code.');\r\n vm.codeTooManyAttemptsMsg = BdLocalize.getString('Public.Login.Login.TooManyMfaAttempts', 'Sorry, we couldn\\'t verify your identity. Please try again later.');\r\n \r\n function getCodeSentDescriptionText() {\r\n if (vm.twoFactorAuthenticationConfiguration.DefaultAuthorizationMethod === AuthenticationMethod.AuthApp) {\r\n // The user has an authenticator app as default authorization method.\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.AuthAppVerifyIdentityActionDescription',\r\n 'Check your authentication app for a code to sign in.');\r\n }\r\n\r\n if (vm.twoFactorAuthenticationConfiguration.DefaultAuthorizationMethod === AuthenticationMethod.Voice) {\r\n // The user has voice call as default authorization method.\r\n if (vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension) {\r\n // A phone extension has been configured.\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.ExtensionDetails',\r\n `We called ${vm.twoFactorAuthenticationConfiguration.PrimaryPhone}, \r\n Ext.${vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension} to provide you with an authentication code.`,\r\n [vm.twoFactorAuthenticationConfiguration.PrimaryPhone, vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension]);\r\n } else {\r\n // No phone extension has been configured.\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.PhoneCallVerifyIdentityActionDescription',\r\n `We called ${vm.twoFactorAuthenticationConfiguration.PrimaryPhone} to provide you with an authentication code.`,\r\n [vm.twoFactorAuthenticationConfiguration.PrimaryPhone]);\r\n }\r\n }\r\n\r\n // If we reach this point then the user has text message as default authorization method.\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.TextMessageIdentityActionDescription',\r\n `We sent a text message with an authentication code to ${vm.twoFactorAuthenticationConfiguration.PrimaryPhone}`,\r\n [vm.twoFactorAuthenticationConfiguration.PrimaryPhone]);\r\n }\r\n\r\n function areAlternativeOptionsForTwoFactorAuthenticationAvailable() {\r\n // If the user has either a primary phone number or a secondary phone number configured\r\n // then we can provide alternative options for two factor authentication.\r\n return vm.twoFactorAuthenticationConfiguration\r\n && (vm.twoFactorAuthenticationConfiguration.PrimaryPhone || vm.twoFactorAuthenticationConfiguration.SecondaryPhone);\r\n }\r\n\r\n vm.$onInit = function onInit() {\r\n vm.enterCodeDescriptionText = getCodeSentDescriptionText();\r\n vm.showHavingTroubleLink = areAlternativeOptionsForTwoFactorAuthenticationAvailable();\r\n };\r\n\r\n vm.onOverlayClick = function onOverlayClick() {\r\n // Do nothing here. We don't want users to be able to close the modals when clicking outside them.\r\n };\r\n\r\n function redirectToLoginPage() {\r\n RedirectToLoginService.redirect();\r\n }\r\n\r\n vm.onCancelClick = function onCancelClick() {\r\n redirectToLoginPage();\r\n };\r\n\r\n vm.twoFactorAuthCodeEnterPressed = function twoFactorAuthCodeEnterPressed() {\r\n if (!vm.isCodeExpired) {\r\n vm.verifyCode();\r\n }\r\n };\r\n\r\n vm.twoFactorAuthCodeChanged = function twoFactorAuthCodeChanged() {\r\n vm.isCodeExpiredOrIncorrect = false;\r\n };\r\n\r\n vm.evalCodeValidity = function evalCodeValidity(isCodeValid, isCodeExpired, isToManyAttempts) {\r\n if (isCodeExpired) {\r\n vm.isCodeExpired = true;\r\n vm.isCodeExpiredOrIncorrect = false;\r\n } else if (isToManyAttempts) {\r\n vm.isCodeExpired = false;\r\n vm.isCodeExpiredOrIncorrect = false;\r\n vm.isTooManyAttempts = true;\r\n } else {\r\n vm.isCodeExpiredOrIncorrect = isCodeValid === false;\r\n vm.isCodeExpired = false;\r\n vm.isTooManyAttempts = false;\r\n }\r\n };\r\n\r\n vm.verifyCode = function verifyCode() {\r\n if (vm.twoFactorUserSettings.AuthAppVerificationCode) {\r\n vm.codeNotEntered = false;\r\n\r\n vm.onVerifyCode(\r\n {\r\n verificationCode: vm.twoFactorUserSettings.AuthAppVerificationCode,\r\n rememberDevice: vm.rememberMyDevice,\r\n onCodeVerifiedCallback: vm.evalCodeValidity\r\n });\r\n } else {\r\n vm.codeNotEntered = true;\r\n }\r\n };\r\n\r\n vm.tryAgain = function tryAgain() {\r\n vm.codeNotEntered = false;\r\n vm.onRedirectWhenTokenExpired();\r\n };\r\n\r\n function loadAuthenticationOptions() {\r\n vm.twoFactorAuthenticationOptions = [];\r\n\r\n const phoneCallText = BdLocalize.getString('Public.Login.TwoFactorAuthentication.PhoneCallLabel', 'Phone call');\r\n const textMessageText = BdLocalize.getString('Public.Login.TwoFactorAuthentication.TextMessageLabel', 'Text message');\r\n\r\n if (vm.twoFactorAuthenticationConfiguration.PrimaryPhone) {\r\n // The user has a primary phone number configured. We must add the primary phone options.\r\n let detailsForVoiceCall = vm.twoFactorAuthenticationConfiguration.PrimaryPhone;\r\n\r\n if (vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension) {\r\n detailsForVoiceCall = BdLocalize.getString('Global.Component.Settings.Security.TwoFactorAuthentication.DeliveryMethod.ShortPhoneExtension',\r\n `${vm.twoFactorAuthenticationConfiguration.PrimaryPhone}, Ext. ${vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension}`,\r\n [vm.twoFactorAuthenticationConfiguration.PrimaryPhone, vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension]);\r\n }\r\n\r\n if (vm.isVoiceServiceEnabled || vm.isVerifyApiServiceEnabled || vm.isSmsVoiceServiceEnabled) {\r\n vm.twoFactorAuthenticationOptions.push({\r\n title: phoneCallText,\r\n provider: 'Voice',\r\n details: detailsForVoiceCall,\r\n iconClass: 'verify-two-factor-authentication__having-trouble-image--phone-call',\r\n phoneNumber: vm.twoFactorAuthenticationConfiguration.PrimaryPhone,\r\n phoneExtension: vm.twoFactorAuthenticationConfiguration.PrimaryPhoneExtension,\r\n primaryPhoneNumber: true\r\n });\r\n }\r\n\r\n if (vm.isSmsServiceEnabled || vm.isVerifyApiServiceEnabled || vm.isSmsVoiceServiceEnabled) {\r\n vm.twoFactorAuthenticationOptions.push({\r\n title: textMessageText,\r\n provider: 'SMS',\r\n details: vm.twoFactorAuthenticationConfiguration.PrimaryPhone,\r\n iconClass: 'verify-two-factor-authentication__having-trouble-image--text-message',\r\n phoneNumber: vm.twoFactorAuthenticationConfiguration.PrimaryPhone,\r\n primaryPhoneNumber: true\r\n });\r\n }\r\n }\r\n\r\n if (vm.twoFactorAuthenticationConfiguration.IsAuthAppEnabled) {\r\n // The user has an authenticator app configured. We must add the option.\r\n vm.twoFactorAuthenticationOptions.push({\r\n title: BdLocalize.getString('Public.Login.TwoFactorAuthentication.AuthenticationAppLabel', 'Authentication app'),\r\n provider: 'AuthApp',\r\n details: 'Check your authentication app for a code to sign in.',\r\n iconClass: 'verify-two-factor-authentication__having-trouble-image--auth-app'\r\n });\r\n }\r\n\r\n if (vm.twoFactorAuthenticationConfiguration.SecondaryPhone) {\r\n // The user has a secondary phone number configured. We must add the secondary phone options.\r\n let detailsForVoiceCall = vm.twoFactorAuthenticationConfiguration.SecondaryPhone;\r\n\r\n if (vm.twoFactorAuthenticationConfiguration.SecondaryPhoneExtension) {\r\n detailsForVoiceCall = BdLocalize.getString('Global.Component.Settings.Security.TwoFactorAuthentication.DeliveryMethod.ShortPhoneExtension',\r\n `${vm.twoFactorAuthenticationConfiguration.SecondaryPhone}, Ext. ${vm.twoFactorAuthenticationConfiguration.SecondaryPhoneExtension}`,\r\n [vm.twoFactorAuthenticationConfiguration.SecondaryPhone, vm.twoFactorAuthenticationConfiguration.SecondaryPhoneExtension]);\r\n }\r\n\r\n vm.twoFactorAuthenticationOptions.push({\r\n title: phoneCallText,\r\n provider: 'Voice',\r\n details: detailsForVoiceCall,\r\n iconClass: 'verify-two-factor-authentication__having-trouble-image--phone-call',\r\n phoneNumber: vm.twoFactorAuthenticationConfiguration.SecondaryPhone,\r\n phoneExtension: vm.twoFactorAuthenticationConfiguration.SecondaryPhoneExtension,\r\n primaryPhoneNumber: false\r\n });\r\n\r\n vm.twoFactorAuthenticationOptions.push({\r\n title: textMessageText,\r\n provider: 'SMS',\r\n details: vm.twoFactorAuthenticationConfiguration.SecondaryPhone,\r\n iconClass: 'verify-two-factor-authentication__having-trouble-image--text-message',\r\n phoneNumber: vm.twoFactorAuthenticationConfiguration.SecondaryPhone,\r\n primaryPhoneNumber: false\r\n });\r\n }\r\n }\r\n\r\n vm.onHavingTroubleClick = function onHavingTroubleClick() {\r\n loadAuthenticationOptions();\r\n vm.showVerificationModal = false;\r\n vm.showHavingTroubleModal = true;\r\n };\r\n\r\n vm.askForCode = function askForCode() {\r\n vm.showVerificationModal = true;\r\n vm.showHavingTroubleModal = false;\r\n };\r\n\r\n function getCodeSentDescriptionTextForSelectedOption(option) {\r\n if (option.phoneNumber) {\r\n // An option with a phone number was selected.\r\n if (option.provider === 'SMS') {\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.TextMessageIdentityActionDescription',\r\n `We sent a text message with an authentication code to ${option.phoneNumber}`,\r\n [option.phoneNumber]);\r\n } else if (option.phoneExtension) {\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.ExtensionDetails',\r\n `We called ${option.phoneNumber}, \r\n Ext.${option.phoneExtension} to provide you with an authentication code.`,\r\n [option.phoneNumber, option.phoneExtension]);\r\n } else {\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.PhoneCallVerifyIdentityActionDescription',\r\n `We called ${option.phoneNumber} to provide you with an authentication code.`,\r\n [option.phoneNumber]);\r\n }\r\n }\r\n\r\n return BdLocalize.getString('Public.Login.TwoFactorAuthentication.AuthAppVerifyIdentityActionDescription',\r\n 'Check your authentication app for a code to sign in.');\r\n }\r\n\r\n vm.onClickAlternativeOption = function onClickAlternativeOption(option) {\r\n vm.enterCodeDescriptionText = getCodeSentDescriptionTextForSelectedOption(option);\r\n if (option.phoneNumber) {\r\n // We only send a code when a phone option is selected.\r\n vm.onAlternativeOptionSelected({option, onSuccessCallback: vm.askForCode});\r\n } else {\r\n // An authenticator app was selected.\r\n vm.askForCode();\r\n }\r\n };\r\n}\r\n\r\nVerifyTwoFactorAuthenticationController.$inject = [\r\n '$window',\r\n 'BdLocalize',\r\n 'RedirectToLoginService',\r\n 'ALERT_TYPE'\r\n];\r\ncomponent.controller = VerifyTwoFactorAuthenticationController;\r\nexport const VerifyTwoFactorAuthenticationComponent = component;\r\n","export const TwoFactorAuthenticationConstants = {\r\n TwoFactorAuthenticationMethod: {\r\n NotYetRegistered: 0,\r\n SMS: 1,\r\n Voice: 2,\r\n AuthApp: 3\r\n }\r\n};\r\n","module.exports = \"
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n\";","module.exports = \"
\\r\\n \\r\\n

Two-factor authentication

\\r\\n
\\r\\n
Let's verify your identity
\\r\\n
{{vm.enterCodeDescriptionText}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n Phone number verification is down. Please use your authentication app to sign in.\\r\\n
\\r\\n
\\r\\n We're having trouble with text message verification. Please use your authentication app to sign in.\\r\\n
\\r\\n
\\r\\n We're having trouble with text message verification. Please try with a different method.\\r\\n
\\r\\n
\\r\\n We're having trouble with phone number verification. Please use your authentication app to sign in.\\r\\n
\\r\\n
\\r\\n We're having trouble with phone number verification. Please try with a different method.\\r\\n
\\r\\n
\\r\\n We're having trouble with phone number verification. If you don’t receive a code, please contact your administrator to log in.\\r\\n  Learn more\\r\\n
\\r\\n
\\r\\n
\\r\\n
Enter code
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
Having trouble?
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
Verify
\\r\\n
Try again
\\r\\n
\\r\\n
\\r\\n \\r\\n

Two-factor authentication

\\r\\n
\\r\\n
Having trouble?
\\r\\n
\\r\\n
\\r\\n Try another method or review our \\r\\n help article\\r\\n for more information.\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{option.title}}\\r\\n
\\r\\n {{option.details}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\";"],"x_google_ignoreList":[]}