{"version":3,"sources":["img/undp-logo.svg","store.js","components/auth.js","components/common/appBar.js","components/common/menu.js","components/common/errorSnackbar.js","components/common/successSnackbar.js","components/common/base.js","routes.js","components/errorPage.js","App.js","serviceWorker.js","index.js","helpers/constants.js","reducers/error.js","reducers/loader.js","helpers/api/api.js","reducers/success.js","reducers/auth/session.js","helpers/api/meta.js","helpers/utils.js","reducers/user/info.js","components/common/loader.js","reducers/user/search.js","reducers/user/ldap.js"],"names":["module","exports","composeEnhancers","compose","history","createBrowserHistory","middlewares","thunk","store","createStore","combineReducers","error","ldap","loader","success","session","userSearch","userInfo","router","connectRouter","applyMiddleware","selectAllErrorsMapped","state","errorSelector","connect","dispatch","Component","component","rest","authorized","token","window","sessionStorage","render","location","to","pathname","from","messages","header","env","signin","signout","profile","useStyles","makeStyles","theme","appBar","transition","transitions","create","easing","sharp","duration","leavingScreen","color","backgroundColor","appBarShift","width","marginLeft","easeOut","enteringScreen","title","flex","link","textDecoration","img","height","fontSize","position","top","transform","props","classes","AppBar","className","clsx","elevation","Toolbar","Typography","variant","noWrap","src","logo","alt","Button","onClick","href","OPENID_CONNECT_FLOW","root","display","content","flexGrow","marginTop","spacing","contentShift","loading","withRouter","children","CssBaseline","drawerHeader","snackbarStyle","red","messageStyle","alignItems","fontWeight","iconStyle","opacity","marginRight","errors","clearError","id","errorToBeCleared","useState","open","setOpen","useEffect","length","map","index","Snackbar","key","anchorOrigin","vertical","horizontal","autoHideDuration","onClose","SnackbarContent","aria-describedby","style","message","userMessage","Alert","clearSnackbar","successSnackbarMessage","successSnackbarOpen","handleClose","severity","minWidth","withLayout","LandingPage","lazy","LoginToken","DirectLogin","LoginError","Home","NotFound","TBD","UserInfo","CreateUser","withLoader","fallback","callGetMe","exact","path","buttonGrid","justifyContent","button","margin","componentStack","displayError","updateDisplay","useHistory","Dialog","fullWidth","DialogTitle","Divider","DialogContent","DialogContentText","push","reload","maxHeight","overflowY","whiteSpace","toString","App","FallbackComponent","Error","ReactRouterRoute","Route","Boolean","hostname","match","ReactDOM","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","MAIN_COLOR","host","process","extension","issuer","CODES","code","description","TOP","action","errorsById","allErrors","R","saveError","saveAdditionalErrors","initialState","errorToBeAdded","response","status","type","handleError","errorId","data","logoutStarted","logout","finally","removeItem","logoutSuccess","errorReducer","updateState","loadingAction","loaderReducer","getCookie","name","cookieValue","cookie","cookies","split","i","trim","substring","decodeURIComponent","buildHeaders","authorize","extraHeaders","headers","Pragma","Authorization","authorizedGet","uri","params","options","opt","axios","get","authorizedPost","body","post","authorizedPatch","patch","select","join","normalizeExtension","selectUserInfo","getMe","login","getSearchResult","$top","$select","getUserInfo","userId","updateUserInfo","createUser","getLdap","uid","resetPassword","changeToActive","showSuccessSnackbar","successReducer","updateError","email","fullname","last_login","date_joined","role","saveMe","getMeSuccess","catch","setItem","signinSuccess","signinFailure","sessionReducer","startLoading","stopLoading","saveErrorMsg","call","meta","endpoint","inputs","tag","asyncSuccess","asyncFailure","failure","reducer","normalizeCode","list","concat","getUserName","identities","res","signInType","issuerAssignedId","parseExtension","obj","Object","keys","handleUndefined","field","validateEmail","test","rules","numeric","min","max","uppercase","lowercase","general","this","randomPassword","chars","Math","floor","random","password","charAt","sort","validatePassword","checkAccessAllowed","updateInfoFailure","info","callGetUserInfoStart","val","getInfoFailure","callUpdateUserInfoStart","userReducer","callResetPasswordStart","callSetActiveStart","backdrop","zIndex","drawer","CustomLoader","callSearchStart","value","searchFailure","callSearchClear","callGetLdap"],"mappings":"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","file":"static/js/main.3106998a.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/undp-logo.6d585856.svg\";","import { createStore, applyMiddleware, combineReducers, compose } from 'redux'\nimport thunk from 'redux-thunk'\nimport { createBrowserHistory } from 'history'\nimport { connectRouter } from 'connected-react-router'\nimport session from './reducers/auth/session'\nimport userSearch from './reducers/user/search'\nimport userInfo from './reducers/user/info'\nimport loader from './reducers/loader'\nimport error, * as errorSelector from './reducers/error'\nimport success from './reducers/success'\nimport ldap from './reducers/user/ldap'\n\nlet composeEnhancers = compose\nif (process.env.NODE_ENV !== 'production') {\n composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || composeEnhancers\n}\n\nconst reducers = (history) => combineReducers({\n error,\n ldap,\n loader,\n success,\n session,\n userSearch,\n userInfo,\n router: connectRouter(history),\n})\n\nexport const history = createBrowserHistory()\n\nconst middlewares = [thunk]\n\nconst store = createStore(\n reducers(history),\n composeEnhancers(\n applyMiddleware(...middlewares)\n )\n)\n\nexport default store\n\nexport const selectAllErrorsMapped = state => errorSelector.selectAllErrorsMapped(state.error);\n","import React from 'react'\nimport { Route, Redirect } from 'react-router-dom'\nimport { connect } from 'react-redux'\n\nconst Auth = ({component: Component, authorized, ...rest}) => {\n const { token } = window.sessionStorage\n\n return (\n \n (token) ? (\n \n ) : (\n \n )\n }\n />\n )\n}\n\nconst mapStateToProps = state => ({\n})\n\nconst mapDispatchToProps = dispatch => ({\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(Auth)","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport clsx from 'clsx'\nimport { connect } from 'react-redux'\nimport { \n AppBar,\n Button,\n Toolbar,\n Typography,\n makeStyles } from '@material-ui/core'\nimport logo from '../../img/undp-logo.svg'\nimport { OPENID_CONNECT_FLOW, env } from '../../helpers/constants'\nimport { signout } from '../../reducers/auth/session'\n\nconst messages = {\n header: 'United Nations Development Programme ' + env,\n signin: 'SignIn',\n signout: 'SignOut',\n profile: 'Profile',\n}\n\nconst drawerWidth = 280\n\nconst useStyles = makeStyles(theme => ({\n appBar: {\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n color: 'black',\n backgroundColor: '#F1F1F1'\n },\n appBarShift: {\n width: `calc(100% - ${drawerWidth}px)`,\n marginLeft: drawerWidth,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n title: {\n flex: 1,\n marginLeft: '10px',\n },\n link: {\n textDecoration: 'none', \n color: 'black',\n },\n img: {\n height: '60px',\n },\n header: {\n fontSize: '12px',\n position: 'absolute', \n top: '50%', \n transform: 'translate(-50%, -50%)',\n marginLeft: 150\n },\n}))\n\nconst CustomAppBar = (props) => {\n const { authorized, signout } = props\n const classes = useStyles()\n\n return (\n \n \n \n \n \"Logo\" \n {messages.header}\n \n \n { (authorized) ? \n \n : \n }\n \n \n )\n}\n\nconst mapStateToProps = state => ({\n authorized: state.session.authorized,\n})\n\nconst mapDispatchToProps = dispatch => ({\n signout: () => dispatch(signout()),\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(CustomAppBar)","import React from 'react'\nimport { withRouter } from 'react-router'\nimport clsx from 'clsx'\nimport { makeStyles } from '@material-ui/core/styles'\nimport CssBaseline from '@material-ui/core/CssBaseline'\nimport CustomAppBar from './appBar'\nimport { connect } from 'react-redux'\n\nconst drawerWidth = 280\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n },\n content: {\n flexGrow: 1,\n marginTop: theme.spacing(8),\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n marginLeft: -drawerWidth,\n },\n contentShift: {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginLeft: 0,\n },\n}))\n\nfunction Menu(props) {\n const { children } = props\n const classes = useStyles()\n\n return (\n
\n \n \n \n
\n { children }\n \n
\n )\n}\n\nconst mapStateToProps = state => ({\n loading: state.loader.loading,\n session: state.session,\n})\n\nexport default connect(\n mapStateToProps,\n null,\n)(withRouter(Menu))","import React, { useState, useEffect } from 'react';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport { red } from '@material-ui/core/colors';\n\nimport { connect } from 'react-redux';\nimport { errorToBeCleared } from '../../reducers/error';\nimport { selectAllErrorsMapped } from '../../store'; \n\nconst snackbarStyle = {\n backgroundColor: red[700],\n}\n\nconst messageStyle = {\n display: 'flex',\n alignItems: 'center',\n fontWeight: 'bold',\n}\n\nconst iconStyle = {\n fontSize: 20,\n opacity: 0.9,\n marginRight: '10px',\n}\n\nexport function ErrorSnackbar(props) {\n const { errors, clearError, children } = props;\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n errors.length == 0 ? setOpen(false) : setOpen(true);\n }, [errors]);\n\n return (\n
\n { children }\n {\n errors.map((error, index) => (\n { clearError(error.id); }}\n >\n \n \n {error.userMessage}\n \n }\n />\n \n )\n )\n }\n
\n );\n}\n\nconst mapStateToProps = state => ({\n errors: selectAllErrorsMapped(state),\n});\n\nconst mapDispatchToProps = dispatch => ({\n clearError: id => dispatch(errorToBeCleared(id)),\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(ErrorSnackbar);","import React from 'react';\nimport { clearSnackbar } from \"../../reducers/success\";\nimport { connect } from 'react-redux';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport MuiAlert from '@material-ui/lab/Alert';\n\n\nfunction Alert(props) {\n return ;\n }\n\n\nexport function SuccessSnackbar(props) {\n \n const { clearSnackbar, success, children } = props;\n\n const { successSnackbarMessage, successSnackbarOpen } = success;\n\n function handleClose() {\n clearSnackbar();\n }\n\n return (\n \n \n {(successSnackbarMessage)? successSnackbarMessage: 'Success !'}\n \n \n );\n}\n\nconst mapStateToProps = state => ({\n success: state.success,\n});\n\nconst mapDispatchToProps = dispatch => ({\n clearSnackbar: () => dispatch(clearSnackbar()),\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(SuccessSnackbar);","import React from 'react'\nimport CssBaseline from '@material-ui/core/CssBaseline'\nimport Menu from './menu'\nimport ErrorSnackbar from './errorSnackbar'\nimport SuccessSnackbar from './successSnackbar'\n\nconst withLayout = (Component) => {\n return () => (\n
\n \n \n \n \n \n \n \n
\n )\n}\n\nexport default withLayout","\nimport React, { Suspense, lazy, useEffect } from 'react'\nimport { Route, Switch } from 'react-router'\nimport { connect } from 'react-redux'\nimport Auth from './components/auth'\nimport CustomLoader from './components/common/loader'\nimport withLayout from './components/common/base'\nimport { callGetMe } from './reducers/auth/session'\n\nconst LandingPage = lazy(() => import('./components/landingPage'))\nconst LoginToken = lazy(() => import('./components/login'))\nconst DirectLogin = lazy(() => import('./components/login/directLogin'))\nconst LoginError = lazy(() => import('./components/login/error'))\nconst Home = lazy(() => import('./components/home'))\nconst NotFound = lazy(() => import('./components/common/notFound'))\nconst TBD = lazy(() => import('./components/common/tbd'))\nconst UserInfo = lazy(() => import('./components/userInfo'))\nconst CreateUser = lazy(() => import('./components/createUser'))\n\nfunction withLoader(Component) {\n return props => (\n } >\n \n \n )\n}\n\nconst Routes = (props) => {\n const { authorized, callGetMe } = props\n const { token } = window.sessionStorage\n\n useEffect(() => {\n if (token) {\n callGetMe()\n }\n }, [])\n\n return (\n \n \n \n \n \n \n \n \n \n \n\n \n \n )\n}\n\nconst mapStateToProps = state => ({\n authorized: state.session.authorized,\n})\n\nconst mapDispatchToProps = dispatch => ({\n callGetMe: () => dispatch(callGetMe()),\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(Routes)\n","import React, { useState } from 'react'\nimport { \n Button,\n Dialog,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Divider,\n makeStyles } from '@material-ui/core'\nimport { useHistory } from 'react-router-dom'\nimport { withRouter } from 'react-router'\n\nconst messages = {\n error: 'Oops! Something went wrong. Please choose a suitable option to proceed',\n return: 'Return',\n details: 'Load details',\n}\n\nconst useStyles = makeStyles(theme => ({ \n buttonGrid: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n button: {\n margin: theme.spacing(1),\n justifyContent: 'flex-end'\n },\n}))\n\nconst ErrorPage = (props) => {\n const classes = useStyles()\n const {componentStack, error} = props\n const [displayError, updateDisplay] = useState(false)\n let history = useHistory()\n\n return (\n
\n \n {\"Something Failed\"}\n \n \n \n {messages.error}\n \n
\n \n \n
\n {(displayError) ?\n
\n
\n {error && error.toString()}\n
\n {componentStack}\n
\n
: null}\n
\n \n
\n )\n};\n\nexport default withRouter(ErrorPage)\n\n\n","import React from 'react'\nimport { Provider } from 'react-redux'\nimport { ConnectedRouter } from 'connected-react-router'\nimport store, { history } from './store'\nimport Routes from './routes'\nimport { QueryParamProvider } from 'use-query-params'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\nimport ErrorBoundary from 'react-error-boundary'\nimport Error from './components/errorPage'\n\nexport default function App() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nReactDOM.render(, document.getElementById('root'))\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n","export const MAIN_COLOR = '#2D75B8'\n\nexport const host = process.env.REACT_APP_HOST\nexport const tenant = process.env.REACT_APP_TENANT\nexport const client_id = process.env.REACT_APP_CLIENT_ID\nexport const extension = process.env.REACT_APP_EXTENSION\nexport const issuer = process.env.REACT_APP_ISSUER\nexport const env = process.env.REACT_APP_ENV\n\nexport const OPENID_CONNECT_FLOW = 'https://login.microsoftonline.com/' +\n tenant + '/oauth2/v2.0/authorize?' +\n 'client_id=' + client_id + \n '&response_type=id_token' + \n '&redirect_uri=' + host + 'callback/' + \n '&nonce=defaultNonce' +\n '&scope=openid' + \n '&prompt=login' +\n '&response_mode=form_post'\n\nexport const CODES = [\n { code: 999, description: \"An error occured\"},\n { code: 100, description: \"Can't get access token from MS Graph\"},\n { code: 101, description: \"Permission denied: your role is not allowed to perform this action\"},\n { code: 102, description: \"JWT not valid\"},\n { code: 103, description: \"Token not found\"},\n { code: 104, description: \"Token not valid\"},\n]\n\nexport const EMPLOYEE_TYPE = [\n 'TA (Temporary Appointment)',\n 'FTA (Full Time Appointment)',\n 'PA (Permanent Appointment)',\n 'SCT (Service Contract)',\n 'SSA/IC (Special Service Agreement/Individual Contract)',\n 'UNV (UN Volunteers)',\n 'POI (Person Of Interest)'\n]\n\nexport const USER_TYPE = [\n 'GVT (EA Government)',\n 'AGY (EA Agency)',\n 'MPTF (EA MPTF Gateway)',\n 'UNEX (EA MPTF UNEX)'\n]\n\nexport const TOP = 30","import * as R from 'ramda'\nimport { logoutStarted, logoutSuccess} from './auth/session'\nimport { logout } from '../helpers/api/api'\n\nexport const NEW_ERROR = 'NEW_ERROR'\nexport const CLEAR_ERROR = 'CLEAR_ERROR'\n\nconst permissionDenied = ' - Permission denied.'\n\nconst clearError = ({ errorsById, allErrors }, action) => ({\n errorsById: R.dissoc(action.id, errorsById),\n allErrors: R.without([action.id], allErrors),\n})\n\nconst saveError = ({ errorsById, allErrors }, action) => ({\n errorsById: R.assoc(\n action.id,\n {\n id: action.id,\n userMessage: action.userMessage,\n error: R.path(['error', 'message'], action) || action.error,\n ...action.saveAdditionalErrors,\n },\n errorsById),\n allErrors: R.append(action.id, allErrors),\n})\n\nconst initialState = {\n allErrors: [],\n errorsById: {},\n}\n\nexport const errorToBeAdded = (error, id, userMessage) => {\n if (error.response && error.response.status === 403) {\n return ({ type: NEW_ERROR, error, id, userMessage: userMessage + permissionDenied })\n }\n\n return ({ type: NEW_ERROR, error, id, userMessage })\n}\n\nexport const errorToBeCleared = id => ({ type: CLEAR_ERROR, id })\n\nexport const selectAllErrorsMapped = state => state.allErrors.map(error => state.errorsById[error])\n\nexport const handleError = (dispatch, error, errorId, message) => {\n if (error.response && error.response.data && error.response.data.error ) {\n if (error.response.data.error.message == \"Access token has expired.\") {\n dispatch(logoutStarted())\n logout().finally(() => {\n window.sessionStorage.removeItem(\"token\")\n dispatch(logoutSuccess())\n dispatch(errorToBeAdded(error, \"sessionExpired\", \"Session expired\"))\n })\n } else { dispatch(errorToBeAdded(error, errorId, error.response.data.error.message)) }\n } else {\n dispatch(errorToBeAdded(error, errorId, message))\n }\n}\n\nexport default function errorReducer(state = initialState, action) {\n switch (action.type) {\n case NEW_ERROR: {\n return saveError(state, action)\n }\n case CLEAR_ERROR: {\n return clearError(state, action)\n }\n default:\n return state\n }\n}\n","import * as R from 'ramda'\n\nexport const LOADING = 'LOADING'\n\nconst updateState = (state, loading) => {\n return R.mergeDeepRight(state, { loading: loading })\n}\nexport const loadingAction = loading => ({ type: LOADING, loading })\n\nconst initialState = {\n loading: false,\n}\n\nexport default function loaderReducer(state = initialState, action) {\n switch (action.type) {\n case LOADING: {\n return updateState(initialState, action.loading)\n }\n default:\n return state\n }\n }","import axios from 'axios'\nimport { host, TOP, issuer } from '../constants'\nimport { normalizeExtension } from '../utils'\n\n// Internal help/generic functions\nfunction getCookie(name) {\n let cookieValue = null;\n if (document.cookie && document.cookie !== '') {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) === (`${name}=`)) {\n cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n break;\n }\n }\n }\n return cookieValue;\n}\n\nfunction buildHeaders(authorize = false, extraHeaders = {}) {\n const token = window.sessionStorage.token\n let headers = {\n Pragma: 'no-cache',\n 'Cache-Control': 'no-cache',\n }\n if (authorize && token) headers = { ...headers, Authorization: `token ${token}` }\n return { ...headers, ...extraHeaders }\n}\n\nfunction get(uri, params = {}, options) {\n const opt = { method: 'GET', params, headers: buildHeaders() };\n return axios.get(`${host}${uri}`, { ...opt, ...options })\n .then(response => response.data);\n}\n\nfunction post(uri, body = {}) {\n const options = {\n headers: buildHeaders(false, { 'X-CSRFToken': getCookie('csrftoken') }),\n };\n return axios.post(`${host}${uri}`, body, options)\n .then(response => response.data);\n}\n\nfunction authorizedGet({ uri, params = {}, options }) {\n const opt = {\n params,\n headers: buildHeaders(true),\n };\n return axios.get(`${host}${uri}`, { ...options, ...opt })\n .then(response => response.data);\n}\n\nfunction authorizedPost({ uri, params, body = {} }) {\n const options = {\n params,\n headers: buildHeaders(true, { 'X-CSRFToken': getCookie('csrftoken') }),\n };\n\n return axios.post(`${host}${uri}`, body, options)\n .then(response => response.data);\n}\n\nfunction authorizedPatch({ uri, params, body = {} }) {\n const options = {\n params,\n headers: buildHeaders(true, { 'X-CSRFToken': getCookie('csrftoken') }),\n };\n return axios.patch(`${host}${uri}`, body, options)\n .then(response => response.data);\n}\n\nfunction authorizedPut({ uri, params, body = {} }) {\n const options = {\n params,\n headers: buildHeaders(true, { 'X-CSRFToken': getCookie('csrftoken') }),\n };\n return axios.put(`${host}${uri}`, body, options)\n .then(response => response.data);\n}\n\nexport const select = [\n \"id\",\n \"identities\",\n \"displayName,\"\n].join() + normalizeExtension([\n \"UNDPmail\"\n]);\n\nexport const selectUserInfo = [\n \"id\",\n \"identities\",\n \"accountEnabled\", \n \"department\", \n \"displayName\", \n \"givenName\", \n \"surname\",\n \"\"\n].join() + normalizeExtension([\n \"BusinessUnit\",\n \"DutyStation\",\n \"EmployeeNumber\",\n \"lastlogontime\", // NOTE: all lowercases other\n \"MiddleInitial\",\n \"UNDPmail\",\n \"UserType\",\n \"lastpwdchangetime\",\n \"pwneverexpires\",\n \"pwresetemail\"\n]);\n\n// REST API\nexport function getMe() {\n return authorizedGet({ uri: 'accounts/users/me/' });\n}\n\nexport function logout() {\n return authorizedPost({ uri: 'accounts/users/logout/' });\n}\n\nexport function login(body) {\n return post('accounts/users/login/', body);\n}\n\nexport function getSearchResult(key) {\n const params = {\n key,\n issuer,\n $top: TOP,\n $select: select\n };\n return authorizedGet({ uri: 'accounts/users/', params });\n}\n\nexport function getUserInfo(userId) {\n const params = {\n $select: selectUserInfo\n };\n return authorizedGet({ uri: `accounts/users/${userId}/`, params });\n}\n\nexport function updateUserInfo(userId, body) {\n return authorizedPatch({ uri: `accounts/users/${userId}/`, body });\n}\n\nexport function createUser(body) {\n return authorizedPost({ uri: 'accounts/users/', body });\n}\n\nexport function getLdap(uid) {\n return authorizedGet({ uri: `accounts/users/search/${uid}/` }); \n}\n\nexport function resetPassword(userId, body) {\n return authorizedPatch({ uri: `accounts/users/password-reset/${userId}/`, body });\n}\n\nexport function changeToActive(userId, body) {\n return authorizedPatch({ uri: `accounts/users/set-active/${userId}/`, body });\n}","export const SNACKBAR_SUCCESS = 'SNACKBAR_SUCCESS';\nexport const SNACKBAR_CLEAR = 'SNACKBAR_CLEAR';\n\nexport const showSuccessSnackbar = message => {\n return dispatch => {\n dispatch({ type: \"SNACKBAR_SUCCESS\", message });\n };\n};\n \nexport const clearSnackbar = () => {\n return dispatch => {\n dispatch({ type: \"SNACKBAR_CLEAR\" });\n };\n};\n\nconst initialState = {\n successSnackbarOpen: false,\n successSnackbarMessage: 'SUCCESS !',\n};\n\nexport default function successReducer(state = initialState, action) {\n switch (action.type) {\n case SNACKBAR_SUCCESS:\n return {\n ...state,\n successSnackbarOpen: true,\n successSnackbarMessage: action.message\n };\n case SNACKBAR_CLEAR:\n return {\n ...state,\n successSnackbarOpen: false,\n };\n default:\n return state;\n }\n}","import * as R from \"ramda\";\nimport {\n clearError,\n startLoading,\n stopLoading,\n saveErrorMsg,\n} from \"../../helpers/api/meta\";\nimport { errorToBeAdded } from \"../error\";\nimport { getMe, logout, login } from \"../../helpers/api/api\";\n\nexport const GET_ME_STARTED = \"GET_ME_STARTED\";\nexport const GET_ME_SUCCESS = \"GET_ME_SUCCESS\";\nexport const GET_ME_FAILURE = \"GET_ME_FAILURE\";\nexport const LOGOUT_STARTED = \"LOGOUT_STARTED\";\nexport const LOGOUT_SUCCESS = \"LOGOUT_SUCCESS\";\n\nexport const SIGNIN_STARTED = \"SIGNIN_STARTED\";\nexport const SIGNIN_SUCCESS = \"SIGNIN_SUCCESS\";\nexport const SIGNIN_FAILURE = \"SIGNIN_FAILURE\";\nexport const SIGNIN_ENDED = \"SIGNIN_ENDED\";\n\nexport const getMeStarted = () => ({ type: GET_ME_STARTED });\nexport const getMeSuccess = (success) => ({ type: GET_ME_SUCCESS, success });\nexport const getMeFailure = (error) => ({ type: GET_ME_FAILURE, error });\nexport const logoutStarted = () => ({ type: LOGOUT_STARTED });\nexport const logoutSuccess = () => ({ type: LOGOUT_SUCCESS });\n\nexport const signinStarted = () => ({ type: SIGNIN_STARTED });\nexport const signinSuccess = (success) => ({ type: SIGNIN_SUCCESS, success });\nexport const signinFailure = (error) => ({ type: SIGNIN_FAILURE, error });\nexport const signinEnded = () => ({ type: SIGNIN_ENDED });\nconst updateState = (state, action) => {\n let res = action.success\n ? R.mergeDeepRight(state, { authorized: true, ...action.success })\n : state;\n return res;\n};\n\nconst updateError = (state, action) => {\n let res = R.mergeDeepRight(state, { authorized: false, error: action.error });\n return res;\n};\n\nconst initialState = {\n authorized: false,\n loading: false,\n id: null,\n email: null,\n fullname: null,\n last_login: null,\n date_joined: null,\n role: null,\n};\n\nconst saveMe = (state, action) => {\n const { id, email, fullname, last_login, date_joined ,role} = action.success;\n return R.mergeDeepRight(state, {\n authorized: true,\n id,\n email,\n fullname,\n last_login,\n date_joined,\n role\n });\n};\nconst messages = {\n id: \"getMe\",\n failure: \"Session expired.\",\n signinFailed: \"Signin failed\",\n};\n\nexport const callGetMe = () => (dispatch) => {\n dispatch(getMeStarted());\n return getMe()\n .then((success) => {\n dispatch(getMeSuccess(success));\n return success;\n })\n .catch((error) => {\n window.sessionStorage.removeItem(\"token\");\n window.location.href = \"/login/error/104\";\n dispatch(logoutSuccess());\n throw error;\n });\n};\n\nexport const signin = (body) => (dispatch) => {\n dispatch(signinStarted());\n return login(body)\n .then((success) => {\n window.sessionStorage.setItem(\"token\", success.token);\n dispatch(signinEnded());\n dispatch(signinSuccess(success));\n })\n .catch((error) => {\n dispatch(signinEnded());\n dispatch(signinFailure(error));\n dispatch(errorToBeAdded(error, 'signinFailure', messages.signinFailed))\n throw error;\n });\n};\n\nexport const signout = () => (dispatch) => {\n dispatch(logoutStarted());\n return logout().finally(() => {\n window.sessionStorage.removeItem(\"token\");\n dispatch(logoutSuccess());\n });\n};\n\nexport default function sessionReducer(state = initialState, action) {\n switch (action.type) {\n case GET_ME_STARTED: {\n return startLoading(clearError(state));\n }\n case GET_ME_SUCCESS: {\n return saveMe(stopLoading(state), action);\n }\n case GET_ME_FAILURE: {\n return saveErrorMsg(stopLoading(state), action, messages.failure);\n }\n case LOGOUT_STARTED: {\n return startLoading(clearError(state));\n }\n case LOGOUT_SUCCESS: {\n return initialState;\n }\n case SIGNIN_STARTED: {\n return startLoading(clearError(state));\n }\n case SIGNIN_SUCCESS: {\n return updateState(state, action);\n }\n case SIGNIN_FAILURE: {\n return updateError(state, action);\n }\n case SIGNIN_ENDED: {\n return stopLoading(state);\n }\n default:\n return state;\n }\n}\n","import * as R from 'ramda'\nimport { handleError } from '../../reducers/error'\nimport { showSuccessSnackbar } from '../../reducers/success'\nimport { loadingAction } from '../../reducers/loader'\n\nexport const asyncStarted = (tag) => ({ type: `${tag}_STARTED` })\nexport const asyncSuccess = (tag, params) => ({ type: `${tag}_SUCCESS`, ...params })\nexport const asyncFailure = (tag, error) => ({ type: `${tag}_FAILURE`, error })\n\nexport const call = (meta) => (dispatch) => {\n const { endpoint, inputs, action, messages } = meta\n dispatch(loadingAction(true))\n dispatch(asyncStarted(action))\n return endpoint(inputs)\n .then((success) => {\n dispatch(loadingAction(false))\n dispatch(asyncSuccess(action, success))\n dispatch(showSuccessSnackbar(messages.success));\n return success\n })\n .catch((error) => {\n dispatch(loadingAction(false))\n dispatch(asyncFailure(action, error))\n handleError(dispatch, error, messages.id, messages.failure)\n throw error\n })\n}\n\nexport const clearError = state => R.assoc('error', {}, state)\nexport const startLoading = state => R.assoc('loading', true, state)\nexport const stopLoading = state => R.assoc('loading', false, state)\nexport const saveErrorMsg = (state, action, message) => R.assoc(\n 'error',\n {\n message,\n error: action.error,\n },\n state)\n\nexport const reducer = (initialState, tag, success, failure) => (state = initialState, action) => {\n switch (action.type) {\n case `${tag}_STARTED`: {\n return startLoading(clearError(state))\n }\n case `${tag}_SUCCESS`: {\n return success(stopLoading(state), action)\n }\n case `${tag}_FAILURE`: {\n return saveErrorMsg(stopLoading(state), action, failure)\n }\n default:\n return state\n }\n}\n","import { CODES, extension } from './constants'\nimport * as R from 'ramda'\n\nexport const normalizeCode = (code) => {\n for (let i = 0; i < CODES.length; i++) {\n if (CODES[i].code == code) {\n return CODES[i].description\n }\n }\n return CODES[0].description\n}\n\nexport const normalizeExtension = (list) => {\n for (let i = 0; i < list.length; i++) {\n list[i] = extension.concat(list[i])\n }\n return list.join()\n}\n\nexport const getUserName = (identities) => {\n let res = null\n for (let i = 0; i < identities.length; i++) {\n if (identities[i].signInType === \"userName\") {\n res = identities[i].issuerAssignedId\n return res\n }\n }\n return res\n}\n\nexport const parseExtension = (obj, list) => {\n // Example inputs:\n // - obj = {surname: \"Doe\"}\n // - list = {UNDPMail: \"doe@undp.org\"}\n // Related output:\n // - {surname: \"Doe\", extension_UNDPMail: \"doe@undp.org\"}\n Object.keys(list).map((key, index) => {\n obj[extension.concat(key)] = list[key]\n })\n return obj\n}\n\nexport const handleUndefined = (field) => {\n let res = field ? field : ''\n return res;\n}\n\nexport const validateEmail = (email) => {\n let re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n return re.test(email)\n}\n\nconst rules = {\n numeric: { min: 1, max: 3 },\n uppercase: { min: 1, max: 3 },\n lowercase: { min: 1, max: 3 },\n general: function () {\n return { min: this.numeric.max + this.uppercase.max + this.lowercase.max, max: 2 * (this.numeric.max + this.uppercase.max + this.lowercase.max) }\n } \n}\n\nexport const randomPassword = () => {\n const chars = {\n numeric: '0123456789',\n uppercase: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n lowercase: 'abcdefghijklmnopqrstuvwxyz',\n general: function () {\n return this.numeric + this.uppercase + this.lowercase\n }\n }\n const length = {\n numeric: Math.floor(Math.random() * (rules.numeric.max + 1 - rules.numeric.min)) + rules.numeric.min,\n uppercase: Math.floor(Math.random() * (rules.uppercase.max + 1 - rules.uppercase.min)) + rules.uppercase.min,\n lowercase: Math.floor(Math.random() * (rules.lowercase.max + 1 - rules.lowercase.min)) + rules.lowercase.min,\n general: Math.floor(Math.random() * (rules.general().max + 1 - rules.general().min)) + rules.general().min,\n }\n let password = ''\n for (let i = 0; i < length.numeric; i++) {\n password += chars.numeric.charAt(Math.random() * chars.numeric.length)\n }\n for (let i = 0; i < length.uppercase; i++) {\n password += chars.uppercase.charAt(Math.random() * chars.uppercase.length)\n }\n for (let i = 0; i < length.lowercase; i++) {\n password += chars.lowercase.charAt(Math.random() * chars.lowercase.length)\n }\n for (let i = 0; i < length.general - length.numeric - length.uppercase - length.lowercase; i++) {\n password += chars.general().charAt(Math.random() * chars.general().length)\n }\n let shuffled = password.split('').sort(()=>(Math.random()-0.5)).join('')\n return shuffled\n}\n\nexport const validatePassword = (password) => {\n return /[a-z]/.test(password) && /[A-Z]/.test(password) && /\\d/.test(password) && (password.length >= rules.general().min)\n}\n\nexport const checkAccessAllowed = (role,moreInfo = {}) => {\n //Allowed Roles ['PSSupport','GSDReadOnLy']\n switch (role){\n case 'PSSupport':\n return true;\n case 'GSDReadOnLy':\n return false;\n default:\n return false\n }\n}\n// extension_afc19e650ec54fbdbab16666a6342cd8_pwneverexpires","import {\n clearError,\n startLoading,\n stopLoading,\n saveErrorMsg,\n} from \"../../helpers/api/meta\";\nimport { handleError } from \"../error\";\nimport { showSuccessSnackbar } from \"../success\";\nimport { getUserInfo, updateUserInfo ,resetPassword,changeToActive} from \"../../helpers/api/api\";\nimport { loadingAction } from \"../loader\";\n\nexport const GET_INFO_STARTED = \"GET_INFO_STARTED\";\nexport const GET_INFO_SUCCESS = \"GET_INFO_SUCCESS\";\nexport const GET_INFO_FAILURE = \"GET_INFO_FAILURE\";\nexport const GET_INFO_CLEAR = \"GET_INFO_CLEAR\";\n\nexport const UPDATE_INFO_STARTED = \"UPDATE_INFO_STARTED\";\nexport const UPDATE_INFO_SUCCESS = \"UPDATE_INFO_SUCCESS\";\nexport const UPDATE_INFO_FAILURE = \"UPDATE_INFO_FAILURE\";\nexport const UPDATE_INFO_CLEAR = \"UPDATE_INFO_CLEAR\";\n\nexport const getInfoStarted = () => ({ type: GET_INFO_STARTED });\nexport const getInfoSuccess = (data) => ({\n type: GET_INFO_SUCCESS,\n data: data,\n});\nexport const getInfoFailure = (error) => ({ type: GET_INFO_FAILURE, error });\nexport const getInfoClear = () => ({ type: GET_INFO_CLEAR });\n\nexport const updateInfoStarted = () => ({ type: UPDATE_INFO_STARTED });\nexport const updateInfoSuccess = () => ({\n type: UPDATE_INFO_SUCCESS,\n});\nexport const updateInfoFailure = (error) => ({\n type: UPDATE_INFO_FAILURE,\n error,\n});\nexport const updateInfoClear = () => ({ type: UPDATE_INFO_CLEAR });\n\nconst messages = {\n id: \"getUserInfo\",\n getFailure: \"Couldn't get user info.\",\n updateFailure: \"Couldn't update user.\",\n updated: \"User updated\",\n};\n\nconst initialState = {\n info: {},\n loading: false,\n error: {},\n};\n\nexport const callGetUserInfoStart = (val) => (dispatch) => {\n dispatch(getInfoStarted());\n\n return getUserInfo(val)\n .then((success) => {\n dispatch(getInfoSuccess(success));\n })\n .catch((error) => {\n dispatch(getInfoFailure());\n handleError(dispatch, error, messages.id, messages.getFailure);\n throw error;\n });\n};\n\nexport const callUpdateUserInfoStart = (userId, body) => (dispatch) => {\n dispatch(loadingAction(true));\n dispatch(updateInfoStarted());\n\n return updateUserInfo(userId, body)\n .then((success) => {\n dispatch(loadingAction(false));\n dispatch(updateInfoSuccess());\n dispatch(showSuccessSnackbar(messages.updated));\n })\n .catch((error) => {\n dispatch(loadingAction(false));\n dispatch(updateInfoFailure());\n handleError(dispatch, error, messages.id, messages.updateFailure);\n throw error;\n });\n};\n\nexport const callUserInfoClear = () => (dispatch) => {\n dispatch(getInfoClear());\n};\n\nexport default function userReducer(state = initialState, action) {\n switch (action.type) {\n case GET_INFO_STARTED: {\n return startLoading(clearError(state));\n }\n case GET_INFO_SUCCESS: {\n return { ...state, loading: false, info: action.data };\n }\n case GET_INFO_FAILURE: {\n return saveErrorMsg(stopLoading(state), action, messages.getFailure);\n }\n case GET_INFO_CLEAR: {\n return stopLoading(clearError(state));\n }\n case UPDATE_INFO_STARTED: {\n return startLoading(clearError(state));\n }\n case UPDATE_INFO_SUCCESS: {\n return { ...state, loading: false };\n }\n case UPDATE_INFO_FAILURE: {\n return saveErrorMsg(stopLoading(state), action, messages.updateFailure);\n }\n case UPDATE_INFO_CLEAR: {\n return stopLoading(clearError(state));\n }\n\n default:\n return state;\n }\n}\n\nexport const callResetPasswordStart = (userId, body) => (dispatch) => {\n dispatch(loadingAction(true));\n dispatch(updateInfoStarted());\n\n return resetPassword(userId, body)\n .then((success) => {\n dispatch(loadingAction(false));\n dispatch(updateInfoSuccess());\n dispatch(showSuccessSnackbar(messages.updated));\n })\n .catch((error) => {\n dispatch(loadingAction(false));\n dispatch(updateInfoFailure());\n handleError(dispatch, error, messages.id, messages.updateFailure);\n throw error;\n });\n};\n\nexport const callSetActiveStart = (userId, body) => (dispatch) => {\n dispatch(loadingAction(true));\n dispatch(updateInfoStarted());\n\n return changeToActive(userId, body)\n .then((success) => {\n dispatch(loadingAction(false));\n dispatch(updateInfoSuccess());\n dispatch(showSuccessSnackbar(messages.updated));\n })\n .catch((error) => {\n dispatch(loadingAction(false));\n dispatch(updateInfoFailure());\n handleError(dispatch, error, messages.id, messages.updateFailure);\n throw error;\n });\n};","import React from 'react'\nimport { \n Backdrop,\n CircularProgress,\n makeStyles } from '@material-ui/core'\n\n\nconst useStyles = makeStyles(theme => ({\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n}))\n\nconst CustomLoader = (props) => {\n const classes = useStyles()\n return (\n \n \n \n )\n}\n\nexport default CustomLoader","import {\n clearError,\n startLoading,\n stopLoading,\n saveErrorMsg,\n} from '../../helpers/api/meta'\nimport { handleError } from '../error'\nimport { getSearchResult } from '../../helpers/api/api' \n\nexport const SEARCH_STARTED = 'SEARCH_STARTED'\nexport const SEARCH_SUCCESS = 'SEARCH_SUCCESS'\nexport const SEARCH_FAILURE = 'SEARCH_FAILURE'\nexport const SEARCH_CLEAR = 'SEARCH_CLEAR'\n\nexport const searchStarted = () => ({ type: SEARCH_STARTED })\nexport const searchSuccess = data => ({ type: SEARCH_SUCCESS, data: data.value })\nexport const searchFailure = error => ({ type: SEARCH_FAILURE, error })\nexport const searchClear = () => ({ type: SEARCH_CLEAR })\n\nconst messages = {\n id: 'searchUser',\n failure: 'User search failed.',\n}\n\nconst initialState = {\n list: [],\n loading: false,\n error: {}\n}\n\nexport const callSearchStart = (val) => (dispatch) => {\n dispatch(searchStarted())\n\n return getSearchResult(val)\n .then((success) => {\n dispatch(searchSuccess(success))\n })\n .catch((error) => {\n dispatch(searchFailure())\n handleError(dispatch, error, messages.id, messages.failure)\n throw error;\n })\n}\n\nexport const callSearchClear = () => (dispatch) => {\n dispatch(searchClear())\n}\n\nexport default function userReducer(state = initialState, action) {\n switch (action.type) {\n case SEARCH_STARTED: {\n return startLoading(clearError(state))\n }\n case SEARCH_SUCCESS: {\n return { ...state, loading: false, list: action.data };\n }\n case SEARCH_FAILURE: {\n return saveErrorMsg(stopLoading(state), action, messages.failure)\n }\n case SEARCH_CLEAR: {\n return stopLoading(clearError(state))\n }\n default:\n return state\n }\n}","import * as R from 'ramda'\nimport { call, reducer } from '../../helpers/api/meta'\nimport { getLdap } from '../../helpers/api/api'\n\n// Action types\nexport const GET_LDAP = 'GET_LDAP'\n\n// API calls\nexport const callGetLdap = (inputs) => {\n const meta = {\n endpoint: (params) => getLdap(params),\n inputs,\n action: GET_LDAP,\n messages: {\n id: 'getLdap',\n success: 'LDAP user loaded',\n failure: 'Could not get LDAP user',\n }\n }\n return call(meta)\n}\n\n// Reducer\nconst initialState = {\n loading: false,\n data: {},\n error: {}\n}\nconst saveLdap = (state, action) => { \n return R.assoc('data', action, state)\n}\nconst messages = {\n failure: 'Could not get LDAP user',\n}\nexport default reducer(initialState, GET_LDAP, saveLdap, messages.failure)"],"sourceRoot":""}