VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /opt/mattermost/client/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/mattermost/client/1041.2572eda22344150544f1.js.map
{"version":3,"file":"1041.2572eda22344150544f1.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/login/login.tsx","webpack://mattermost-webapp/./src/components/common/svg_images_components/shield_with_checkmark.tsx","webpack://mattermost-webapp/./src/components/login/login_mfa.tsx"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport throttle from 'lodash/throttle';\nimport React, {useState, useEffect, useRef, useCallback} from 'react';\nimport type {FormEvent} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {Link, useLocation, useHistory, Route} from 'react-router-dom';\n\nimport type {Team} from '@mattermost/types/teams';\n\nimport {loadMe} from 'mattermost-redux/actions/users';\nimport {Client4} from 'mattermost-redux/client';\nimport {RequestStatus} from 'mattermost-redux/constants';\nimport {getConfig, getLicense} from 'mattermost-redux/selectors/entities/general';\nimport {getIsOnboardingFlowEnabled} from 'mattermost-redux/selectors/entities/preferences';\nimport {getTeamByName, getMyTeamMember} from 'mattermost-redux/selectors/entities/teams';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/users';\n\nimport {redirectUserToDefaultTeam} from 'actions/global_actions';\nimport {addUserToTeamFromInvite} from 'actions/team_actions';\nimport {trackEvent} from 'actions/telemetry_actions';\nimport {login} from 'actions/views/login';\nimport LocalStorageStore from 'stores/local_storage_store';\n\nimport AlertBanner from 'components/alert_banner';\nimport type {ModeType, AlertBannerProps} from 'components/alert_banner';\nimport type {SubmitOptions} from 'components/claim/components/email_to_ldap';\nimport DesktopAuthToken from 'components/desktop_auth_token';\nimport ExternalLink from 'components/external_link';\nimport ExternalLoginButton from 'components/external_login_button/external_login_button';\nimport type {ExternalLoginButtonType} from 'components/external_login_button/external_login_button';\nimport AlternateLinkLayout from 'components/header_footer_route/content_layouts/alternate_link';\nimport ColumnLayout from 'components/header_footer_route/content_layouts/column';\nimport type {CustomizeHeaderType} from 'components/header_footer_route/header_footer_route';\nimport LoadingScreen from 'components/loading_screen';\nimport Markdown from 'components/markdown';\nimport SaveButton from 'components/save_button';\nimport EntraIdIcon from 'components/widgets/icons/entra_id_icon';\nimport LockIcon from 'components/widgets/icons/lock_icon';\nimport LoginGitlabIcon from 'components/widgets/icons/login_gitlab_icon';\nimport LoginGoogleIcon from 'components/widgets/icons/login_google_icon';\nimport LoginOpenIDIcon from 'components/widgets/icons/login_openid_icon';\nimport Input, {SIZE} from 'components/widgets/inputs/input/input';\nimport PasswordInput from 'components/widgets/inputs/password_input/password_input';\n\nimport Constants from 'utils/constants';\nimport DesktopApp from 'utils/desktop_api';\nimport {t} from 'utils/i18n';\nimport {showNotification} from 'utils/notifications';\nimport {isDesktopApp} from 'utils/user_agent';\nimport {setCSRFFromCookie} from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport LoginMfa from './login_mfa';\n\nimport './login.scss';\n\nconst MOBILE_SCREEN_WIDTH = 1200;\n\ntype LoginProps = {\n    onCustomizeHeader?: CustomizeHeaderType;\n}\n\nconst Login = ({onCustomizeHeader}: LoginProps) => {\n    const {formatMessage} = useIntl();\n    const dispatch = useDispatch();\n    const history = useHistory();\n    const {pathname, search, hash} = useLocation();\n\n    const searchParam = new URLSearchParams(search);\n    const extraParam = searchParam.get('extra');\n    const emailParam = searchParam.get('email');\n\n    const {\n        EnableLdap,\n        EnableSaml,\n        EnableSignInWithEmail,\n        EnableSignInWithUsername,\n        EnableSignUpWithEmail,\n        EnableSignUpWithGitLab,\n        EnableSignUpWithOffice365,\n        EnableSignUpWithGoogle,\n        EnableSignUpWithOpenId,\n        EnableOpenServer,\n        EnableUserCreation,\n        LdapLoginFieldName,\n        GitLabButtonText,\n        GitLabButtonColor,\n        OpenIdButtonText,\n        OpenIdButtonColor,\n        SamlLoginButtonText,\n        EnableCustomBrand,\n        CustomBrandText,\n        CustomDescriptionText,\n        SiteName,\n        ExperimentalPrimaryTeam,\n        ForgotPasswordLink,\n        PasswordEnableForgotLink,\n    } = useSelector(getConfig);\n    const {IsLicensed} = useSelector(getLicense);\n    const initializing = useSelector((state: GlobalState) => state.requests.users.logout.status === RequestStatus.SUCCESS || !state.storage.initialized);\n    const currentUser = useSelector(getCurrentUser);\n    const experimentalPrimaryTeam = useSelector((state: GlobalState) => (ExperimentalPrimaryTeam ? getTeamByName(state, ExperimentalPrimaryTeam) : undefined));\n    const experimentalPrimaryTeamMember = useSelector((state: GlobalState) => (experimentalPrimaryTeam ? getMyTeamMember(state, experimentalPrimaryTeam.id) : undefined));\n    const onboardingFlowEnabled = useSelector(getIsOnboardingFlowEnabled);\n\n    const loginIdInput = useRef<HTMLInputElement>(null);\n    const passwordInput = useRef<HTMLInputElement>(null);\n    const closeSessionExpiredNotification = useRef<() => void>();\n\n    const [loginId, setLoginId] = useState(extraParam === Constants.SIGNIN_VERIFIED && emailParam ? emailParam : '');\n    const [password, setPassword] = useState('');\n    const [showMfa, setShowMfa] = useState(false);\n    const [isWaiting, setIsWaiting] = useState(false);\n    const [sessionExpired, setSessionExpired] = useState(false);\n    const [brandImageError, setBrandImageError] = useState(false);\n    const [alertBanner, setAlertBanner] = useState<AlertBannerProps | null>(null);\n    const [hasError, setHasError] = useState(false);\n    const [isMobileView, setIsMobileView] = useState(false);\n\n    const enableCustomBrand = EnableCustomBrand === 'true';\n    const enableLdap = EnableLdap === 'true';\n    const enableOpenServer = EnableOpenServer === 'true';\n    const enableUserCreation = EnableUserCreation === 'true';\n    const enableSaml = EnableSaml === 'true';\n    const enableSignInWithEmail = EnableSignInWithEmail === 'true';\n    const enableSignInWithUsername = EnableSignInWithUsername === 'true';\n    const enableSignUpWithEmail = enableUserCreation && EnableSignUpWithEmail === 'true';\n    const enableSignUpWithGitLab = EnableSignUpWithGitLab === 'true';\n    const enableSignUpWithGoogle = EnableSignUpWithGoogle === 'true';\n    const enableSignUpWithOffice365 = EnableSignUpWithOffice365 === 'true';\n    const enableSignUpWithOpenId = EnableSignUpWithOpenId === 'true';\n    const isLicensed = IsLicensed === 'true';\n    const ldapEnabled = isLicensed && enableLdap;\n    const enableSignUpWithSaml = isLicensed && enableSaml;\n    const siteName = SiteName ?? '';\n\n    const enableBaseLogin = enableSignInWithEmail || enableSignInWithUsername || ldapEnabled;\n    const enableExternalSignup = enableSignUpWithGitLab || enableSignUpWithOffice365 || enableSignUpWithGoogle || enableSignUpWithOpenId || enableSignUpWithSaml;\n    const showSignup = enableOpenServer && (enableExternalSignup || enableSignUpWithEmail || enableLdap);\n    const onlyLdapEnabled = enableLdap && !(enableSaml || enableSignInWithEmail || enableSignInWithUsername || enableSignUpWithEmail || enableSignUpWithGitLab || enableSignUpWithGoogle || enableSignUpWithOffice365 || enableSignUpWithOpenId);\n\n    const query = new URLSearchParams(search);\n    const redirectTo = query.get('redirect_to');\n\n    const [desktopLoginLink, setDesktopLoginLink] = useState('');\n\n    const getExternalLoginOptions = () => {\n        const externalLoginOptions: ExternalLoginButtonType[] = [];\n\n        if (!enableExternalSignup) {\n            return externalLoginOptions;\n        }\n\n        if (enableSignUpWithGitLab) {\n            const url = `${Client4.getOAuthRoute()}/gitlab/login${search}`;\n            externalLoginOptions.push({\n                id: 'gitlab',\n                url,\n                icon: <LoginGitlabIcon/>,\n                label: GitLabButtonText || formatMessage({id: 'login.gitlab', defaultMessage: 'GitLab'}),\n                style: {color: GitLabButtonColor, borderColor: GitLabButtonColor},\n                onClick: desktopExternalAuth(url),\n            });\n        }\n\n        if (enableSignUpWithGoogle) {\n            const url = `${Client4.getOAuthRoute()}/google/login${search}`;\n            externalLoginOptions.push({\n                id: 'google',\n                url,\n                icon: <LoginGoogleIcon/>,\n                label: formatMessage({id: 'login.google', defaultMessage: 'Google'}),\n                onClick: desktopExternalAuth(url),\n            });\n        }\n\n        if (enableSignUpWithOffice365) {\n            const url = `${Client4.getOAuthRoute()}/office365/login${search}`;\n            externalLoginOptions.push({\n                id: 'office365',\n                url,\n                icon: <EntraIdIcon/>,\n                label: formatMessage({id: 'login.office365', defaultMessage: 'Entra ID'}),\n                onClick: desktopExternalAuth(url),\n            });\n        }\n\n        if (enableSignUpWithOpenId) {\n            const url = `${Client4.getOAuthRoute()}/openid/login${search}`;\n            externalLoginOptions.push({\n                id: 'openid',\n                url,\n                icon: <LoginOpenIDIcon/>,\n                label: OpenIdButtonText || formatMessage({id: 'login.openid', defaultMessage: 'Open ID'}),\n                style: {color: OpenIdButtonColor, borderColor: OpenIdButtonColor},\n                onClick: desktopExternalAuth(url),\n            });\n        }\n\n        if (enableSignUpWithSaml) {\n            const url = `${Client4.getUrl()}/login/sso/saml${search}`;\n            externalLoginOptions.push({\n                id: 'saml',\n                url,\n                icon: <LockIcon/>,\n                label: SamlLoginButtonText || formatMessage({id: 'login.saml', defaultMessage: 'SAML'}),\n                onClick: desktopExternalAuth(url),\n            });\n        }\n\n        return externalLoginOptions;\n    };\n\n    const desktopExternalAuth = (href: string) => {\n        return (event: React.MouseEvent) => {\n            if (isDesktopApp()) {\n                event.preventDefault();\n\n                setDesktopLoginLink(href);\n                history.push(`/login/desktop${search}`);\n            }\n        };\n    };\n\n    const dismissAlert = () => {\n        setAlertBanner(null);\n        setHasError(false);\n    };\n\n    const onDismissSessionExpired = useCallback(() => {\n        LocalStorageStore.setWasLoggedIn(false);\n        setSessionExpired(false);\n        DesktopApp.setSessionExpired(false);\n        dismissAlert();\n    }, []);\n\n    const configureTitle = useCallback(() => {\n        document.title = sessionExpired ? (\n            formatMessage(\n                {\n                    id: 'login.session_expired.title',\n                    defaultMessage: '* {siteName} - Session Expired',\n                },\n                {siteName},\n            )\n        ) : siteName;\n    }, [sessionExpired, siteName]);\n\n    const showSessionExpiredNotificationIfNeeded = useCallback(() => {\n        if (sessionExpired && !closeSessionExpiredNotification!.current) {\n            dispatch(showNotification({\n                title: siteName,\n                body: formatMessage({\n                    id: 'login.session_expired.notification',\n                    defaultMessage: 'Session Expired: Please sign in to continue receiving notifications.',\n                }),\n                requireInteraction: true,\n                silent: false,\n                onClick: () => {\n                    window.focus();\n                    if (closeSessionExpiredNotification.current) {\n                        closeSessionExpiredNotification.current();\n                        closeSessionExpiredNotification.current = undefined;\n                    }\n                },\n            })).then(({callback: closeNotification}) => {\n                closeSessionExpiredNotification.current = closeNotification;\n            }).catch(() => {\n                // Ignore the failure to display the notification.\n            });\n        } else if (!sessionExpired && closeSessionExpiredNotification!.current) {\n            closeSessionExpiredNotification.current();\n            closeSessionExpiredNotification.current = undefined;\n        }\n    }, [sessionExpired, siteName]);\n\n    const getAlertData = useCallback(() => {\n        let mode;\n        let title;\n        let onDismiss;\n\n        if (sessionExpired) {\n            mode = 'warning';\n            title = formatMessage({\n                id: 'login.session_expired',\n                defaultMessage: 'Your session has expired. Please log in again.',\n            });\n            onDismiss = onDismissSessionExpired;\n        } else {\n            switch (extraParam) {\n            case Constants.GET_TERMS_ERROR:\n                mode = 'danger';\n                title = formatMessage({\n                    id: 'login.get_terms_error',\n                    defaultMessage: 'Unable to load terms of service. If this issue persists, contact your System Administrator.',\n                });\n                break;\n\n            case Constants.TERMS_REJECTED:\n                mode = 'warning';\n                title = formatMessage(\n                    {\n                        id: 'login.terms_rejected',\n                        defaultMessage: 'You must agree to the terms of use before accessing {siteName}. Please contact your System Administrator for more details.',\n                    },\n                    {siteName},\n                );\n                break;\n\n            case Constants.SIGNIN_CHANGE:\n                mode = 'success';\n                title = formatMessage({\n                    id: 'login.changed',\n                    defaultMessage: 'Sign-in method changed successfully',\n                });\n                break;\n\n            case Constants.SIGNIN_VERIFIED:\n                mode = 'success';\n                title = formatMessage({\n                    id: 'login.verified',\n                    defaultMessage: 'Email Verified',\n                });\n                break;\n\n            case Constants.PASSWORD_CHANGE:\n                mode = 'success';\n                title = formatMessage({\n                    id: 'login.passwordChanged',\n                    defaultMessage: 'Password updated successfully',\n                });\n                break;\n\n            case Constants.CREATE_LDAP:\n                mode = 'success';\n                title = formatMessage({\n                    id: 'login.ldapCreate',\n                    defaultMessage: 'Enter your AD/LDAP username and password to create an account.',\n                });\n                break;\n\n            default:\n                break;\n            }\n        }\n\n        return setAlertBanner(mode ? {mode: mode as ModeType, title, onDismiss} : null);\n    }, [extraParam, sessionExpired, siteName, onDismissSessionExpired]);\n\n    const getAlternateLink = useCallback(() => {\n        const linkLabel = formatMessage({\n            id: 'login.noAccount',\n            defaultMessage: 'Don\\'t have an account?',\n        });\n        const handleClick = () => {\n            trackEvent('signup', 'click_login_no_account');\n        };\n        if (showSignup) {\n            return (\n                <AlternateLinkLayout\n                    className='login-body-alternate-link'\n                    alternateLinkPath={'/signup_user_complete'}\n                    alternateLinkLabel={linkLabel}\n                />\n            );\n        }\n        return (\n            <AlternateLinkLayout\n                className='login-body-alternate-link'\n                alternateLinkPath={'/access_problem'}\n                alternateLinkLabel={linkLabel}\n                onClick={handleClick}\n            />\n        );\n    }, [showSignup]);\n\n    const onWindowResize = throttle(() => {\n        setIsMobileView(window.innerWidth < MOBILE_SCREEN_WIDTH);\n    }, 100);\n\n    const onWindowFocus = useCallback(() => {\n        if (extraParam === Constants.SIGNIN_VERIFIED && emailParam) {\n            passwordInput.current?.focus();\n        }\n    }, [emailParam, extraParam]);\n\n    useEffect(() => {\n        if (onCustomizeHeader) {\n            onCustomizeHeader({\n                onBackButtonClick: showMfa ? handleHeaderBackButtonOnClick : undefined,\n                alternateLink: isMobileView ? getAlternateLink() : undefined,\n            });\n        }\n    }, [onCustomizeHeader, search, showMfa, isMobileView, getAlternateLink]);\n\n    useEffect(() => {\n        // We don't want to redirect outside of this route if we're doing Desktop App auth\n        if (query.get('server_token')) {\n            return;\n        }\n\n        if (currentUser) {\n            if (redirectTo && redirectTo.match(/^\\/([^/]|$)/)) {\n                history.push(redirectTo);\n                return;\n            }\n            redirectUserToDefaultTeam();\n            return;\n        }\n\n        onWindowResize();\n        onWindowFocus();\n\n        window.addEventListener('resize', onWindowResize);\n        window.addEventListener('focus', onWindowFocus);\n\n        // Determine if the user was unexpectedly logged out.\n        if (LocalStorageStore.getWasLoggedIn()) {\n            if (extraParam === Constants.SIGNIN_CHANGE) {\n                // Assume that if the user triggered a sign in change, it was intended to logout.\n                // We can't preflight this, since in some flows it's the server that invalidates\n                // our session after we use it to complete the sign in change.\n                LocalStorageStore.setWasLoggedIn(false);\n            } else {\n                setSessionExpired(true);\n                DesktopApp.setSessionExpired(true);\n\n                // Although the authority remains the local sessionExpired bit on the state, set this\n                // extra field in the querystring to signal the desktop app.\n                // This is legacy support for older Desktop Apps and can be removed eventually\n                const newSearchParam = new URLSearchParams(search);\n                newSearchParam.set('extra', Constants.SESSION_EXPIRED);\n                history.replace(`${pathname}?${newSearchParam}`);\n            }\n        }\n    }, []);\n\n    useEffect(() => {\n        configureTitle();\n        showSessionExpiredNotificationIfNeeded();\n        getAlertData();\n    }, [configureTitle, showSessionExpiredNotificationIfNeeded, getAlertData]);\n\n    useEffect(() => {\n        return () => {\n            if (closeSessionExpiredNotification!.current) {\n                closeSessionExpiredNotification.current();\n                closeSessionExpiredNotification.current = undefined;\n            }\n\n            window.removeEventListener('resize', onWindowResize);\n            window.removeEventListener('focus', onWindowFocus);\n\n            DesktopApp.setSessionExpired(false);\n        };\n    }, []);\n\n    if (initializing) {\n        return (<LoadingScreen/>);\n    }\n\n    const getInputPlaceholder = () => {\n        const loginPlaceholders = [];\n\n        if (enableSignInWithEmail) {\n            loginPlaceholders.push(formatMessage({id: 'login.email', defaultMessage: 'Email'}));\n        }\n\n        if (enableSignInWithUsername) {\n            loginPlaceholders.push(formatMessage({id: 'login.username', defaultMessage: 'Username'}));\n        }\n\n        if (ldapEnabled) {\n            loginPlaceholders.push(LdapLoginFieldName || formatMessage({id: 'login.ldapUsername', defaultMessage: 'AD/LDAP Username'}));\n        }\n\n        if (loginPlaceholders.length > 1) {\n            const lastIndex = loginPlaceholders.length - 1;\n            return `${loginPlaceholders.slice(0, lastIndex).join(', ')}${formatMessage({id: 'login.placeholderOr', defaultMessage: ' or '})}${loginPlaceholders[lastIndex]}`;\n        }\n\n        return loginPlaceholders[0] ?? '';\n    };\n\n    const preSubmit = (e: React.MouseEvent | React.KeyboardEvent) => {\n        e.preventDefault();\n        setIsWaiting(true);\n\n        // Discard any session expiry notice once the user interacts with the login page.\n        onDismissSessionExpired();\n\n        const newQuery = search.replace(/(extra=password_change)&?/i, '');\n        if (newQuery !== search) {\n            history.replace(`${pathname}${newQuery}${hash}`);\n        }\n\n        // password managers don't always call onInput handlers for form fields so it's possible\n        // for the state to get out of sync with what the user sees in the browser\n        let currentLoginId = loginId;\n        if (loginIdInput.current) {\n            currentLoginId = loginIdInput.current.value;\n\n            if (currentLoginId !== loginId) {\n                setLoginId(currentLoginId);\n            }\n        }\n\n        let currentPassword = password;\n        if (passwordInput.current) {\n            currentPassword = passwordInput.current.value;\n\n            if (currentPassword !== password) {\n                setPassword(currentPassword);\n            }\n        }\n\n        // don't trim the password since we support spaces in passwords\n        currentLoginId = currentLoginId.trim().toLowerCase();\n\n        if (!currentLoginId) {\n            t('login.noEmail');\n            t('login.noEmailLdapUsername');\n            t('login.noEmailUsername');\n            t('login.noEmailUsernameLdapUsername');\n            t('login.noLdapUsername');\n            t('login.noUsername');\n            t('login.noUsernameLdapUsername');\n\n            // it's slightly weird to be constructing the message ID, but it's a bit nicer than triply nested if statements\n            let msgId = 'login.no';\n            if (enableSignInWithEmail) {\n                msgId += 'Email';\n            }\n            if (enableSignInWithUsername) {\n                msgId += 'Username';\n            }\n            if (ldapEnabled) {\n                msgId += 'LdapUsername';\n            }\n\n            setAlertBanner({\n                mode: 'danger',\n                title: formatMessage(\n                    {id: msgId},\n                    {ldapUsername: LdapLoginFieldName || formatMessage({id: 'login.ldapUsernameLower', defaultMessage: 'AD/LDAP username'})},\n                ),\n            });\n            setHasError(true);\n            setIsWaiting(false);\n\n            return;\n        }\n\n        if (!password) {\n            setAlertBanner({\n                mode: 'danger',\n                title: formatMessage({id: 'login.noPassword', defaultMessage: 'Please enter your password'}),\n            });\n            setHasError(true);\n            setIsWaiting(false);\n\n            return;\n        }\n\n        submit({loginId, password});\n    };\n\n    const submit = async ({loginId, password, token}: SubmitOptions) => {\n        setIsWaiting(true);\n\n        const {error: loginError} = await dispatch(login(loginId, password, token));\n\n        if (loginError && loginError.server_error_id && loginError.server_error_id.length !== 0) {\n            if (loginError.server_error_id === 'api.user.login.not_verified.app_error') {\n                history.push('/should_verify_email?&email=' + encodeURIComponent(loginId));\n            } else if (loginError.server_error_id === 'store.sql_user.get_for_login.app_error' ||\n                loginError.server_error_id === 'ent.ldap.do_login.user_not_registered.app_error') {\n                setShowMfa(false);\n                setIsWaiting(false);\n                setAlertBanner({\n                    mode: 'danger',\n                    title: formatMessage({\n                        id: 'login.userNotFound',\n                        defaultMessage: \"We couldn't find an account matching your login credentials.\",\n                    }),\n                });\n                setHasError(true);\n            } else if (loginError.server_error_id === 'api.user.check_user_password.invalid.app_error' ||\n                loginError.server_error_id === 'ent.ldap.do_login.invalid_password.app_error') {\n                setShowMfa(false);\n                setIsWaiting(false);\n                setAlertBanner({\n                    mode: 'danger',\n                    title: formatMessage({\n                        id: 'login.invalidPassword',\n                        defaultMessage: 'Your password is incorrect.',\n                    }),\n                });\n                setHasError(true);\n            } else if (!showMfa && loginError.server_error_id === 'mfa.validate_token.authenticate.app_error') {\n                setShowMfa(true);\n            } else if (loginError.server_error_id === 'api.user.login.invalid_credentials_email_username') {\n                setShowMfa(false);\n                setIsWaiting(false);\n                setAlertBanner({\n                    mode: 'danger',\n                    title: formatMessage({\n                        id: 'login.invalidCredentials',\n                        defaultMessage: 'The email/username or password is invalid.',\n                    }),\n                });\n                setHasError(true);\n            } else {\n                setShowMfa(false);\n                setIsWaiting(false);\n                setAlertBanner({\n                    mode: 'danger',\n                    title: loginError.message,\n                });\n                setHasError(true);\n            }\n            return;\n        }\n\n        await postSubmit();\n    };\n\n    const postSubmit = async () => {\n        await dispatch(loadMe());\n\n        // check for query params brought over from signup_user_complete\n        const params = new URLSearchParams(search);\n        const inviteToken = params.get('t') || '';\n        const inviteId = params.get('id') || '';\n\n        if (inviteId || inviteToken) {\n            const {data: team} = await dispatch(addUserToTeamFromInvite(inviteToken, inviteId));\n\n            if (team) {\n                finishSignin(team);\n            } else {\n                // there's not really a good way to deal with this, so just let the user log in like normal\n                finishSignin();\n            }\n        } else {\n            finishSignin();\n        }\n    };\n\n    const finishSignin = (team?: Team) => {\n        setCSRFFromCookie();\n\n        // Record a successful login to local storage. If an unintentional logout occurs, e.g.\n        // via session expiration, this bit won't get reset and we can notify the user as such.\n        LocalStorageStore.setWasLoggedIn(true);\n\n        // After a user has just logged in, we set the following flag to \"false\" so that after\n        // a user is notified of successful login, we can set it back to \"true\"\n        LocalStorageStore.setWasNotifiedOfLogIn(false);\n\n        if (redirectTo && redirectTo.match(/^\\/([^/]|$)/)) {\n            history.push(redirectTo);\n        } else if (team) {\n            history.push(`/${team.name}`);\n        } else if (experimentalPrimaryTeamMember?.team_id) {\n            // Only set experimental team if user is on that team\n            history.push(`/${ExperimentalPrimaryTeam}`);\n        } else if (onboardingFlowEnabled) {\n            // need info about whether admin or not,\n            // and whether admin has already completed\n            // first time onboarding. Instead of fetching and orchestrating that here,\n            // let the default root component handle it.\n            history.push('/');\n        } else {\n            redirectUserToDefaultTeam();\n        }\n    };\n\n    const handleHeaderBackButtonOnClick = () => {\n        setShowMfa(false);\n    };\n\n    const handleInputOnChange = ({target: {value: loginId}}: React.ChangeEvent<HTMLInputElement>) => {\n        setLoginId(loginId);\n\n        if (hasError) {\n            setHasError(false);\n            dismissAlert();\n        }\n    };\n\n    const handlePasswordInputOnChange = ({target: {value: password}}: React.ChangeEvent<HTMLInputElement>) => {\n        setPassword(password);\n\n        if (hasError) {\n            setHasError(false);\n            dismissAlert();\n        }\n    };\n\n    const handleBrandImageError = () => {\n        setBrandImageError(true);\n    };\n\n    const getCardTitle = () => {\n        if (CustomDescriptionText) {\n            return CustomDescriptionText;\n        }\n\n        if (!enableBaseLogin && enableExternalSignup) {\n            return formatMessage({id: 'login.cardtitle.external', defaultMessage: 'Log in with one of the following:'});\n        }\n\n        return formatMessage({id: 'login.cardtitle', defaultMessage: 'Log in'});\n    };\n\n    const getMessageSubtitle = () => {\n        if (enableCustomBrand) {\n            return CustomBrandText ? (\n                <div className='login-body-custom-branding-markdown'>\n                    <Markdown\n                        message={CustomBrandText}\n                        options={{mentionHighlight: false}}\n                    />\n                </div>\n            ) : null;\n        }\n\n        return (\n            <p className='login-body-message-subtitle'>\n                {formatMessage({id: 'login.subtitle', defaultMessage: 'Collaborate with your team in real-time'})}\n            </p>\n        );\n    };\n\n    const getResetPasswordLink = () => {\n        if (!PasswordEnableForgotLink || PasswordEnableForgotLink === 'false' || onlyLdapEnabled) {\n            return null;\n        }\n\n        if (ForgotPasswordLink) {\n            return (\n                <div className='login-body-card-form-link'>\n                    <ExternalLink\n                        location='login_page'\n                        href={ForgotPasswordLink}\n                    >\n                        {formatMessage({id: 'login.forgot', defaultMessage: 'Forgot your password?'})}\n                    </ExternalLink>\n                </div>\n            );\n        }\n\n        if (enableSignInWithUsername || enableSignInWithEmail) {\n            return (\n                <div className='login-body-card-form-link'>\n                    <Link to='/reset_password'>\n                        {formatMessage({id: 'login.forgot', defaultMessage: 'Forgot your password?'})}\n                    </Link>\n                </div>\n            );\n        }\n\n        return null;\n    };\n\n    const getContent = () => {\n        if (showMfa) {\n            return (\n                <LoginMfa\n                    loginId={loginId}\n                    password={password}\n                    onSubmit={submit}\n                />\n            );\n        }\n\n        if (!enableBaseLogin && !enableExternalSignup) {\n            return (\n                <ColumnLayout\n                    title={formatMessage({id: 'login.noMethods.title', defaultMessage: 'This server doesn’t have any sign-in methods enabled'})}\n                    message={formatMessage({id: 'login.noMethods.subtitle', defaultMessage: 'Please contact your System Administrator to resolve this.'})}\n                />\n            );\n        }\n\n        if (desktopLoginLink || query.get('server_token')) {\n            return (\n                <Route\n                    path={'/login/desktop'}\n                    render={() => (\n                        <DesktopAuthToken\n                            href={desktopLoginLink}\n                            onLogin={postSubmit}\n                        />\n                    )}\n                />\n            );\n        }\n\n        return (\n            <>\n                <div\n                    className={classNames(\n                        'login-body-message',\n                        {\n                            'custom-branding': enableCustomBrand,\n                            'with-brand-image': enableCustomBrand && !brandImageError,\n                            'with-alternate-link': showSignup && !isMobileView,\n                        },\n                    )}\n                >\n                    {enableCustomBrand && !brandImageError ? (\n                        <img\n                            className={classNames('login-body-custom-branding-image')}\n                            alt='brand'\n                            src={Client4.getBrandImageUrl('0')}\n                            onError={handleBrandImageError}\n                        />\n                    ) : (\n                        <h1 className='login-body-message-title'>\n                            {formatMessage({id: 'login.title', defaultMessage: 'Log in to your account'})}\n                        </h1>\n                    )}\n                    {getMessageSubtitle()}\n                </div>\n                <div className='login-body-action'>\n                    {!isMobileView && getAlternateLink()}\n                    <div className={classNames('login-body-card', {'custom-branding': enableCustomBrand, 'with-error': hasError})}>\n                        <div\n                            className='login-body-card-content'\n                            tabIndex={0}\n                        >\n                            <p className='login-body-card-title'>\n                                {getCardTitle()}\n                            </p>\n                            {enableCustomBrand && getMessageSubtitle()}\n                            {alertBanner && (\n                                <AlertBanner\n                                    className='login-body-card-banner'\n                                    mode={alertBanner.mode}\n                                    title={alertBanner.title}\n                                    onDismiss={alertBanner.onDismiss ?? dismissAlert}\n                                />\n                            )}\n                            {enableBaseLogin && (\n                                <form\n                                    onSubmit={(event: FormEvent<HTMLFormElement>) => {\n                                        preSubmit(event as unknown as React.MouseEvent);\n                                    }}\n                                >\n                                    <div className='login-body-card-form'>\n                                        <Input\n                                            ref={loginIdInput}\n                                            name='loginId'\n                                            containerClassName='login-body-card-form-input'\n                                            type='text'\n                                            inputSize={SIZE.LARGE}\n                                            value={loginId}\n                                            onChange={handleInputOnChange}\n                                            hasError={hasError}\n                                            placeholder={getInputPlaceholder()}\n                                            disabled={isWaiting}\n                                            autoFocus={true}\n                                        />\n                                        <PasswordInput\n                                            ref={passwordInput}\n                                            className='login-body-card-form-password-input'\n                                            value={password}\n                                            inputSize={SIZE.LARGE}\n                                            onChange={handlePasswordInputOnChange}\n                                            hasError={hasError}\n                                            disabled={isWaiting}\n                                        />\n                                        {getResetPasswordLink()}\n                                        <SaveButton\n                                            extraClasses='login-body-card-form-button-submit large'\n                                            saving={isWaiting}\n                                            onClick={preSubmit}\n                                            defaultMessage={formatMessage({id: 'login.logIn', defaultMessage: 'Log in'})}\n                                            savingMessage={formatMessage({id: 'login.logingIn', defaultMessage: 'Logging in…'})}\n                                        />\n                                    </div>\n                                </form>\n                            )}\n                            {enableBaseLogin && enableExternalSignup && (\n                                <div className='login-body-card-form-divider'>\n                                    <span className='login-body-card-form-divider-label'>\n                                        {formatMessage({id: 'login.or', defaultMessage: 'or log in with'})}\n                                    </span>\n                                </div>\n                            )}\n                            {enableExternalSignup && (\n                                <div className={classNames('login-body-card-form-login-options', {column: !enableBaseLogin})}>\n                                    {getExternalLoginOptions().map((option) => (\n                                        <ExternalLoginButton\n                                            key={option.id}\n                                            direction={enableBaseLogin ? undefined : 'column'}\n                                            {...option}\n                                        />\n                                    ))}\n                                </div>\n                            )}\n                        </div>\n                    </div>\n                </div>\n            </>\n        );\n    };\n\n    return (\n        <div className='login-body'>\n            <div className='login-body-content'>\n                {getContent()}\n            </div>\n        </div>\n    );\n};\n\nexport default Login;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\ntype SvgProps = {\n    width?: number;\n    height?: number;\n}\n\nconst Svg = (props: SvgProps) => (\n    <svg\n        width={props.width?.toString() || '204'}\n        height={props.height?.toString() || '180'}\n        viewBox='0 0 204 180'\n        fill='none'\n        xmlns='http://www.w3.org/2000/svg'\n    >\n        <g clipPath='url(#clip0_4397_160033)'>\n            <ellipse\n                cx='101.25'\n                cy='89'\n                rx='89.25'\n                ry='89.25'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.08'\n            />\n            <path\n                d='M7.5 75.75L7.5 88.8145L168.261 88.8145L168.261 102.75L192 102.75'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.24'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M151.5 141.75L151.5 119.25L129 119.25'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.24'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <ellipse\n                cx='2.25'\n                cy='2.25'\n                rx='2.25'\n                ry='2.25'\n                transform='matrix(1 8.74228e-08 8.74228e-08 -1 4.5 77.25)'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.48'\n            />\n            <ellipse\n                cx='150.75'\n                cy='144'\n                rx='2.25'\n                ry='2.25'\n                transform='rotate(180 150.75 144)'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.48'\n            />\n            <ellipse\n                cx='2.25'\n                cy='2.25'\n                rx='2.25'\n                ry='2.25'\n                transform='matrix(1 8.74228e-08 8.74228e-08 -1 190.5 104.25)'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.48'\n            />\n            <path\n                d='M100.858 160.405L101.222 160.609L101.588 160.406L109.106 156.227L109.106 156.227C148.812 134.152 157.712 93.1576 161.248 47.6444L161.299 46.9873L160.654 46.8522L160.466 46.8129L160.39 46.797H160.312C141.387 46.797 122.047 39.9873 101.733 21.1994L101.166 20.6749L100.658 21.2572C92.1406 31.0307 84.7227 36.9842 76.2033 40.7408C67.671 44.5031 57.9721 46.0902 44.8319 47.025L44.7996 47.0273L44.7677 47.0323L41.8826 47.4895L41.1953 47.5984L41.2525 48.292C44.981 93.4429 53.7267 134.063 93.0934 156.064L100.858 160.405Z'\n                fill='white'\n                stroke='var(--center-channel-color)'\n                strokeWidth='1.5'\n            />\n            <path\n                d='M43.5 98.25C45.487 104.935 47.8699 111.357 50.748 117.462M52.8704 121.731C57.816 131.172 64.0672 139.782 72.0213 147.346M74.3429 149.481C75.9919 150.947 77.7099 152.37 79.5 153.75'\n                stroke='var(--center-channel-color)'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n                strokeLinejoin='round'\n            />\n            <path\n                d='M101.228 147.75L94.6427 144.164C61.5676 126.159 54.1617 92.9184 51 55.625L53.4468 55.2473C75.7747 53.7002 86.7058 49.9806 101.228 33.75C118.56 49.3634 135.112 55.0605 151.341 55.0605L151.5 55.093C148.502 92.6829 140.965 126.232 107.604 144.298L101.228 147.75Z'\n                fill='var(--center-channel-color)'\n                fillOpacity='0.12'\n            />\n            <path\n                d='M63.8457 76.668H130.029'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M73.7031 85.1172H139.887'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M66.6621 94.9746H132.846'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M79.3359 111.873H110.316'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M58.2129 68.4072H79.3353'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M83.5605 68.4072H114.54'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M118.764 68.4072H145.519'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M99.0498 120.322H125.805'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M79.3359 120.322H94.8257'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M69.4785 103.017H100.458'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M104.684 103.017H131.439'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M63.8447 60.4746H99.0488'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                d='M104.682 60.4746H139.886'\n                stroke='var(--center-channel-color)'\n                strokeOpacity='0.12'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n            />\n            <path\n                fillRule='evenodd'\n                clipRule='evenodd'\n                d='M85.5012 85.3311H117.176C118.642 85.3311 119.826 86.51 119.826 87.9712V99.6265C119.826 109.578 115.362 117.647 105.388 117.647H97.2901C87.3156 117.647 82.8516 109.578 82.8516 99.6265V87.9712C82.8516 86.5149 84.0402 85.3311 85.5012 85.3311ZM100.757 92.1353H99.3511V95.4386V101.25L101.216 103.115L99.3511 104.98V107.443H104.454V97.2944L103.028 95.8686L104.454 94.4429V92.1353H100.757Z'\n                fill='var(--denim-button-bg)'\n            />\n            <path\n                fillRule='evenodd'\n                clipRule='evenodd'\n                d='M110.061 80.4107V85.3905C110.061 85.4206 110.062 85.4503 110.064 85.4795H114.524C114.527 85.4503 114.528 85.4206 114.528 85.3905V80.4107C114.528 72.9522 109.644 66.8818 102.461 66.8818H99.4189C92.2356 66.8818 87.3516 72.9522 87.3516 80.4107V85.3905C87.3516 85.4206 87.3527 85.4503 87.3549 85.4795H91.8069C91.8091 85.4503 91.8102 85.4206 91.8102 85.3905V80.4107C91.8102 75.3359 94.9858 71.471 98.7523 71.471H103.118C107.136 71.471 110.061 75.3359 110.061 80.4107Z'\n                fill='var(--denim-button-bg)'\n            />\n            <path\n                d='M111 23.25C111 23.25 124.759 37.6944 153 42.75'\n                stroke='var(--center-channel-color)'\n                strokeWidth='1.5'\n                strokeLinecap='round'\n                strokeLinejoin='round'\n            />\n        </g>\n        <defs>\n            <clipPath id='clip0_4397_160033'>\n                <rect\n                    width='204'\n                    height='178.5'\n                    fill='white'\n                    transform='translate(0 0.75)'\n                />\n            </clipPath>\n        </defs>\n    </svg>\n);\n\nexport default Svg;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {type ReactNode, useState} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {SubmitOptions} from 'components/claim/components/email_to_ldap';\nimport ShieldWithCheckmarkSVG from 'components/common/svg_images_components/shield_with_checkmark';\nimport ColumnLayout from 'components/header_footer_route/content_layouts/column';\nimport SaveButton from 'components/save_button';\nimport Input, {SIZE} from 'components/widgets/inputs/input/input';\n\nimport './login_mfa.scss';\n\ntype LoginMfaProps = {\n    loginId: string | null;\n    password: string;\n    title?: ReactNode;\n    subtitle?: ReactNode;\n    onSubmit: ({loginId, password, token}: SubmitOptions) => void;\n}\n\nconst LoginMfa = ({loginId, password, title, subtitle, onSubmit}: LoginMfaProps) => {\n    const {formatMessage} = useIntl();\n\n    const [token, setToken] = useState('');\n    const [saving, setSaving] = useState(false);\n\n    const handleInputOnChange = ({target: {value: token}}: React.ChangeEvent<HTMLInputElement>) => {\n        setToken(token.trim().replace(/\\s/g, ''));\n    };\n\n    const handleSaveButtonOnClick = (e: React.MouseEvent | React.KeyboardEvent) => {\n        e.preventDefault();\n\n        if (!saving) {\n            setSaving(true);\n\n            onSubmit({loginId: loginId || '', password, token});\n        }\n    };\n\n    const onEnterKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n        if (token) {\n            handleSaveButtonOnClick(e);\n        }\n    };\n\n    return (\n        <ColumnLayout\n            title={title || formatMessage({id: 'login_mfa.title', defaultMessage: 'Enter MFA Token'})}\n            message={subtitle || formatMessage({id: 'login_mfa.subtitle', defaultMessage: 'To complete the sign in process, please enter a token from your smartphone\\'s authenticator'})}\n            SVGElement={<ShieldWithCheckmarkSVG/>}\n            extraContent={(\n                <div className='login-mfa-form'>\n                    <Input\n                        name='token'\n                        containerClassName='login-mfa-form-input'\n                        type='text'\n                        inputSize={SIZE.LARGE}\n                        value={token}\n                        onChange={handleInputOnChange}\n                        placeholder={formatMessage({id: 'login_mfa.token', defaultMessage: 'Enter MFA Token'})}\n                        autoFocus={true}\n                        disabled={saving}\n                    />\n                    <div className='login-mfa-form-button-container'>\n                        <SaveButton\n                            extraClasses='login-mfa-form-button-submit large'\n                            saving={saving}\n                            disabled={!token}\n                            onClick={handleSaveButtonOnClick}\n                            defaultMessage={formatMessage({id: 'login_mfa.submit', defaultMessage: 'Submit'})}\n                            savingMessage={formatMessage({id: 'login_mfa.saving', defaultMessage: 'Logging in…'})}\n                        />\n                    </div>\n                </div>\n            )}\n            onEnterKeyDown={onEnterKeyDown}\n        />\n    );\n};\n\nexport default LoginMfa;\n"],"names":["_ref","onCustomizeHeader","formatMessage","useIntl","dispatch","useDispatch","history","useHistory","pathname","search","hash","useLocation","searchParam","URLSearchParams","extraParam","get","emailParam","EnableLdap","EnableSaml","EnableSignInWithEmail","EnableSignInWithUsername","EnableSignUpWithEmail","EnableSignUpWithGitLab","EnableSignUpWithOffice365","EnableSignUpWithGoogle","EnableSignUpWithOpenId","EnableOpenServer","EnableUserCreation","LdapLoginFieldName","GitLabButtonText","GitLabButtonColor","OpenIdButtonText","OpenIdButtonColor","SamlLoginButtonText","EnableCustomBrand","CustomBrandText","CustomDescriptionText","SiteName","ExperimentalPrimaryTeam","ForgotPasswordLink","PasswordEnableForgotLink","useSelector","getConfig","IsLicensed","getLicense","initializing","state","requests","users","logout","status","RequestStatus","SUCCESS","storage","initialized","currentUser","getCurrentUser","experimentalPrimaryTeam","getTeamByName","undefined","experimentalPrimaryTeamMember","getMyTeamMember","id","onboardingFlowEnabled","getIsOnboardingFlowEnabled","loginIdInput","useRef","passwordInput","closeSessionExpiredNotification","loginId","setLoginId","useState","Constants","SIGNIN_VERIFIED","password","setPassword","showMfa","setShowMfa","isWaiting","setIsWaiting","sessionExpired","setSessionExpired","brandImageError","setBrandImageError","alertBanner","setAlertBanner","hasError","setHasError","isMobileView","setIsMobileView","enableCustomBrand","enableLdap","enableSaml","enableSignInWithEmail","enableSignInWithUsername","enableSignUpWithEmail","enableSignUpWithGitLab","enableSignUpWithGoogle","enableSignUpWithOffice365","enableSignUpWithOpenId","isLicensed","ldapEnabled","enableSignUpWithSaml","siteName","enableBaseLogin","enableExternalSignup","showSignup","onlyLdapEnabled","query","redirectTo","desktopLoginLink","setDesktopLoginLink","desktopExternalAuth","href","event","isDesktopApp","preventDefault","push","concat","dismissAlert","onDismissSessionExpired","useCallback","LocalStorageStore","setWasLoggedIn","DesktopApp","configureTitle","document","title","defaultMessage","showSessionExpiredNotificationIfNeeded","current","showNotification","body","requireInteraction","silent","onClick","window","focus","then","_ref2","callback","closeNotification","catch","getAlertData","mode","onDismiss","GET_TERMS_ERROR","TERMS_REJECTED","SIGNIN_CHANGE","PASSWORD_CHANGE","CREATE_LDAP","getAlternateLink","linkLabel","React","AlternateLinkLayout","className","alternateLinkPath","alternateLinkLabel","handleClick","trackEvent","onWindowResize","throttle","innerWidth","onWindowFocus","_passwordInput$curren","useEffect","onBackButtonClick","handleHeaderBackButtonOnClick","alternateLink","match","redirectUserToDefaultTeam","addEventListener","getWasLoggedIn","newSearchParam","set","SESSION_EXPIRED","replace","removeEventListener","LoadingScreen","preSubmit","e","newQuery","currentLoginId","value","currentPassword","trim","toLowerCase","t","msgId","ldapUsername","submit","async","token","_ref3","error","loginError","login","server_error_id","length","encodeURIComponent","message","postSubmit","loadMe","params","inviteToken","inviteId","data","team","addUserToTeamFromInvite","finishSignin","setCSRFFromCookie","setWasNotifiedOfLogIn","name","team_id","getMessageSubtitle","Markdown","options","mentionHighlight","LoginMfa","onSubmit","Route","path","render","DesktopAuthToken","onLogin","classNames","alt","src","Client4","getBrandImageUrl","onError","handleBrandImageError","tabIndex","AlertBanner","_alertBanner$onDismis","Input","ref","containerClassName","type","inputSize","SIZE","LARGE","onChange","_ref4","target","placeholder","getInputPlaceholder","_loginPlaceholders$","loginPlaceholders","lastIndex","slice","join","disabled","autoFocus","PasswordInput","_ref5","ExternalLink","location","Link","to","SaveButton","extraClasses","saving","savingMessage","column","getExternalLoginOptions","externalLoginOptions","url","getOAuthRoute","icon","LoginGitlabIcon","label","style","color","borderColor","LoginGoogleIcon","EntraIdIcon","LoginOpenIDIcon","getUrl","LockIcon","map","option","ExternalLoginButton","Object","assign","key","direction","ColumnLayout","getContent","Svg","props","_props$width","_props$height","width","toString","height","viewBox","fill","xmlns","clipPath","cx","cy","rx","ry","fillOpacity","d","stroke","strokeOpacity","strokeWidth","strokeLinecap","transform","strokeLinejoin","fillRule","clipRule","propTypes","_pt","subtitle","setToken","setSaving","handleSaveButtonOnClick","SVGElement","ShieldWithCheckmarkSVG","extraContent","onEnterKeyDown","isRequired"],"sourceRoot":""}

VaKeR 2022