{"version":3,"sources":["containers/RexelLogin/constants.js","containers/RexelLogin/actions.js","containers/RexelLogin/reducer.js","containers/RexelLogin/selectors.js","containers/RexelLogin/saga.js","containers/RexelLogin/LoginProvider.js"],"names":["__webpack_require__","r","__webpack_exports__","d","LOGIN_REQUEST","LOGIN_SUCCESS","LOGIN_ERROR","loginRequest","loginSuccess","loginError","_constants__WEBPACK_IMPORTED_MODULE_0__","values","settingsApp","type","response","error","initialState","status","undefined","statusDetails","loginReducer","state","arguments","length","action","Object","_codebuild_output_src3729189661_src_Rexel_Online_Advantage_Lori_FED_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_0__","message","user","selectLoginState","selectStatus","reselect__WEBPACK_IMPORTED_MODULE_0__","_reducer__WEBPACK_IMPORTED_MODULE_1__","login","createSelector","localstate","requestLogin","loginSaga","_values$values","username","password","webstore","loginPagePath","logoutPagePath","userData","pageQueryString","defaultReturnPath","returnUrl","cleanQueryString","trimmedQueryString","oldPassword","redirectOnIncompleteProfile","redirectQS","_codebuild_output_src3729189661_src_Rexel_Online_Advantage_Lori_FED_node_modules_babel_preset_react_app_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default","a","wrap","_context","prev","next","put","title","abrupt","showLoading","call","api","post","JSON","stringify","sent","data","errorDescription","formatToken","qs","parse","history","location","search","replace","ignoreQueryPrefix","pathname","keys","isUrlAbsolute","removeProperty","apiSetAuthorizationToken","token","isProfileValid","forcePasswordChange","storeToken","loginUseSessionStorage","setUser","push","concat","_codebuild_output_src3729189661_src_Rexel_Online_Advantage_Lori_FED_node_modules_babel_preset_react_app_node_modules_babel_runtime_helpers_esm_objectSpread__WEBPACK_IMPORTED_MODULE_1__","t0","apiErrorHandler","hideLoading","finish","stop","_marked","_context2","takeLatest","_marked2","LoginForm","LoadAsync","Promise","all","e","then","bind","ProfileProvider","LoginProvider","props","lpRef","useRef","useEffect","hash","timer1","setTimeout","current","scrollIntoView","clearTimeout","currentUser","currentUserTemp","userOptions","_props$theme$settings","theme","userLoggedIn","initialValues","react__WEBPACK_IMPORTED_MODULE_1___default","createElement","className","id","ref","disableMeta","react_helmet__WEBPACK_IMPORTED_MODULE_6___default","name","content","siteName","children","React","Children","map","childElement","cloneElement","assign","defaultProps","mapStateToProps","createStructuredSelector","selectCurrentUser","selectCurrentUserTemp","selectUserOptions","withConnect","connect","dispatch","onSubmitForm","withReducer","injectReducer","key","reducer","withSaga","injectSaga","saga","compose","withRouter","withTheme"],"mappings":"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","file":"static/js/loginProvider.a0671595.chunk.js","sourcesContent":["/**\n * Login constants\n */\n\nexport const LOGIN_REQUEST = 'local/RexelLogin/LOGIN_REQUEST';\nexport const LOGIN_SUCCESS = 'local/RexelLogin/LOGIN_SUCCESS';\nexport const LOGIN_ERROR = 'local/RexelLogin/LOGIN_ERROR';\n","/**\n * Login actions\n */\n\nimport { LOGIN_REQUEST, LOGIN_SUCCESS, LOGIN_ERROR } from './constants';\n\n/**\n * Login request - start the request saga\n *\n * @returns {object} An action object with a type of LOGIN_REQUEST\n */\nexport function loginRequest(values, settingsApp) {\n return {\n type: LOGIN_REQUEST,\n values,\n settingsApp,\n };\n}\n\n/**\n * Dispatched when loginRequest succeeds by the request saga\n *\n * @param {object} response The response\n * @returns {object} An action object with a type of LOGIN_SUCCESS and the response\n */\nexport function loginSuccess(response) {\n return {\n type: LOGIN_SUCCESS,\n response,\n };\n}\n\n/**\n * Dispatched when loginRequests fails\n *\n * @param {object} error The error as received from the API\n * @returns {object} An action object with a type of LOGIN_ERROR and the error\n */\nexport function loginError(error) {\n return {\n type: LOGIN_ERROR,\n error,\n };\n}\n","/**\n * Login reducer\n */\n\nimport { LOGIN_REQUEST, LOGIN_SUCCESS, LOGIN_ERROR } from './constants';\n\nexport const initialState = {\n status: undefined,\n statusDetails: {},\n};\n\nfunction loginReducer(state = initialState, action) {\n switch (action.type) {\n case LOGIN_REQUEST:\n return {\n ...state,\n status: 'loading',\n statusDetails: {},\n };\n case LOGIN_SUCCESS:\n return {\n ...state,\n status: 'success',\n statusDetails: {\n message: 'Login successful.',\n },\n user: action.response,\n };\n case LOGIN_ERROR:\n return {\n ...state,\n status: 'error',\n statusDetails: action.error,\n };\n default:\n return state;\n }\n}\n\nexport default loginReducer;\n","/**\n * Login selectors\n */\nimport { createSelector } from 'reselect';\nimport { initialState } from './reducer';\n\n/**\n * Container state\n */\nconst selectLoginState = state => state.login || initialState;\n\n/**\n * Fetch state\n */\nconst selectStatus = () =>\n createSelector(\n selectLoginState,\n localstate => ({\n status: localstate.status,\n statusDetails: localstate.statusDetails,\n })\n );\n\nexport { selectLoginState, selectStatus };\n","/**\n * Login saga\n */\n\nimport { call, put, takeLatest } from 'redux-saga/effects';\nimport { showLoading, hideLoading } from 'react-redux-loading-bar';\nimport qs from 'qs';\nimport {\n api,\n apiErrorHandler,\n apiSetAuthorizationToken,\n} from '_platform/src/utils/request'; // _platform\nimport { formatToken, storeToken } from '_platform/src/utils/tokenUtils'; // _platform\nimport { isUrlAbsolute, removeProperty } from '_platform/src/utils/utilities'; // _platform\nimport history from '_platform/src/utils/history'; // _platform\nimport { LOGIN_REQUEST } from './constants';\nimport { /*loginSuccess,*/ loginError } from './actions';\nimport { setUser } from '_platform/src/containers/App/actions'; // _platform\n\n/**\n * Request login\n */\nexport function* requestLogin(values) {\n const { username, password, webstore } = values.values;\n const { settingsApp } = values;\n const { loginPagePath, logoutPagePath } = settingsApp;\n\n if (!username || !password || !webstore) {\n yield put(\n loginError({\n title: 'Login error',\n message: 'Missing username, password or webstore',\n })\n );\n return; // Terminate the request\n }\n\n try {\n yield put(showLoading());\n const response = yield call(() =>\n api.post(\n '/Authentication/v1/Rexel',\n JSON.stringify({ username, password, webstore })\n )\n );\n /*\n Expected response status codes:\n * Successful login:\n 200, data: object with token details\n * Login Failed:\n 400, message: \"An error occurred trying to login user.\" (invalid user name) or \"Login failed.\" (wrong password)\n Incorrect user or password.\n * 2FA error:\n 400, message: \"2-Factor authentication has not been implemented\"\n * User is not allowed to login:\n 403, message: \"Not allowed.\"\n Internal backend auth functionality.\n * User is locked out:\n 403, message: \"Locked out.\"\n Too many failed attempts - temporary lockout.\n * User is not Authorised:\n 403, message: \"Unauthorised.\"\n The user has been prevented from logging in by an admin\n */\n\n // Make sure all Rexel users have 'forcePasswordChange' disabled.\n\n if (response.data && response.data.errorDescription) {\n yield put(loginError(response.data.errorDescription));\n } else {\n // Format user's token data\n const userData = formatToken(response.data);\n\n //yield put(loginSuccess(userData));\n\n // Get the query string\n // Use lowercaseKeys to make the object keys predictable\n const pageQueryString = qs.parse(\n history.location.search.replace(/returnUrl/gi, 'returnUrl'),\n {\n ignoreQueryPrefix: true,\n }\n );\n\n const defaultReturnPath =\n history.location.pathname !== loginPagePath &&\n history.location.pathname !== logoutPagePath &&\n (Object.keys(pageQueryString).length === 0 ||\n (pageQueryString.returnUrl &&\n Object.keys(pageQueryString).length > 1))\n ? history.location.pathname // Return the user to the same path they came from\n : '/';\n\n // Set the returnUrl from the query string, otherwise go to the home page\n const returnUrl =\n pageQueryString.returnUrl && !isUrlAbsolute(pageQueryString.returnUrl)\n ? pageQueryString.returnUrl // Note that the properties will be lowercase\n : defaultReturnPath;\n\n // Original queryString but sanitised\n const cleanQueryString = qs.stringify(pageQueryString);\n\n // Remove returnUrl from querystring and keep the remainder\n const trimmedQueryString = qs.stringify(\n removeProperty(pageQueryString, 'returnUrl')\n );\n\n // Set API Authorization token to be used on subsequent calls\n apiSetAuthorizationToken(userData.token);\n\n // Check if the user has a valid profile\n if (\n response.data.isProfileValid === true &&\n response.data.forcePasswordChange === false\n ) {\n // Store the authentication info\n storeToken(userData, settingsApp.loginUseSessionStorage);\n\n // Put authentication info into App state\n yield put(setUser(userData));\n\n // Redirect to home, or to returnUrl value. Pass on any remaining query string values\n yield call(history.push, {\n pathname: returnUrl,\n search: trimmedQueryString && `?${trimmedQueryString}`,\n });\n } else {\n // Save the current password in state as we're immediately asking the\n // user to reset it, and removing it from state straight after\n const oldPassword = response.data.forcePasswordChange\n ? { oldPassword: password }\n : null;\n\n // Put authentication info into App state as currentUserTemp until the profile is complete\n yield put(\n setUser(userData, {\n forcePasswordChange: response.data.forcePasswordChange,\n isProfileValid: response.data.isProfileValid,\n ...oldPassword,\n })\n );\n\n const { redirectOnIncompleteProfile } = settingsApp;\n\n // Check if we should redirect to another page if the profile is incomplete\n // Include any query strings that may be present\n if (\n redirectOnIncompleteProfile &&\n response.data.forcePasswordChange === false\n ) {\n // Remove returnUrl if it matches redirectOnIncompleteProfile path\n const redirectQS =\n pageQueryString.returnUrl === redirectOnIncompleteProfile\n ? trimmedQueryString\n : cleanQueryString;\n\n yield call(history.push, {\n pathname: redirectOnIncompleteProfile,\n search: redirectQS && `?${redirectQS}`,\n });\n }\n }\n }\n } catch (err) {\n const error = apiErrorHandler(err);\n\n yield put(\n loginError(\n error && error.message === 'Locked out.'\n ? { ...error, message: 'Too many failed attempts - locked out.' }\n : error\n )\n );\n } finally {\n yield put(hideLoading());\n }\n}\n\n/**\n * Default saga managers the watcher lifecycle\n */\nexport default function* loginSaga() {\n // Specify the constant to watch and the saga generator function to call when one is triggered\n // It returns a task descriptor (just like a fork) so we can continue execution, and will be\n // automatically cancelled on unmount (unless the mode is set to DAEMON)\n // Specify as many yields (watchers) here as necessary\n yield takeLatest(LOGIN_REQUEST, requestLogin);\n}\n","/**\n * LoginProvider\n *\n * Usage:\n *\n * To use the default LoginForm component:\n * \n *\n * To use a custom LoginForm component, and optionally customise form label(s):\n * \n * \n * \n *\n * disableMeta prop can be used to disable Helmet from applying meta tags. This\n * is useful if this component is included on a page (or in the header) and not\n * in its own page container.\n */\n\n// Core imports\nimport React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\nimport { compose } from 'redux';\nimport { connect } from 'react-redux';\nimport { createStructuredSelector } from 'reselect';\n\n// Style, SEO and settings\nimport Helmet from 'react-helmet';\nimport { withTheme } from '@smooth-ui/core-sc';\n\n// Component features\nimport injectReducer from '_platform/src/utils/injectReducer'; // _platform\nimport injectSaga from '_platform/src/utils/injectSaga'; // _platform\nimport { loginRequest } from './actions';\nimport { selectStatus } from './selectors';\nimport reducer from './reducer';\nimport saga from './saga';\nimport {\n selectCurrentUser,\n selectCurrentUserTemp,\n selectUserOptions,\n} from '_platform/src/containers/App/selectors'; // _platform\n\nimport history from '_platform/src/utils/history'; // _platform\nimport LoadAsync from '_platform/src/utils/LoadAsync'; // _platform\nconst LoginForm = LoadAsync(\n () => import(/* webpackChunkName: \"loginForm\" */ './LoginForm') // _platform\n);\n\nconst ProfileProvider = LoadAsync(\n () =>\n import(\n /* webpackChunkName: \"profileProvider\" */ '_platform/src/containers/ProfileProvider/ProfileProvider'\n ) // _platform\n);\n\nconst key = 'login';\n\nconst LoginProvider = props => {\n const lpRef = useRef(null);\n useEffect(() => {\n // Scroll to the container, not needed for Firefox but is needed for Chrome/Safari\n if (props.location.hash === '#login') {\n const timer1 = setTimeout(() => {\n lpRef.current.scrollIntoView();\n }, 250); // Arbitrary value to give the app enough time to render everything even on slow connections\n\n return () => {\n clearTimeout(timer1);\n };\n }\n }, [props.location.hash]);\n\n const {\n currentUser,\n currentUserTemp,\n userOptions,\n theme: { settingsApp = {} },\n } = props;\n\n // Check if the user is logged in, or temporarily logged in.\n // If they are, hide the form.\n const userLoggedIn = !!currentUser.token || !!currentUserTemp.token || false;\n\n const initialValues = {};\n\n return (\n
\n {!props.disableMeta && (\n \n Login\n \n \n )}\n {!userLoggedIn &&\n (props.children ? (\n React.Children.map(props.children, childElement =>\n React.cloneElement(childElement, { ...props, initialValues })\n )\n ) : (\n \n ))}\n\n {/* The user is logged in, but their token is not in currentUser: their profile is incomplete */}\n {!!userLoggedIn &&\n !currentUser.token &&\n history.location.pathname !== settingsApp.redirectOnIncompleteProfile &&\n !userOptions.isProfileValid && }\n
\n );\n};\nLoginProvider.propTypes = {\n children: PropTypes.element,\n currentUser: PropTypes.object.isRequired,\n currentUserTemp: PropTypes.object.isRequired,\n disableMeta: PropTypes.bool,\n dispatch: PropTypes.func.isRequired,\n location: PropTypes.object.isRequired,\n onSubmitForm: PropTypes.func.isRequired,\n status: PropTypes.object.isRequired,\n theme: PropTypes.object,\n userOptions: PropTypes.object.isRequired,\n};\n\nLoginProvider.defaultProps = {\n children: undefined,\n disableMeta: false,\n theme: { settingsApp: {} },\n};\n\nfunction mapDispatchToProps(dispatch, props) {\n const settingsApp = (props.theme && props.theme.settingsApp) || {};\n return {\n onSubmitForm: values => dispatch(loginRequest(values, settingsApp)),\n dispatch,\n };\n}\n\nconst mapStateToProps = createStructuredSelector({\n currentUser: selectCurrentUser(),\n currentUserTemp: selectCurrentUserTemp(),\n status: selectStatus(),\n userOptions: selectUserOptions(),\n});\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n);\n\nconst withReducer = injectReducer({ key, reducer });\nconst withSaga = injectSaga({ key, saga });\n\nexport default compose(\n withRouter,\n withTheme,\n withReducer,\n withSaga,\n withConnect\n)(LoginProvider);\n"],"sourceRoot":""}