{"version":3,"file":"static/js/160.eb1e6e1a.chunk.js","mappings":"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","sources":["session_storage.js","pages/SignIn.jsx","components/Footer.jsx","components/Header.jsx","components/Page.jsx"],"sourcesContent":["const LOGIN_PATH_KEY = 'login_path';\nconst USER_LOGIN_KEY = 'user_login';\n\nexport const setLoginPath = (url) => {\n window.sessionStorage.setItem(LOGIN_PATH_KEY, url);\n};\n\nexport const getLoginPath = () => {\n let loginPath = window.sessionStorage.getItem(LOGIN_PATH_KEY);\n if (!loginPath) {\n // At a minimum if we don't know where to redirect to just go to \"/\" login page route.\n loginPath = '/';\n }\n return loginPath;\n};\n\nexport const setUserLogin = (login) => {\n window.sessionStorage.setItem(USER_LOGIN_KEY, login);\n};\n\nexport const getUserLogin = () => {\n const userLogin = window.sessionStorage.getItem(USER_LOGIN_KEY);\n return userLogin ? userLogin : '';\n};\n","import React, { useEffect, useRef, useState } from 'react';\nimport { Link, useHistory, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport {\n KitButton,\n KitFlexCol,\n KitFlexRow,\n KitFlexRowCentered,\n KitFlexRowEnd,\n KitLink,\n KitModal,\n KitRadio,\n KitSpinner,\n KitInput,\n KitForm,\n KitUtilCommon,\n KitUtilLocale,\n KitLocalePicker,\n ThemeConstants,\n} from '@chargepoint/cp-toolkit';\nimport Page from '../components/Page';\nimport { setLoginPath, setUserLogin } from '../session_storage';\nimport utils from '../common/utils';\nimport banner from '../images/web-signup-header-min.png';\nimport localStorage from '../localStorage';\n\nconst BannerImg = styled.img`\n max-width: 100%;\n margin-bottom: ${ThemeConstants.spacing.l}rem;\n`;\n\nconst Title = styled.h1`\n text-align: center;\n font-weight: normal;\n margin-bottom: ${ThemeConstants.spacing.m}rem;\n`;\n\nconst StyledForm = styled.form`\n min-width: 476px;\n @media all and (max-width: ${ThemeConstants.breakpoints.md}px) {\n min-width: 300px;\n }\n`;\n\nconst CenteredDiv = styled.div`\n text-align: center;\n`;\n\nconst ForgotFlexRow = styled(KitFlexRow)`\n margin-top: ${ThemeConstants.spacing.s}rem;\n`;\n\nconst SubmitFlexRowCentered = styled(KitFlexRowCentered)`\n margin-top: ${ThemeConstants.spacing.xl}rem;\n margin-bottom: ${ThemeConstants.spacing.xl}rem;\n`;\n\nconst SubmitButton = styled(KitButton)`\n min-width: 120px;\n`;\n\nconst ValidatedUsernameDiv = styled.div`\n display: ${(props) => (props.show ? 'block' : 'none')};\n margin-bottom: ${ThemeConstants.spacing.m}rem;\n`;\n\nconst SignupLine = styled.div`\n margin-top: ${ThemeConstants.spacing.m}rem;\n`;\n\nconst SignInState = {\n username_validation: 0,\n username_validating: 1,\n username_validation_error: 2,\n username_validation_success: 3,\n password_validating: 4,\n password_validation_error: 5,\n password_validation_success: 6,\n select_usernames: 7,\n};\nObject.freeze(SignInState);\n\nfunction SignIn() {\n const { t, i18n } = useTranslation();\n const history = useHistory();\n const usernameQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'username');\n const [username, setUsername] = useState(usernameQueryParam ? usernameQueryParam : '');\n const [password, setPassword] = useState('');\n const [selectUsernames, setSelectUsernames] = useState([]);\n const [selectedUsernameIndex, setSelectedUsernameIndex] = useState(0);\n const [signInState, setSignInState] = useState(SignInState.username_validation);\n const [lastErrorMessage, setLastErrorMessage] = useState('');\n const [localePickerResult, setLocalePickerResult] = useState(null);\n const usernameRef = useRef(null);\n const passwordRef = useRef(null);\n const { search } = useLocation()\n\n useEffect(() => {\n const subdomain = utils.getSubdomain();\n const regionCode = KitUtilLocale.getRegionCodeForSSOSubdomain(t, subdomain);\n const defaultLocaleCode = KitUtilLocale.getDefaultLocaleCodeForRegionCode(t, regionCode);\n const localeCode = localStorage.getLocaleCode(defaultLocaleCode);\n setLocalePickerResult(KitLocalePicker.getKitLocalePickerResult(t, regionCode, localeCode));\n }, [t, setLocalePickerResult]);\n\n useEffect(() => {\n let loginPath = window.location.pathname;\n const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n if (redirectQueryParam) {\n loginPath += KitUtilCommon.getQueryString({\n redirect: redirectQueryParam,\n });\n }\n setLoginPath(loginPath);\n }, []);\n\n useEffect(() => {\n if (signInState === SignInState.username_validation) {\n // Initial state should set focus to username input\n usernameRef.current.focus();\n }\n if (signInState === SignInState.username_validation_success) {\n // Username is validated... set focus to password input\n passwordRef.current.focus();\n }\n }, [signInState]);\n\n const changeUsernameClicked = () => {\n setSignInState(SignInState.username_validation);\n };\n\n const displayUnknownError = () => {\n const unknown = t('error_ids.unknown');\n setLastErrorMessage(\n t('error_with_message', {\n message: unknown,\n })\n );\n };\n\n const checkForAlreadyLoggedInUser = async () => {\n try {\n const requestHeaders = utils.getCommonRequestHeaders(i18n);\n\n let apiUrl = utils.makeSsoApiUrl('/v1/user/current');\n const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n if (redirectQueryParam) {\n apiUrl += `?redirect=${encodeURIComponent(redirectQueryParam)}`;\n }\n\n const response = await fetch(apiUrl, {\n method: 'GET',\n credentials: 'include',\n headers: requestHeaders,\n });\n const data = await response.json();\n\n const { hasOwnProperty } = Object.prototype;\n\n switch (response.status) {\n case 200:\n if (hasOwnProperty.call(data, 'challenge_response')) {\n const { challenge_response: challengeResponse } = data;\n if (challengeResponse === 'LANDING_PAGE_REDIRECT') {\n window.location = data.redirect_url;\n }\n }\n break;\n default:\n // Just drop to the SSO login\n break;\n }\n } catch (err) {\n console.error(`Unknown Error: ${err}`);\n }\n };\n\n const validateUsername = async () => {\n try {\n const requestHeaders = utils.getCommonRequestHeaders(i18n);\n\n const requestBody = {\n username,\n timezone_offset: new Date().getTimezoneOffset(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n\n const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n if (redirectQueryParam) {\n requestBody.redirect = redirectQueryParam;\n }\n\n const apiUrl = utils.makeSsoApiUrl('/v1/user/login');\n const response = await fetch(apiUrl, {\n method: 'POST',\n credentials: 'include',\n headers: requestHeaders,\n body: JSON.stringify(requestBody),\n });\n const data = await response.json();\n\n const { hasOwnProperty } = Object.prototype;\n\n switch (response.status) {\n case 200:\n if (hasOwnProperty.call(data, 'challenge_response')) {\n setUserLogin(username);\n const { challenge_response: challengeResponse } = data;\n if (challengeResponse === 'PASSWORD') {\n setSignInState(SignInState.username_validation_success);\n } else if (\n challengeResponse === 'IDP_LOGIN' ||\n challengeResponse === 'NOSLET_REDIRECT'\n ) {\n window.location = data.redirect_url;\n } else {\n displayUnknownError();\n console.error(`Unexpected challenge response: ${challengeResponse}`);\n setSignInState(SignInState.username_validation_error);\n }\n } else {\n setLastErrorMessage('Error validating user: Missing challenge response');\n setSignInState(SignInState.username_validation_error);\n }\n break;\n default:\n if (hasOwnProperty.call(data, 'error_message')) {\n // Returned error_message will be localized by SSO backend\n setLastErrorMessage(data.error_message);\n } else {\n setLastErrorMessage(\n t('error_with_message', {\n message: `[${response.status}] ${response.statusText}`,\n })\n );\n }\n setSignInState(SignInState.username_validation_error);\n break;\n }\n } catch (err) {\n displayUnknownError();\n console.error(`Unknown Error: ${err}`);\n setSignInState(SignInState.username_validation_error);\n }\n };\n\n useEffect(() => {\n async function performStartupChecks() {\n await checkForAlreadyLoggedInUser();\n\n if (usernameQueryParam) {\n // This will skip directly to password entry as the username query param is present.\n // IMPORTANT: Needs to call validateUsername in the edge case this user account is in a separate region/noslet.\n // See NOSLET_REDIRECT challenge response!!!\n setSignInState(SignInState.username_validating);\n await validateUsername();\n }\n }\n\n performStartupChecks();\n }, []);\n\n const attemptLogin = async () => {\n try {\n const requestHeaders = utils.getCommonRequestHeaders(i18n);\n\n const requestBody = {\n username,\n password,\n timezone_offset: new Date().getTimezoneOffset(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n\n const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n if (redirectQueryParam) {\n requestBody.redirect = redirectQueryParam;\n }\n\n const apiUrl = utils.makeSsoApiUrl('/v1/user/login');\n const response = await fetch(apiUrl, {\n method: 'POST',\n credentials: 'include',\n headers: requestHeaders,\n body: JSON.stringify(requestBody),\n });\n const data = await response.json();\n\n const { hasOwnProperty } = Object.prototype;\n\n switch (response.status) {\n case 200:\n if (hasOwnProperty.call(data, 'challenge_response')) {\n const { challenge_response: challengeResponse } = data;\n if (challengeResponse === 'SELECT_USERNAMES') {\n const { data: usernamesData } = data;\n if (usernamesData.length > 0) {\n setSelectUsernames(usernamesData);\n setUsername(usernamesData[0]);\n setSignInState(SignInState.select_usernames);\n } else {\n displayUnknownError();\n console.error('SELECT_USERNAMES challenge missing usernames');\n setSignInState(SignInState.username_validation_error);\n }\n } else if (challengeResponse === 'NOSLET_REDIRECT') {\n window.location = data.redirect_url;\n } else if (challengeResponse === 'LANDING_PAGE_REDIRECT') {\n if (data.redirect_url.indexOf(window.location.origin) !== -1) {\n history.push(data.redirect_url.replace(window.location.origin, ''));\n } else {\n window.location = data.redirect_url;\n }\n } else {\n displayUnknownError();\n console.error(`Unexpected challenge response: ${challengeResponse}`);\n setSignInState(SignInState.username_validation_error);\n }\n } else if (hasOwnProperty.call(data, 'redirect_url')) {\n setSignInState(SignInState.password_validation_success);\n window.location = data.redirect_url;\n } else {\n setLastErrorMessage('Missing redirect_url');\n setSignInState(SignInState.password_validation_error);\n }\n break;\n default:\n if (hasOwnProperty.call(data, 'error_message')) {\n // Returned error_message will be localized by SSO backend\n setLastErrorMessage(data.error_message);\n } else {\n setLastErrorMessage(\n t('error_with_message', {\n message: `[${response.status}] ${response.statusText}`,\n })\n );\n }\n setSignInState(SignInState.password_validation_error);\n break;\n }\n } catch (err) {\n displayUnknownError();\n console.error(`Unknown Error: ${err}`);\n setSignInState(SignInState.password_validation_error);\n }\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n switch (signInState) {\n case SignInState.username_validation:\n case SignInState.username_validation_error:\n setSignInState(SignInState.username_validating);\n validateUsername();\n break;\n case SignInState.username_validation_success:\n case SignInState.password_validation_error:\n setSignInState(SignInState.password_validating);\n attemptLogin();\n break;\n default:\n break;\n }\n };\n\n const [signupText, signupLink] = utils.getSignupLinkWithText(search, localePickerResult)\n\n let buttonDisabled = false;\n let buttonTitle = t('next');\n if (signInState >= SignInState.username_validation_success) {\n buttonTitle = t('login_button');\n }\n\n if (\n signInState === SignInState.username_validating ||\n signInState === SignInState.password_validating\n ) {\n buttonDisabled = true;\n buttonTitle = ;\n }\n\n const forgotUsernamePath = '/forgot-username';\n\n let forgotPasswordPath = '/forgot-password';\n forgotPasswordPath += KitUtilCommon.getQueryString({\n username,\n });\n\n let usernameError;\n if (signInState === SignInState.username_validation_error) {\n usernameError = lastErrorMessage;\n }\n\n let passwordError;\n if (signInState === SignInState.password_validation_error) {\n passwordError = lastErrorMessage;\n }\n\n let selectUsernameModal;\n if (signInState === SignInState.select_usernames) {\n const radios = [];\n\n const onSelectUsername = (i) => {\n setSelectedUsernameIndex(i);\n setUsername(selectUsernames[i]);\n };\n\n for (let i = 0; i < selectUsernames.length; i += 1) {\n const uname = selectUsernames[i];\n const radioId = `radio_${uname}`;\n radios.push(\n onSelectUsername(i)}\n />\n );\n }\n\n const onContinue = () => {\n setSelectedUsernameIndex(0);\n setSignInState(SignInState.password_validating);\n attemptLogin();\n };\n\n selectUsernameModal = (\n \n \n {t('multiple_usernames_found')}\n \n \n

{t('select_username_to_continue_logging_in')}

\n
{radios}
\n
\n \n \n \n {t('continue')}\n \n \n \n
\n );\n }\n\n return (\n \n \n \n \n \n {t('login_title')}\n \n \n = SignInState.username_validation_success ? 1 : 0}\n >\n {username}\n \n \n {t('change')}\n \n \n \n {signInState < SignInState.username_validation_success && (\n <>\n \n setUsername(e.target.value)}\n isError={!!usernameError}\n />\n \n \n \n {t('forgot_username')}\n \n \n \n )}\n {signInState >= SignInState.username_validation_success && (\n <>\n \n setPassword(e.target.value)}\n isError={!!passwordError}\n />\n \n \n \n {t('forgot_password')}\n \n \n \n )}\n \n \n {buttonTitle}\n \n \n \n \n {signupText}{' '}\n \n {t('sign_up')}\n \n \n \n \n \n \n {selectUsernameModal}\n \n );\n}\n\nexport default SignIn;\n","import React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport {\n KitFlexRow,\n KitIcon,\n KitLink,\n KitLocalePicker,\n KitUtilCommon,\n KitUtilLocale,\n ThemeColors as colors,\n ThemeConstants,\n} from '@chargepoint/cp-toolkit';\nimport localStorage from '../localStorage';\nimport utils from '../common/utils';\n\nconst { breakpoints, fontSize, spacing } = ThemeConstants;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n @media all and (max-width: ${breakpoints.md}px) {\n flex-direction: column;\n justify-content: center;\n }\n align-items: center;\n background-color: ${colors.gray_10};\n padding: ${spacing.m}rem;\n & * {\n font-size: ${fontSize.text_14}rem;\n }\n`;\n\nconst Copyright = styled.div`\n order: 0;\n @media all and (max-width: ${breakpoints.md}px) {\n order: 1;\n }\n`;\n\nconst Links = styled(KitFlexRow)`\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n order: 1;\n @media all and (max-width: ${breakpoints.md}px) {\n order: 0;\n }\n & > * {\n margin-left: ${spacing.m}rem;\n }\n & > *:first-child {\n margin-left: 0;\n }\n`;\n\nconst LocalePickerContainer = styled(KitFlexRow)`\n align-items: center;\n`;\n\nconst LanguageIcon = styled(KitIcon)`\n margin-right: ${spacing.xs}rem;\n`;\n\nfunction Footer() {\n const history = useHistory();\n const { t, i18n } = useTranslation();\n const [showLocalePicker, setShowLocalePicker] = useState(false);\n const [localePickerResult, setLocalePickerResult] = useState(null);\n const [supportedLocales, setSupportedLocales] = useState(undefined);\n\n useEffect(() => {\n const subdomain = utils.getSubdomain();\n const regionCode = KitUtilLocale.getRegionCodeForSSOSubdomain(t, subdomain);\n const defaultLocaleCode = KitUtilLocale.getDefaultLocaleCodeForRegionCode(t, regionCode);\n const localeCode = localStorage.getLocaleCode(defaultLocaleCode);\n setLocalePickerResult(KitLocalePicker.getKitLocalePickerResult(t, regionCode, localeCode));\n }, [t, setLocalePickerResult]);\n\n const footerCopyright = t('footer_copyright', {\n year: new Date().getFullYear(),\n company_name: window.cp_constants.STRING_COMPANY_NAME,\n });\n\n const onLocaleChanged = (result) => {\n setShowLocalePicker(false);\n\n localStorage.setLocaleCode(result.localeCode);\n\n const supportedLocale = KitUtilLocale.getSupportedLocale(result.nosCookieLocale);\n\n i18n.changeLanguage(supportedLocale);\n\n const currentSubdomain = utils.getSubdomain();\n if (currentSubdomain !== result.ssoSubdomain) {\n // Switch subdomain aka NOSLETs\n const queryParamsObject = KitUtilCommon.getQueryObject(window.location.search);\n queryParamsObject.locale = result.localeCode; // Forcing locale to be loaded on new subdomain via query param!!!\n // IMPORTANT: If there's a username query param it should be deleted before redirecting to another NOSLET otherwise\n // backend could force a redirect back to the users proper region NOSLET. Ping pong redirection is bad.\n delete queryParamsObject.username;\n const redirectTo = `${window.location.protocol}//${\n result.ssoSubdomain\n }.${utils.getDomain()}/${KitUtilCommon.getQueryString(queryParamsObject)}`;\n window.location = redirectTo;\n } else {\n // IMPORTANT:\n // Need to remove the \"locale\" query param and refresh page.\n // Otherwise, that \"locale\" query param will take priority over users selected region/locale.\n let path = window.location.pathname;\n const redirectQueryParam = KitUtilCommon.getQueryParam(window.location.search, 'redirect');\n if (redirectQueryParam) {\n path += KitUtilCommon.getQueryString({\n redirect: redirectQueryParam,\n });\n }\n history.push(path);\n }\n };\n\n let corpAboutUrl;\n let corpContactUrl;\n let privacyPolicyUrl;\n if (localePickerResult) {\n corpAboutUrl = `https://${localePickerResult.corporateUrl}/about`;\n corpContactUrl = `https://${localePickerResult.corporateUrl}/support`;\n privacyPolicyUrl = utils.makePrivacyPolicyUrl(localePickerResult);\n }\n\n let californiaPrivacyNoticeLink;\n if (localePickerResult && localePickerResult.displayCaliforniaPrivacy) {\n const policyUrl = utils.makeCaliforniaPrivacyUrl(localePickerResult);\n californiaPrivacyNoticeLink = (\n \n {t('california_privacy_notice')}\n \n );\n }\n\n const currentLocalizedLanguageName = localePickerResult?.localizedLanguageName || 'English';\n const localePickerAriaLabel = t('footer_language_picker_link_aria_label', {\n language: currentLocalizedLanguageName,\n });\n\n const getSupportedLocales = () => {\n return fetch(\n `https://account.${window.cp_constants.ENV_DOMAIN}/account/v1/metadata/languages`,\n {\n method: 'GET',\n }\n )\n .then((response) => {\n return response.json();\n })\n .then((languages) => {\n return languages.filter((l) => l.locale !== '').map((l) => l.locale);\n });\n };\n\n const openLocalePicker = async () => {\n try {\n setSupportedLocales(await getSupportedLocales());\n setShowLocalePicker(true);\n } catch (err) {\n console.error(err);\n }\n };\n\n return (\n \n {footerCopyright}\n \n \n \n \n {currentLocalizedLanguageName}\n \n \n \n {t('about_us')}\n \n \n {t('contact_us')}\n \n \n {t('privacy_policy')}\n \n {californiaPrivacyNoticeLink}\n \n setShowLocalePicker(false)}\n onSelect={onLocaleChanged}\n t={t}\n supportedLocales={supportedLocales}\n />\n \n );\n}\n\nexport default Footer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport { ThemeConstants, ThemeColors, KitFlexRow, CPLogo } from '@chargepoint/cp-toolkit';\n\nconst Container = styled(KitFlexRow)`\n justify-content: flex-start;\n align-items: center;\n background-color: ${ThemeColors.gray_10};\n height: 64px;\n padding-left: ${ThemeConstants.spacing.m}rem;\n padding-right: ${ThemeConstants.spacing.m}rem;\n`;\n\nfunction Header() {\n const { t } = useTranslation();\n return (\n \n \n \n );\n}\n\nexport default Header;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { KitPage, KitAppLayout } from '@chargepoint/cp-toolkit';\nimport Footer from './Footer';\nimport Header from './Header';\n\n// eslint-disable-next-line react/prop-types\nfunction Page({ title, children }) {\n const { i18n } = useTranslation();\n\n return (\n \n \n
\n \n {children}\n \n