{"version":3,"file":"account/login.js","mappings":"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","sources":["webpack://omnius-authentication/./wwwroot/ts/account/login.ts","webpack://omnius-authentication/./wwwroot/ts/account/validationHelpers.ts"],"sourcesContent":["import { CapsLockDetector, hide, show } from \"@app/account/validationHelpers\";\n\ninterface Config {\n showPassword: boolean;\n}\n\n$(() => {\n class Login {\n private form: HTMLFormElement = document.getElementById(\"login-form-full\") as HTMLFormElement;\n private submitButton: HTMLButtonElement = document.getElementById(\"submit-button\") as HTMLButtonElement;\n private userName: HTMLInputElement = document.getElementById(\"username\") as HTMLInputElement;\n private passwordRow: HTMLElement = document.getElementById(\"password-row\") as HTMLElement;\n private password: HTMLInputElement = document.getElementById(\"password\") as HTMLInputElement;\n private ssoMessage: HTMLDivElement = document.getElementById(\"sso-message\") as HTMLDivElement;\n private validationSummary: HTMLDivElement = document.getElementById(\"validation-summary\") as HTMLDivElement;\n private rememberMe: HTMLInputElement = document.getElementById(\"remember-me\") as HTMLInputElement;\n private forgotPassword: HTMLLIElement = document.getElementById(\"forgot-password\") as HTMLLIElement;\n\n private showPassword: boolean;\n private config: Config = window.config as Config || {} as Config;\n\n private capsLockDetector = new CapsLockDetector(\"password\");\n\n constructor() {\n\n this.showPassword = this.config.showPassword;\n\n // if the username field has a value and we\"re showing the password field, set focus to that field\n if (this.showPassword && this.userName.value) {\n this.submitButton.innerText = \"Log In\";\n show(this.passwordRow);\n show(this.forgotPassword);\n this.password.focus();\n } else {\n hide(this.passwordRow);\n hide(this.forgotPassword);\n this.submitButton.innerText = \"Continue\";\n this.userName.focus();\n }\n\n this.userName.addEventListener(\"input\", this.handleUserNameInput);\n this.submitButton.addEventListener(\"click\", this.handleSubmitButtonClick);\n }\n\n private handleUserNameInput = (ev: InputEvent): void => {\n if (ev.inputType == \"insertFromPaste\") // avoid condition that prevents the password box from being shown when redirected from SSO\n return;\n\n if (this.showPassword) {\n // showing password and user typed in the userName field. Hide the password and change the input button from \"Login\" to \"Continue\"\n this.password.removeAttribute(\"required\");\n hide(this.passwordRow);\n hide(this.forgotPassword);\n this.showPassword = false;\n this.submitButton.innerText = \"Continue\";\n\n if (this.ssoMessage) {\n hide(this.ssoMessage);\n }\n if (this.validationSummary) {\n hide(this.validationSummary);\n }\n }\n }\n\n // Handles submit button click on the login form.\n // If only the username field is being displayed, the handler posts back to an API endpoint to get the \"challenge\" URL for the client,\n // if the username is valid and the client is SSO enabled. If a challenge URL is returned, the browser is directed to that URL. If not, the password field is shown.\n //\n // If the password field is being displayed, this handler does nothing.\n private handleSubmitButtonClick = (e: Event): void => {\n\n // only handle this event if the password field is not being shown and the username field is not empty\n if (!this.showPassword && this.userName.value) {\n\n e.preventDefault(); // don't allow the default behavior of the submit button here\n\n // get the return url, anti-forgery token, username and \"remember me\" value, then post back to the get challenge url endpoint\n const searchParams = new URLSearchParams(window.location.search);\n\n //TODO: find a better way to do this -- returnUrl has variable case and we never know which one we\"re going to get\n const returnUrl = searchParams.has(\"ReturnUrl\") ? searchParams.get(\"ReturnUrl\") : searchParams.has(\"returnUrl\") ? searchParams.get(\"returnUrl\") : \"\";\n\n // get the anti-forgery token from the form\n const token = $(\"input[name='__RequestVerificationToken']\", this.form).val().toString();\n\n // build the request model\n const model = {\n __RequestVerificationToken: token, // this is part of the model that we send, but not part of the model received at the controller thanks to the magic of MVC.\n rememberMe: this.rememberMe.value,\n returnUrl,\n userName: this.userName.value,\n };\n\n // this is intentionall a form post, not a json post (so we can use the anti-forgery token)\n const s: JQuery.UrlAjaxSettings = {\n data: model,\n success: (challengeUrl) => {\n if (challengeUrl) {\n // redirect to the SSO url\n window.location = challengeUrl;\n } else {\n // not an sso enabled client (or maybe a bad username) - show the password field and all the stuff that goes with it, then set focus to the password field\n this.showPassword = true;\n this.submitButton.innerText = \"Log In\";\n show(this.passwordRow);\n show(this.forgotPassword);\n\n this.password.focus();\n }\n },\n url: \"/app/account/get-challenge-url\",\n }\n\n $.post(s);\n }\n }\n }\n\n new Login();\n});\n","import { isEmpty } from \"lodash\";\n\nconst addError = (element: HTMLElement): void => {\n if (!element.classList.contains(\"has-error\")) {\n element.classList.add(\"has-error\");\n }\n}\n\nconst isVisible = (element: HTMLElement): boolean => {\n return element && element.style.display !== \"none\";\n}\n\nconst hide = (element: HTMLElement): void => {\n if (isVisible(element))\n element.style.display = \"none\";\n}\n\nconst removeError = (element: HTMLElement): void => {\n if (element.classList.contains(\"has-error\")) {\n element.classList.remove(\"has-error\");\n }\n}\n\nconst show = (element: HTMLElement): void => {\n if (!isVisible(element))\n element.style.display = \"\";\n}\n\ninterface Validator {\n handleInvalidated: () => void;\n handleValidated: () => void;\n input: HTMLInputElement;\n valid: boolean;\n}\n\nclass NotEmptyValidator implements Validator {\n private _input: HTMLInputElement;\n private _inputRow: HTMLElement;\n\n constructor(inputId: string) {\n this._input = document.getElementById(inputId) as HTMLInputElement;\n this._inputRow = document.getElementById(`${inputId}-row`);\n }\n\n public handleInvalidated(): void {\n addError(this._inputRow);\n }\n\n public handleValidated(): void {\n removeError(this._inputRow);\n }\n\n public get input(): HTMLInputElement {\n return this._input;\n }\n\n public get valid(): boolean {\n return this._input && !isEmpty(this._input.value);\n }\n}\n\nclass FormValidation {\n private _form: HTMLFormElement;\n private _validators: Validator[];\n\n constructor(formId: string, validators: Validator[]) {\n this._form = document.getElementById(formId) as HTMLFormElement;\n this._form.addEventListener(\"submit\", this.handleFormSubmit);\n this._validators = validators;\n this._validators.forEach((v) => {\n v.input.addEventListener(\"input\", () => this.handleInputChange(v));\n });\n }\n\n private handleInputChange = (validator: Validator): void => {\n if (validator.valid) {\n validator.handleValidated();\n } else {\n validator.handleInvalidated();\n }\n }\n\n private handleFormSubmit = (e: Event): void => {\n e.preventDefault();\n e.stopPropagation();\n\n let invalid = false;\n this._validators.forEach((v) => {\n if (v.valid) {\n v.handleValidated();\n } else {\n invalid = true;\n v.handleInvalidated();\n }\n });\n if (!invalid) {\n this._form.submit();\n }\n }\n}\n\nclass CapsLockDetector {\n private _elementId: string;\n\n constructor(elementId: string) {\n this._elementId = elementId;\n\n // add attributes to facilitate showing and hiding a common caps-lock tooltip\n const element = document.getElementById(elementId);\n element.setAttribute(\"data-placement\", \"bottom\");\n element.setAttribute(\"data-toggle\", \"tooltip\");\n element.setAttribute(\"data-trigger\", \"manual\");\n element.setAttribute(\"title\", \"Caps Lock is on\");\n\n // setup this up as a bootstrap tooltip to prevent the jQuery tooltip from\n // thinking it needs to show the tooltip on hover\n $(`#${this._elementId}`).tooltip();\n\n // add event listeners to show and hide the tooltip\n element.addEventListener(\"blur\", this.handleElementBlur);\n element.addEventListener(\"keyup\", this.handleElementBlur);\n }\n\n private handleElementBlur = () => {\n $(`#${this._elementId}`).tooltip(\"hide\");\n }\n}\n\nexport {\n addError,\n CapsLockDetector,\n FormValidation,\n isVisible,\n hide,\n NotEmptyValidator,\n removeError,\n show,\n Validator,\n};\n"],"names":["_validationHelpers","require","_typeof","o","Symbol","iterator","constructor","prototype","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","Constructor","protoProps","staticProps","_defineProperty","obj","value","arg","input","hint","prim","toPrimitive","undefined","res","call","TypeError","String","Number","_toPrimitive","$","Login","_this","instance","_classCallCheck","document","getElementById","window","config","CapsLockDetector","ev","inputType","showPassword","password","removeAttribute","hide","passwordRow","forgotPassword","submitButton","innerText","ssoMessage","validationSummary","e","userName","preventDefault","searchParams","URLSearchParams","location","search","returnUrl","has","get","s","data","__RequestVerificationToken","form","val","toString","rememberMe","success","challengeUrl","show","focus","url","post","this","addEventListener","handleUserNameInput","handleSubmitButtonClick","addError","exports","element","classList","contains","add","isVisible","style","display","removeError","remove","NotEmptyValidator","inputId","_input","_inputRow","concat","isEmpty","FormValidation","formId","validators","validator","valid","handleValidated","handleInvalidated","stopPropagation","invalid","_validators","forEach","v","_form","submit","handleFormSubmit","handleInputChange","elementId","_this2","_elementId","tooltip","setAttribute","handleElementBlur"],"sourceRoot":""}